Skip to content

Commit dfbcc8a

Browse files
authored
Upgrade schematic (#839)
* 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
1 parent f1377cf commit dfbcc8a

File tree

10 files changed

+219
-179
lines changed

10 files changed

+219
-179
lines changed

Cargo.lock

+83-83
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ async-graphql = { version = "7.0.3", features = [
1212
"uuid",
1313
] }
1414
chrono = "0.4.38"
15-
schematic = { version = "0.15.1", features = [
15+
schematic = { version = "0.16", features = [
1616
"config",
1717
"json",
1818
"schema",
@@ -36,7 +36,7 @@ sea-orm = { version = "0.12.15", features = [
3636
"with-uuid",
3737
], default-features = false }
3838
sea-orm-migration = "0.12.15"
39-
serde = { version = "1.0.198", features = ["derive"] }
39+
serde = { version = "1.0.202", features = ["derive"] }
4040
serde_json = "1.0.116"
4141
strum = { version = "0.26.2", features = ["derive"] }
4242
tracing = { version = "0.1.40", features = ["attributes"] }

apps/backend/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ryot"
3-
version = "5.4.0"
3+
version = "5.4.2"
44
edition = "2021"
55
repository = "https://github.com/IgnisDa/ryot"
66
license = "GPL-3.0"

apps/backend/src/fitness/resolver.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use crate::{
2424
entities::{
2525
collection, collection_to_entity,
2626
exercise::{self, ExerciseListItem},
27-
prelude::{Exercise, UserMeasurement, UserToEntity, Workout},
27+
prelude::{CollectionToEntity, Exercise, UserMeasurement, UserToEntity, Workout},
2828
user::UserWithOnlyPreferences,
2929
user_measurement, user_to_entity, workout,
3030
},
@@ -533,11 +533,8 @@ impl ExerciseService {
533533
q.filter(exercise::Column::Equipment.eq(v))
534534
})
535535
.apply_if(q.collection, |q, v| {
536-
q.join(
537-
JoinType::LeftJoin,
538-
exercise::Relation::CollectionToEntity.def(),
539-
)
540-
.filter(collection_to_entity::Column::CollectionId.eq(v))
536+
q.left_join(CollectionToEntity)
537+
.filter(collection_to_entity::Column::CollectionId.eq(v))
541538
})
542539
})
543540
.apply_if(input.search.query, |query, v| {

apps/backend/src/miscellaneous/resolver.rs

+43-10
Original file line numberDiff line numberDiff line change
@@ -508,11 +508,11 @@ impl From<GraphqlSortOrder> for Order {
508508

509509
#[derive(Debug, Serialize, Deserialize, Enum, Clone, PartialEq, Eq, Copy, Default)]
510510
enum MediaSortBy {
511+
LastUpdated,
511512
Title,
512513
#[default]
513514
ReleaseDate,
514515
LastSeen,
515-
LastUpdated,
516516
Rating,
517517
}
518518

@@ -541,6 +541,7 @@ enum MediaGeneralFilter {
541541
Unrated,
542542
Dropped,
543543
OnAHold,
544+
Completed,
544545
Unseen,
545546
}
546547

@@ -553,7 +554,7 @@ struct MediaFilter {
553554
#[derive(Debug, Serialize, Deserialize, InputObject, Clone)]
554555
struct MetadataListInput {
555556
search: SearchInput,
556-
lot: MediaLot,
557+
lot: Option<MediaLot>,
557558
filter: Option<MediaFilter>,
558559
sort: Option<SortInput<MediaSortBy>>,
559560
}
@@ -1945,7 +1946,7 @@ impl MiscellaneousService {
19451946
.filter(
19461947
Expr::col((AliasedUserToEntity::Table, user_to_entity::Column::UserId)).eq(user_id),
19471948
)
1948-
.join(JoinType::Join, calendar_event::Relation::Metadata.def())
1949+
.inner_join(Metadata)
19491950
.join_rev(
19501951
JoinType::Join,
19511952
UserToEntity::belongs_to(CalendarEvent)
@@ -2112,8 +2113,10 @@ impl MiscellaneousService {
21122113
.group_by(metadata::Column::Id)
21132114
.group_by(user_to_entity::Column::MediaReason)
21142115
.filter(user_to_entity::Column::UserId.eq(user_id))
2115-
.filter(metadata::Column::Lot.eq(input.lot))
2116-
.join(JoinType::Join, metadata::Relation::UserToEntity.def())
2116+
.apply_if(input.lot, |query, v| {
2117+
query.filter(metadata::Column::Lot.eq(v))
2118+
})
2119+
.inner_join(UserToEntity)
21172120
.join(
21182121
JoinType::LeftJoin,
21192122
metadata::Relation::Review
@@ -2141,7 +2144,7 @@ impl MiscellaneousService {
21412144
input.filter.clone().and_then(|f| f.collection),
21422145
|query, v| {
21432146
query
2144-
.join(JoinType::Join, metadata::Relation::CollectionToEntity.def())
2147+
.inner_join(CollectionToEntity)
21452148
.filter(collection_to_entity::Column::CollectionId.eq(v))
21462149
},
21472150
)
@@ -2153,6 +2156,7 @@ impl MiscellaneousService {
21532156
s => query.filter(seen::Column::State.eq(match s {
21542157
MediaGeneralFilter::Dropped => SeenState::Dropped,
21552158
MediaGeneralFilter::OnAHold => SeenState::OnAHold,
2159+
MediaGeneralFilter::Completed => SeenState::InProgress,
21562160
_ => unreachable!(),
21572161
})),
21582162
})
@@ -5969,7 +5973,7 @@ impl MiscellaneousService {
59695973
)
59705974
})
59715975
.join(JoinType::Join, genre::Relation::MetadataToGenre.def())
5972-
// fuck it. we ball. (extremely unsafe, guaranteed to fail if names change)
5976+
// fuck it. we ball. (extremely unsafe, guaranteed to fail if table names change)
59735977
.group_by(Expr::cust("genre.id, genre.name"))
59745978
.order_by(Expr::col(Alias::new(num_items)), Order::Desc);
59755979
let paginator = query
@@ -6011,7 +6015,7 @@ impl MiscellaneousService {
60116015
)
60126016
})
60136017
.filter(user_to_entity::Column::UserId.eq(user_id))
6014-
.join(JoinType::Join, metadata_group::Relation::UserToEntity.def())
6018+
.inner_join(UserToEntity)
60156019
.order_by_asc(metadata_group::Column::Title);
60166020
let paginator = query
60176021
.clone()
@@ -6083,8 +6087,8 @@ impl MiscellaneousService {
60836087
)))),
60846088
alias,
60856089
)
6086-
.join(JoinType::LeftJoin, person::Relation::MetadataToPerson.def())
6087-
.join(JoinType::Join, person::Relation::UserToEntity.def())
6090+
.left_join(MetadataToPerson)
6091+
.inner_join(UserToEntity)
60886092
.group_by(person::Column::Id)
60896093
.group_by(person::Column::Name)
60906094
.order_by(order_by, sort_order);
@@ -7013,6 +7017,31 @@ GROUP BY m.id;
70137017
Ok(())
70147018
}
70157019

7020+
async fn remove_old_metadata_from_monitoring_collection(&self) -> Result<()> {
7021+
let older_than = Utc::now()
7022+
- ChronoDuration::try_days(self.config.media.monitoring_remove_after_days).unwrap();
7023+
self.db
7024+
.execute(Statement::from_sql_and_values(
7025+
DbBackend::Postgres,
7026+
r#"
7027+
DELETE FROM collection_to_entity
7028+
WHERE id IN (
7029+
SELECT cte.id
7030+
FROM collection_to_entity cte
7031+
JOIN collection c ON cte.collection_id = c.id AND c.name = $1
7032+
JOIN user_to_entity ute ON cte.metadata_id = ute.metadata_id
7033+
WHERE ute.metadata_id IS NOT NULL AND ute.last_updated_on < $2
7034+
);
7035+
"#,
7036+
[
7037+
DefaultCollection::Monitoring.to_string().into(),
7038+
older_than.into(),
7039+
],
7040+
))
7041+
.await?;
7042+
Ok(())
7043+
}
7044+
70167045
pub async fn remove_useless_data(&self) -> Result<()> {
70177046
let mut metadata_stream = Metadata::find()
70187047
.select_only()
@@ -7072,6 +7101,10 @@ GROUP BY m.id;
70727101

70737102
tracing::trace!("Invalidating invalid media import jobs");
70747103
self.invalidate_import_jobs().await.unwrap();
7104+
tracing::trace!("Removing stale media from Monitoring collection");
7105+
self.remove_old_metadata_from_monitoring_collection()
7106+
.await
7107+
.unwrap();
70757108
tracing::trace!("Checking for updates for media in Watchlist");
70767109
self.update_watchlist_metadata_and_send_notifications()
70777110
.await

apps/frontend/app/routes/_dashboard.collections.list.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ export default function Page() {
249249
defaultValue={
250250
toUpdateCollection ? toUpdateCollection.name : undefined
251251
}
252-
disabled={toUpdateCollection?.isDefault}
252+
readOnly={toUpdateCollection?.isDefault}
253253
/>
254254
<Textarea
255255
label="Description"

0 commit comments

Comments
 (0)