use lemmy_db_schema::{ newtypes::{CommentId, CommentReportId, CommunityId, LanguageId, LocalUserId, PostId}, CommentSortType, ListingType, }; use lemmy_db_views::structs::{CommentReportView, CommentView, VoteView}; use serde::{Deserialize, Serialize}; use serde_with::skip_serializing_none; #[cfg(feature = "full")] use ts_rs::TS; #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Create a comment. pub struct CreateComment { pub content: String, pub post_id: PostId, pub parent_id: Option, pub language_id: Option, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Default, Copy, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Fetch an individual comment. pub struct GetComment { pub id: CommentId, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Edit a comment. pub struct EditComment { pub comment_id: CommentId, pub content: Option, pub language_id: Option, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Distinguish a comment (IE speak as moderator). pub struct DistinguishComment { pub comment_id: CommentId, pub distinguished: bool, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Delete your own comment. pub struct DeleteComment { pub comment_id: CommentId, pub deleted: bool, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Remove a comment (only doable by mods). pub struct RemoveComment { pub comment_id: CommentId, pub removed: bool, pub reason: Option, } #[derive(Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Save / bookmark a comment. pub struct SaveComment { pub comment_id: CommentId, pub save: bool, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// A comment response. pub struct CommentResponse { pub comment_view: CommentView, pub recipient_ids: Vec, } #[derive(Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Like a comment. pub struct CreateCommentLike { pub comment_id: CommentId, /// Must be -1, 0, or 1 . pub score: i16, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Get a list of comments. pub struct GetComments { pub type_: Option, pub sort: Option, pub max_depth: Option, pub page: Option, pub limit: Option, pub community_id: Option, pub community_name: Option, pub post_id: Option, pub parent_id: Option, pub saved_only: Option, pub liked_only: Option, pub disliked_only: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// The comment list response. pub struct GetCommentsResponse { pub comments: Vec, } #[derive(Debug, Serialize, Deserialize, Clone, Default)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Report a comment. pub struct CreateCommentReport { pub comment_id: CommentId, pub reason: String, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// The comment report response. pub struct CommentReportResponse { pub comment_report_view: CommentReportView, } #[derive(Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// Resolve a comment report (only doable by mods). pub struct ResolveCommentReport { pub report_id: CommentReportId, pub resolved: bool, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// List comment reports. pub struct ListCommentReports { pub comment_id: Option, 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, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// The comment report list response. pub struct ListCommentReportsResponse { pub comment_reports: Vec, } #[skip_serializing_none] #[derive(Debug, Serialize, Deserialize, Clone, Copy, Default, PartialEq, Eq, Hash)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// List comment likes. Admins-only. pub struct ListCommentLikes { pub comment_id: CommentId, pub page: Option, pub limit: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(feature = "full", derive(TS))] #[cfg_attr(feature = "full", ts(export))] /// The comment likes response pub struct ListCommentLikesResponse { pub comment_likes: Vec, }