use crate::newtypes::{CommunityId, DbUrl, LanguageId, PersonId, PostId}; #[cfg(feature = "full")] use crate::schema::{post, post_like, post_read, post_saved}; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; #[cfg(feature = "full")] use ts_rs::TS; use typed_builder::TypedBuilder; #[skip_serializing_none] #[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)] #[cfg_attr(feature = "full", derive(Queryable, Identifiable, TS))] #[cfg_attr(feature = "full", diesel(table_name = post))] #[cfg_attr(feature = "full", ts(export))] pub struct Post { pub id: PostId, pub name: String, #[cfg_attr(feature = "full", ts(type = "string"))] pub url: Option, pub body: Option, pub creator_id: PersonId, pub community_id: CommunityId, pub removed: bool, pub locked: bool, pub published: chrono::NaiveDateTime, pub updated: Option, pub deleted: bool, pub nsfw: bool, pub embed_title: Option, pub embed_description: Option, #[cfg_attr(feature = "full", ts(type = "string"))] pub thumbnail_url: Option, #[cfg_attr(feature = "full", ts(type = "string"))] pub ap_id: DbUrl, pub local: bool, #[cfg_attr(feature = "full", ts(type = "string"))] pub embed_video_url: Option, pub language_id: LanguageId, pub featured_community: bool, pub featured_local: bool, } #[derive(Debug, Clone, TypedBuilder)] #[builder(field_defaults(default))] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = post))] pub struct PostInsertForm { #[builder(!default)] pub name: String, #[builder(!default)] pub creator_id: PersonId, #[builder(!default)] pub community_id: CommunityId, pub nsfw: Option, pub url: Option, pub body: Option, pub removed: Option, pub locked: Option, pub updated: Option, pub published: Option, pub deleted: Option, pub embed_title: Option, pub embed_description: Option, pub embed_video_url: Option, pub thumbnail_url: Option, pub ap_id: Option, pub local: Option, pub language_id: Option, pub featured_community: Option, pub featured_local: Option, } #[derive(Debug, Clone, TypedBuilder)] #[builder(field_defaults(default))] #[cfg_attr(feature = "full", derive(AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = post))] pub struct PostUpdateForm { pub name: Option, pub nsfw: Option, pub url: Option>, pub body: Option>, pub removed: Option, pub locked: Option, pub published: Option, pub updated: Option>, pub deleted: Option, pub embed_title: Option>, pub embed_description: Option>, pub embed_video_url: Option>, pub thumbnail_url: Option>, pub ap_id: Option, pub local: Option, pub language_id: Option, pub featured_community: Option, pub featured_local: Option, } #[derive(PartialEq, Eq, Debug)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr(feature = "full", diesel(belongs_to(crate::source::post::Post)))] #[cfg_attr(feature = "full", diesel(table_name = post_like))] pub struct PostLike { pub id: i32, pub post_id: PostId, pub person_id: PersonId, pub score: i16, pub published: chrono::NaiveDateTime, } #[derive(Clone)] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = post_like))] pub struct PostLikeForm { pub post_id: PostId, pub person_id: PersonId, pub score: i16, } #[derive(PartialEq, Eq, Debug)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr(feature = "full", diesel(belongs_to(crate::source::post::Post)))] #[cfg_attr(feature = "full", diesel(table_name = post_saved))] pub struct PostSaved { pub id: i32, pub post_id: PostId, pub person_id: PersonId, pub published: chrono::NaiveDateTime, } #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = post_saved))] pub struct PostSavedForm { pub post_id: PostId, pub person_id: PersonId, } #[derive(PartialEq, Eq, Debug)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr(feature = "full", diesel(belongs_to(crate::source::post::Post)))] #[cfg_attr(feature = "full", diesel(table_name = post_read))] pub struct PostRead { pub id: i32, pub post_id: PostId, pub person_id: PersonId, pub published: chrono::NaiveDateTime, } #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", diesel(table_name = post_read))] pub struct PostReadForm { pub post_id: PostId, pub person_id: PersonId, }