use crate::newtypes::{CommentId, DbUrl, PersonId, PostId}; use serde::{Deserialize, Serialize}; #[cfg(feature = "full")] use crate::schema::{comment, comment_alias_1, comment_like, comment_saved}; // WITH RECURSIVE MyTree AS ( // SELECT * FROM comment WHERE parent_id IS NULL // UNION ALL // SELECT m.* FROM comment AS m JOIN MyTree AS t ON m.parent_id = t.id // ) // SELECT * FROM MyTree; #[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] #[cfg_attr(feature = "full", derive(Queryable, Associations, Identifiable))] #[cfg_attr(feature = "full", belongs_to(crate::source::post::Post))] #[cfg_attr(feature = "full", table_name = "comment")] pub struct Comment { pub id: CommentId, pub creator_id: PersonId, pub post_id: PostId, pub parent_id: Option, pub content: String, pub removed: bool, pub read: bool, // Whether the recipient has read the comment or not pub published: chrono::NaiveDateTime, pub updated: Option, pub deleted: bool, pub ap_id: DbUrl, pub local: bool, } #[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] #[cfg_attr(feature = "full", derive(Queryable, Associations, Identifiable))] #[cfg_attr(feature = "full", belongs_to(crate::source::post::Post))] #[cfg_attr(feature = "full", table_name = "comment_alias_1")] pub struct CommentAlias1 { pub id: CommentId, pub creator_id: PersonId, pub post_id: PostId, pub parent_id: Option, pub content: String, pub removed: bool, pub read: bool, // Whether the recipient has read the comment or not pub published: chrono::NaiveDateTime, pub updated: Option, pub deleted: bool, pub ap_id: DbUrl, pub local: bool, } #[derive(Clone, Default)] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", table_name = "comment")] pub struct CommentForm { pub creator_id: PersonId, pub post_id: PostId, pub content: String, pub parent_id: Option, pub removed: Option, pub read: Option, pub published: Option, pub updated: Option, pub deleted: Option, pub ap_id: Option, pub local: Option, } #[derive(PartialEq, Debug, Clone)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr(feature = "full", belongs_to(Comment))] #[cfg_attr(feature = "full", table_name = "comment_like")] pub struct CommentLike { pub id: i32, pub person_id: PersonId, pub comment_id: CommentId, pub post_id: PostId, // TODO this is redundant pub score: i16, pub published: chrono::NaiveDateTime, } #[derive(Clone)] #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", table_name = "comment_like")] pub struct CommentLikeForm { pub person_id: PersonId, pub comment_id: CommentId, pub post_id: PostId, // TODO this is redundant pub score: i16, } #[derive(PartialEq, Debug)] #[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] #[cfg_attr(feature = "full", belongs_to(Comment))] #[cfg_attr(feature = "full", table_name = "comment_saved")] pub struct CommentSaved { pub id: i32, pub comment_id: CommentId, pub person_id: PersonId, pub published: chrono::NaiveDateTime, } #[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] #[cfg_attr(feature = "full", table_name = "comment_saved")] pub struct CommentSavedForm { pub comment_id: CommentId, pub person_id: PersonId, }