Skip to content

Commit 0c4d39b

Browse files
authored
Remove collection visibility (#816)
* chore(backend): remove resolver * chore(frontend): new url structure for apps * feat(database): migration to drop visibility from collection * feat(backend): remove all refs to collection visibility * feat(frontend): no more visibility stuff with collections * build(backend): bump version
1 parent f94fdd0 commit 0c4d39b

18 files changed

+47
-357
lines changed

Cargo.lock

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

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.2.1"
3+
version = "5.2.2"
44
edition = "2021"
55
repository = "https://github.com/IgnisDa/ryot"
66
license = "GPL-3.0"

apps/backend/src/entities/collection.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.11.3
22
33
use async_graphql::SimpleObject;
4-
use database::Visibility;
54
use sea_orm::entity::prelude::*;
65
use serde::{Deserialize, Serialize};
76

@@ -17,7 +16,6 @@ pub struct Model {
1716
pub description: Option<String>,
1817
#[graphql(skip)]
1918
pub user_id: i32,
20-
pub visibility: Visibility,
2119
}
2220

2321
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]

apps/backend/src/importer/media_tracker.rs

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use async_graphql::Result;
2-
use database::{ImportSource, MediaLot, MediaSource, Visibility};
2+
use database::{ImportSource, MediaLot, MediaSource};
33
use rust_decimal::Decimal;
44
use rust_decimal_macros::dec;
55
use sea_orm::prelude::DateTimeUtc;
@@ -170,10 +170,6 @@ pub async fn import(input: DeployMediaTrackerImportInput) -> Result<ImportResult
170170
"" => None,
171171
x => Some(x.to_owned()),
172172
}),
173-
visibility: Some(match l.privacy {
174-
ListPrivacy::Private => Visibility::Private,
175-
ListPrivacy::Public => Visibility::Public,
176-
}),
177173
update_id: None,
178174
})
179175
.collect();

apps/backend/src/miscellaneous/resolver.rs

+12-100
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,10 @@ use crate::{
9494
MetadataVideoSource, MovieSpecifics, PartialMetadata, PartialMetadataPerson,
9595
PartialMetadataWithoutId, PeopleSearchItem, PersonSourceSpecifics, PodcastSpecifics,
9696
PostReviewInput, ProgressUpdateError, ProgressUpdateErrorVariant, ProgressUpdateInput,
97-
ProgressUpdateResultUnion, PublicCollectionItem, ReviewPostedEvent,
98-
SeenAnimeExtraInformation, SeenMangaExtraInformation, SeenPodcastExtraInformation,
99-
SeenShowExtraInformation, ShowSpecifics, UserMediaOwnership, UserMediaReminder,
100-
UserSummary, UserToMediaReason, VideoGameSpecifics, VisualNovelSpecifics,
101-
WatchProvider,
97+
ProgressUpdateResultUnion, ReviewPostedEvent, SeenAnimeExtraInformation,
98+
SeenMangaExtraInformation, SeenPodcastExtraInformation, SeenShowExtraInformation,
99+
ShowSpecifics, UserMediaOwnership, UserMediaReminder, UserSummary, UserToMediaReason,
100+
VideoGameSpecifics, VisualNovelSpecifics, WatchProvider,
102101
},
103102
BackgroundJob, ChangeCollectionToEntityInput, EntityLot, IdAndNamedObject, IdObject,
104103
MediaStateChanged, SearchDetails, SearchInput, SearchResults, StoredUrl,
@@ -369,7 +368,6 @@ struct CollectionItem {
369368
name: String,
370369
num_items: u64,
371370
description: Option<String>,
372-
visibility: Visibility,
373371
}
374372

375373
#[derive(SimpleObject)]
@@ -817,25 +815,14 @@ impl MiscellaneousQuery {
817815
service.user_collections_list(user_id, name).await
818816
}
819817

