use crate::sensitive::Sensitive; use lemmy_db_schema::{ newtypes::{CommentId, CommunityId, DbUrl, LanguageId, PostId, PostReportId}, ListingType, PostFeatureType, SortType, }; use lemmy_db_views::structs::{PostReportView, PostView}; use lemmy_db_views_actor::structs::{CommunityModeratorView, CommunityView}; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; #[cfg(feature = "full")] use ts_rs::TS; use url::Url; #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct CreatePost { pub name: String, pub community_id: CommunityId, #[cfg_attr(feature = "full", ts(type = "string"))] pub url: Option, pub body: Option, pub honeypot: Option, pub nsfw: Option, pub language_id: Option, pub auth: Sensitive, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct PostResponse { pub post_view: PostView, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct GetPost { pub id: Option, pub comment_id: Option, pub auth: Option>, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct GetPostResponse { pub post_view: PostView, pub community_view: CommunityView, pub moderators: Vec, pub cross_posts: Vec, pub online: usize, } #[skip_serializing_none] #[derive(Serialize, Deserialize, Debug, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct GetPosts { pub type_: Option, pub sort: Option, pub page: Option, pub limit: Option, pub community_id: Option, pub community_name: Option, pub saved_only: Option, pub auth: Option>, } #[derive(Serialize, Deserialize, Debug, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct GetPostsResponse { pub posts: Vec, } #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct CreatePostLike { pub post_id: PostId, pub score: i16, pub auth: Sensitive, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct EditPost { pub post_id: PostId, pub name: Option, #[cfg_attr(feature = "full", ts(type = "string"))] pub url: Option, pub body: Option, pub nsfw: Option, pub language_id: Option, pub auth: Sensitive, } #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct DeletePost { pub post_id: PostId, pub deleted: bool, pub auth: Sensitive, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct RemovePost { pub post_id: PostId, pub removed: bool, pub reason: Option, pub auth: Sensitive, } #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct MarkPostAsRead { pub post_id: PostId, pub read: bool, pub auth: Sensitive, } #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct LockPost { pub post_id: PostId, pub locked: bool, pub auth: Sensitive, } #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct FeaturePost { pub post_id: PostId, pub featured: bool, pub feature_type: PostFeatureType, pub auth: Sensitive, } #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct SavePost { pub post_id: PostId, pub save: bool, pub auth: Sensitive, } #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct CreatePostReport { pub post_id: PostId, pub reason: String, pub auth: Sensitive, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct PostReportResponse { pub post_report_view: PostReportView, } #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct ResolvePostReport { pub report_id: PostReportId, pub resolved: bool, pub auth: Sensitive, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct ListPostReports { pub page: Option, pub limit: Option, /// Only shows the unresolved reports pub unresolved_only: Option, /// if no community is given, it returns reports for all communities moderated by the auth user pub community_id: Option, pub auth: Sensitive, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct ListPostReportsResponse { pub post_reports: Vec, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct GetSiteMetadata { #[cfg_attr(feature = "full", ts(type = "string"))] pub url: Url, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct GetSiteMetadataResponse { pub metadata: SiteMetadata, } #[skip_serializing_none] #[derive(Debug, Deserialize, Serialize, PartialEq, Eq, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] pub struct SiteMetadata { pub title: Option, pub description: Option, pub(crate) image: Option, pub embed_video_url: Option, }