Skip to content

Commit

Permalink
Upgrade schematic (#839)
Browse files Browse the repository at this point in the history
* feat(config): upgrade schematic

* docs: add info about discord

* docs: add alt to img tag

* fix(frontend): make field readonly

* feat(backend): make lot of metadata list optional

* feat(config): param to remove media from monitoring collection

* feat(backend): add dummy function

* refactor(backend): use inbuilt method to join

* feat(backend): complete function

* build(backend): bump version

* build(backend): bump schematic version

* build(backend): bump version

* feat(backend): new general media filter

* chore(backend): remove only old metadata
  • Loading branch information
IgnisDa committed May 17, 2024
1 parent f1377cf commit dfbcc8a
Show file tree
Hide file tree
Showing 10 changed files with 219 additions and 179 deletions.
166 changes: 83 additions & 83 deletions Cargo.lock

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ async-graphql = { version = "7.0.3", features = [
"uuid",
] }
chrono = "0.4.38"
schematic = { version = "0.15.1", features = [
schematic = { version = "0.16", features = [
"config",
"json",
"schema",
Expand All @@ -36,7 +36,7 @@ sea-orm = { version = "0.12.15", features = [
"with-uuid",
], default-features = false }
sea-orm-migration = "0.12.15"
serde = { version = "1.0.198", features = ["derive"] }
serde = { version = "1.0.202", features = ["derive"] }
serde_json = "1.0.116"
strum = { version = "0.26.2", features = ["derive"] }
tracing = { version = "0.1.40", features = ["attributes"] }
2 changes: 1 addition & 1 deletion apps/backend/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ryot"
version = "5.4.0"
version = "5.4.2"
edition = "2021"
repository = "https://github.com/IgnisDa/ryot"
license = "GPL-3.0"
Expand Down
9 changes: 3 additions & 6 deletions apps/backend/src/fitness/resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use crate::{
entities::{
collection, collection_to_entity,
exercise::{self, ExerciseListItem},
prelude::{Exercise, UserMeasurement, UserToEntity, Workout},
prelude::{CollectionToEntity, Exercise, UserMeasurement, UserToEntity, Workout},
user::UserWithOnlyPreferences,
user_measurement, user_to_entity, workout,
},
Expand Down Expand Up @@ -533,11 +533,8 @@ impl ExerciseService {
q.filter(exercise::Column::Equipment.eq(v))
})
.apply_if(q.collection, |q, v| {
q.join(
JoinType::LeftJoin,
exercise::Relation::CollectionToEntity.def(),
)
.filter(collection_to_entity::Column::CollectionId.eq(v))
q.left_join(CollectionToEntity)
.filter(collection_to_entity::Column::CollectionId.eq(v))
})
})
.apply_if(input.search.query, |query, v| {
Expand Down
53 changes: 43 additions & 10 deletions apps/backend/src/miscellaneous/resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -508,11 +508,11 @@ impl From<GraphqlSortOrder> for Order {

#[derive(Debug, Serialize, Deserialize, Enum, Clone, PartialEq, Eq, Copy, Default)]
enum MediaSortBy {
LastUpdated,
Title,
#[default]
ReleaseDate,
LastSeen,
LastUpdated,
Rating,
}

Expand Down Expand Up @@ -541,6 +541,7 @@ enum MediaGeneralFilter {
Unrated,
Dropped,
OnAHold,
Completed,
Unseen,
}

Expand All @@ -553,7 +554,7 @@ struct MediaFilter {
#[derive(Debug, Serialize, Deserialize, InputObject, Clone)]
struct MetadataListInput {
search: SearchInput,
lot: MediaLot,
lot: Option<MediaLot>,
filter: Option<MediaFilter>,
sort: Option<SortInput<MediaSortBy>>,
}
Expand Down Expand Up @@ -1945,7 +1946,7 @@ impl MiscellaneousService {
.filter(
Expr::col((AliasedUserToEntity::Table, user_to_entity::Column::UserId)).eq(user_id),
)
.join(JoinType::Join, calendar_event::Relation::Metadata.def())
.inner_join(Metadata)
.join_rev(
JoinType::Join,
UserToEntity::belongs_to(CalendarEvent)
Expand Down Expand Up @@ -2112,8 +2113,10 @@ impl MiscellaneousService {
.group_by(metadata::Column::Id)
.group_by(user_to_entity::Column::MediaReason)
.filter(user_to_entity::Column::UserId.eq(user_id))
.filter(metadata::Column::Lot.eq(input.lot))
.join(JoinType::Join, metadata::Relation::UserToEntity.def())
.apply_if(input.lot, |query, v| {
query.filter(metadata::Column::Lot.eq(v))
})
.inner_join(UserToEntity)
.join(
JoinType::LeftJoin,
metadata::Relation::Review
Expand Down Expand Up @@ -2141,7 +2144,7 @@ impl MiscellaneousService {
input.filter.clone().and_then(|f| f.collection),
|query, v| {
query
.join(JoinType::Join, metadata::Relation::CollectionToEntity.def())
.inner_join(CollectionToEntity)
.filter(collection_to_entity::Column::CollectionId.eq(v))
},
)
Expand All @@ -2153,6 +2156,7 @@ impl MiscellaneousService {
s => query.filter(seen::Column::State.eq(match s {
MediaGeneralFilter::Dropped => SeenState::Dropped,
MediaGeneralFilter::OnAHold => SeenState::OnAHold,
MediaGeneralFilter::Completed => SeenState::InProgress,
_ => unreachable!(),
})),
})
Expand Down Expand Up @@ -5969,7 +5973,7 @@ impl MiscellaneousService {
)
})
.join(JoinType::Join, genre::Relation::MetadataToGenre.def())
// fuck it. we ball. (extremely unsafe, guaranteed to fail if names change)
// fuck it. we ball. (extremely unsafe, guaranteed to fail if table names change)
.group_by(Expr::cust("genre.id, genre.name"))
.order_by(Expr::col(Alias::new(num_items)), Order::Desc);
let paginator = query
Expand Down Expand Up @@ -6011,7 +6015,7 @@ impl MiscellaneousService {
)
})
.filter(user_to_entity::Column::UserId.eq(user_id))
.join(JoinType::Join, metadata_group::Relation::UserToEntity.def())
.inner_join(UserToEntity)
.order_by_asc(metadata_group::Column::Title);
let paginator = query
.clone()
Expand Down Expand Up @@ -6083,8 +6087,8 @@ impl MiscellaneousService {
)))),
alias,
)
.join(JoinType::LeftJoin, person::Relation::MetadataToPerson.def())
.join(JoinType::Join, person::Relation::UserToEntity.def())
.left_join(MetadataToPerson)
.inner_join(UserToEntity)
.group_by(person::Column::Id)
.group_by(person::Column::Name)
.order_by(order_by, sort_order);
Expand Down Expand Up @@ -7013,6 +7017,31 @@ GROUP BY m.id;
Ok(())
}

async fn remove_old_metadata_from_monitoring_collection(&self) -> Result<()> {
let older_than = Utc::now()
- ChronoDuration::try_days(self.config.media.monitoring_remove_after_days).unwrap();
self.db
.execute(Statement::from_sql_and_values(
DbBackend::Postgres,
r#"
DELETE FROM collection_to_entity
WHERE id IN (
SELECT cte.id
FROM collection_to_entity cte
JOIN collection c ON cte.collection_id = c.id AND c.name = $1
JOIN user_to_entity ute ON cte.metadata_id = ute.metadata_id
WHERE ute.metadata_id IS NOT NULL AND ute.last_updated_on < $2
);
"#,
[
DefaultCollection::Monitoring.to_string().into(),
older_than.into(),
],
))
.await?;
Ok(())
}

pub async fn remove_useless_data(&self) -> Result<()> {
let mut metadata_stream = Metadata::find()
.select_only()
Expand Down Expand Up @@ -7072,6 +7101,10 @@ GROUP BY m.id;

tracing::trace!("Invalidating invalid media import jobs");
self.invalidate_import_jobs().await.unwrap();
tracing::trace!("Removing stale media from Monitoring collection");
self.remove_old_metadata_from_monitoring_collection()
.await
.unwrap();
tracing::trace!("Checking for updates for media in Watchlist");
self.update_watchlist_metadata_and_send_notifications()
.await
Expand Down
2 changes: 1 addition & 1 deletion apps/frontend/app/routes/_dashboard.collections.list.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ export default function Page() {
defaultValue={
toUpdateCollection ? toUpdateCollection.name : undefined
}
disabled={toUpdateCollection?.isDefault}
readOnly={toUpdateCollection?.isDefault}
/>
<Textarea
label="Description"
Expand Down

0 comments on commit dfbcc8a

Please sign in to comment.