#[cfg(feature = "full")] use diesel::Queryable; use lemmy_db_schema::{ aggregates::structs::{CommentAggregates, CommunityAggregates, PersonAggregates}, source::{ comment::Comment, comment_reply::CommentReply, community::Community, person::Person, person_comment_mention::PersonCommentMention, post::Post, }, SubscribedType, }; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; #[cfg(feature = "full")] use ts_rs::TS; #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS, Queryable))] #[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))] #[cfg_attr(feature = "full", ts(export))] /// A community follower. pub struct CommunityFollowerView { pub community: Community, pub follower: Person, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS, Queryable))] #[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))] #[cfg_attr(feature = "full", ts(export))] /// A community moderator. pub struct CommunityModeratorView { pub community: Community, pub moderator: Person, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(Queryable))] #[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))] /// A community person ban. pub struct CommunityPersonBanView { pub community: Community, pub person: Person, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS, Queryable))] #[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))] #[cfg_attr(feature = "full", ts(export))] /// A community view. pub struct CommunityView { pub community: Community, pub subscribed: SubscribedType, pub blocked: bool, pub counts: CommunityAggregates, pub banned_from_community: bool, } /// The community sort types. See here for descriptions: https://join-lemmy.org/docs/en/users/03-votes-and-ranking.html #[derive(Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub enum CommunitySortType { #[default] Active, Hot, New, Old, TopDay, TopWeek, TopMonth, TopYear, TopAll, MostComments, NewComments, TopHour, TopSixHour, TopTwelveHour, TopThreeMonths, TopSixMonths, TopNineMonths, Controversial, Scaled, NameAsc, NameDesc, } #[skip_serializing_none] #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS, Queryable))] #[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))] #[cfg_attr(feature = "full", ts(export))] /// A person mention view. pub struct PersonCommentMentionView { pub person_comment_mention: PersonCommentMention, pub comment: Comment, pub creator: Person, pub post: Post, pub community: Community, pub recipient: Person, pub counts: CommentAggregates, pub creator_banned_from_community: bool, pub banned_from_community: bool, pub creator_is_moderator: bool, pub creator_is_admin: bool, pub subscribed: SubscribedType, pub saved: bool, pub creator_blocked: bool, pub my_vote: Option, } // #[skip_serializing_none] // #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] // #[cfg_attr(feature = "full", derive(TS, Queryable))] // #[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))] // #[cfg_attr(feature = "full", ts(export))] // /// A person mention view. // pub struct PersonPostMentionView { // pub person_post_mention: PersonPostMention, // pub creator: Person, // pub post: Post, // pub community: Community, // pub recipient: Person, // pub counts: CommentAggregates, // pub creator_banned_from_community: bool, // pub banned_from_community: bool, // pub creator_is_moderator: bool, // pub creator_is_admin: bool, // pub subscribed: SubscribedType, // pub saved: bool, // pub creator_blocked: bool, // pub my_vote: Option, // } #[skip_serializing_none] #[derive(Debug, PartialEq, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS, Queryable))] #[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))] #[cfg_attr(feature = "full", ts(export))] /// A comment reply view. pub struct CommentReplyView { pub comment_reply: CommentReply, pub comment: Comment, pub creator: Person, pub post: Post, pub community: Community, pub recipient: Person, pub counts: CommentAggregates, pub creator_banned_from_community: bool, pub banned_from_community: bool, pub creator_is_moderator: bool, pub creator_is_admin: bool, pub subscribed: SubscribedType, pub saved: bool, pub creator_blocked: bool, pub my_vote: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS, Queryable))] #[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))] #[cfg_attr(feature = "full", ts(export))] /// A person view. pub struct PersonView { pub person: Person, pub counts: PersonAggregates, pub is_admin: bool, }