820-
/// Get a list of publicly visible collections.
821-
async fn public_collections_list(
822-
&self,
823-
gql_ctx: &Context<'_>,
824-
input: SearchInput,
825-
) -> Result<SearchResults<PublicCollectionItem>> {
826-
let service = gql_ctx.data_unchecked::<Arc<MiscellaneousService>>();
827-
service.public_collections_list(input).await
828-
}
829-
830818
/// Get the contents of a collection and respect visibility.
831819
async fn collection_contents(
832820
&self,
833821
gql_ctx: &Context<'_>,
834822
input: CollectionContentsInput,
835823
) -> Result<CollectionContents> {
836824
let service = gql_ctx.data_unchecked::<Arc<MiscellaneousService>>();
837-
let user_id = service.user_id_from_ctx(gql_ctx).await.ok();
838-
service.collection_contents(user_id, input).await
825+
service.collection_contents(input).await
839826
}
840827

841828
/// Get details about a media present in the database.
@@ -4068,68 +4055,14 @@ impl MiscellaneousService {
40684055
id: collection.id,
40694056
name: collection.name,
40704057
description: collection.description,
4071-
visibility: collection.visibility,
40724058
num_items,
40734059
});
40744060
}
40754061
Ok(data)
40764062
}
40774063

4078-
async fn public_collections_list(
4079-
&self,
4080-
input: SearchInput,
4081-
) -> Result<SearchResults<PublicCollectionItem>> {
4082-
let page: u64 = input.page.unwrap_or(1).try_into().unwrap();
4083-
let c_alias = Alias::new("collection");
4084-
let u_alias = Alias::new("user");
4085-
let paginator = Collection::find()
4086-
.select_only()
4087-
.column_as(Expr::col((c_alias.clone(), collection::Column::Id)), "id")
4088-
.column_as(Expr::col((u_alias, user::Column::Name)), "username")
4089-
.column(collection::Column::Name)
4090-
.filter(collection::Column::Visibility.eq(Visibility::Public))
4091-
.apply_if(input.query, |query, v| {
4092-
query.filter(
4093-
Condition::any()
4094-
.add(
4095-
Expr::col((c_alias.clone(), collection::Column::Name))
4096-
.ilike(ilike_sql(&v)),
4097-
)
4098-
.add(
4099-
Expr::col((c_alias.clone(), collection::Column::Description))
4100-
.ilike(ilike_sql(&v)),
4101-
),
4102-
)
4103-
})
4104-
.left_join(User)
4105-
.order_by_desc(collection::Column::LastUpdatedOn)
4106-
.into_model::<PublicCollectionItem>()
4107-
.paginate(&self.db, self.config.frontend.page_size.try_into().unwrap());
4108-
let mut data = vec![];
4109-
let ItemsAndPagesNumber {
4110-
number_of_items,
4111-
number_of_pages,
4112-
} = paginator.num_items_and_pages().await?;
4113-
for collection in paginator.fetch_page(page - 1).await? {
4114-
data.push(collection);
4115-
}
4116-
let results = SearchResults {
4117-
details: SearchDetails {
4118-
total: number_of_items.try_into().unwrap(),
4119-
next_page: if page < number_of_pages {
4120-
Some((page + 1).try_into().unwrap())
4121-
} else {
4122-
None
4123-
},
4124-
},
4125-
items: data,
4126-
};
4127-
Ok(results)
4128-
}
4129-
41304064
async fn collection_contents(
41314065
&self,
4132-
user_id: Option<i32>,
41334066
input: CollectionContentsInput,
41344067
) -> Result<CollectionContents> {
41354068
let search = input.search.unwrap_or_default();
@@ -4144,20 +4077,6 @@ impl MiscellaneousService {
41444077
Some(c) => c,
41454078
None => return Err(Error::new("Collection not found".to_owned())),
41464079
};
4147-
if collection.visibility != Visibility::Public {
4148-
match user_id {
4149-
None => {
4150-
return Err(Error::new(
4151-
"Need to be logged in to view a private collection".to_owned(),
4152-
));
4153-
}
4154-
Some(u) => {
4155-
if u != collection.user_id {
4156-
return Err(Error::new("This collection is not public".to_owned()));
4157-
}
4158-
}
4159-
}
4160-
}
41614080

41624081
let take = input
41634082
.take
@@ -4422,16 +4341,13 @@ impl MiscellaneousService {
44224341
} else if let Some(ci) = insert.collection_id.unwrap() {
44234342
(
44244343
ci,
4425-
self.collection_contents(
4426-
Some(user_id),
4427-
CollectionContentsInput {
4428-
collection_id: ci,
4429-
filter: None,
4430-
search: None,
4431-
take: None,
4432-
sort: None,
4433-
},
4434-
)
4344+
self.collection_contents(CollectionContentsInput {
4345+
collection_id: ci,
4346+
filter: None,
4347+
search: None,
4348+
take: None,
4349+
sort: None,
4350+
})
44354351
.await?
44364352
.details
44374353
.name,
@@ -4525,10 +4441,6 @@ impl MiscellaneousService {
45254441
name: ActiveValue::Set(new_name),
45264442
user_id: ActiveValue::Set(user_id.to_owned()),
45274443
description: ActiveValue::Set(input.description),
4528-
visibility: match input.visibility {
4529-
None => ActiveValue::NotSet,
4530-
Some(v) => ActiveValue::Set(v),
4531-
},
45324444
..Default::default()
45334445
};
45344446
let inserted = col.save(&self.db).await.map_err(|_| {

apps/backend/src/models.rs

-12
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,6 @@ pub struct SearchDetails {
9999
name = "MetadataGroupSearchResults",
100100
params(media::MetadataGroupSearchItem)
101101
))]
102-
#[graphql(concrete(
103-
name = "PublicCollectionsListResults",
104-
params(media::PublicCollectionItem)
105-
))]
106102
#[graphql(concrete(
107103
name = "MediaCreatorSearchResults",
108104
params(media::MediaCreatorSearchItem)
@@ -184,13 +180,6 @@ pub enum MediaStateChanged {
184180
pub mod media {
185181
use super::*;
186182

187-
#[derive(Clone, Debug, PartialEq, Eq, FromQueryResult, SimpleObject)]
188-
pub struct PublicCollectionItem {
189-
pub id: i32,
190-
pub name: String,
191-
pub username: String,
192-
}
193-
194183
#[derive(Debug, SimpleObject, Serialize, Deserialize, Clone)]
195184
pub struct MetadataSearchItemWithLot {
196185
pub details: MetadataSearchItem,
@@ -254,7 +243,6 @@ pub mod media {
254243
pub struct CreateOrUpdateCollectionInput {
255244
pub name: String,
256245
pub description: Option<String>,
257-
pub visibility: Option<Visibility>,
258246
pub update_id: Option<i32>,
259247
}
260248

apps/frontend/app/routes/_dashboard.collections.$id._index.tsx

+1-4
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import {
2929
GraphqlSortOrder,
3030
MediaLot,
3131
} from "@ryot/generated/graphql/backend/graphql";
32-
import { changeCase, startCase } from "@ryot/ts-utils";
32+
import { startCase } from "@ryot/ts-utils";
3333
import {
3434
IconBucketDroplet,
3535
IconFilter,
@@ -162,9 +162,6 @@ export default function Page() {
162162
<Container>
163163
<Stack>
164164
<Box>
165-
<Text c="dimmed" size="xs" mb={-10}>
166-
{changeCase(loaderData.info.details.visibility)}
167-
</Text>
168165
<Title>{loaderData.info.details.name}</Title>{" "}
169166
<Text size="sm">
170167
{loaderData.contents.details.total} items, created by{" "}

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

-118
This file was deleted.

0 commit comments

Comments
 (0)