X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_schema%2Fsrc%2Fsource%2Fcomment.rs;h=f76e2fba77ddb97b1ca2d66f2f7dd4a0aecba764;hb=969f8b2ce9cd80492eb5e556ce3bda95c9b892b3;hp=72b9e740a1dd8b4d99bc1a3707579c1de579fc17;hpb=3d578f9df2ff3d3bfb084658e79219850ec6c10c;p=lemmy.git diff --git a/crates/db_schema/src/source/comment.rs b/crates/db_schema/src/source/comment.rs index 72b9e740..f76e2fba 100644 --- a/crates/db_schema/src/source/comment.rs +++ b/crates/db_schema/src/source/comment.rs @@ -1,103 +1,123 @@ -use crate::{ - schema::{comment, comment_alias_1, comment_like, comment_saved}, - source::post::Post, - Url, -}; -use serde::Serialize; +#[cfg(feature = "full")] +use crate::newtypes::LtreeDef; +use crate::newtypes::{CommentId, DbUrl, LanguageId, PersonId, PostId}; +#[cfg(feature = "full")] +use crate::schema::{comment, comment_like, comment_saved}; +#[cfg(feature = "full")] +use diesel_ltree::Ltree; +use serde::{Deserialize, Serialize}; +use serde_with::skip_serializing_none; +#[cfg(feature = "full")] +use ts_rs::TS; +use typed_builder::TypedBuilder; -// 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, Queryable, Associations, Identifiable, PartialEq, Debug, Serialize)] -#[belongs_to(Post)] -#[table_name = "comment"] +#[skip_serializing_none] +#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)] +#[cfg_attr(feature = "full", derive(Queryable, Associations, Identifiable, TS))] +#[cfg_attr(feature = "full", ts(export))] +#[cfg_attr(feature = "full", diesel(belongs_to(crate::source::post::Post)))] +#[cfg_attr(feature = "full", diesel(table_name = comment))] +/// A comment. pub struct Comment { - pub id: i32, - pub creator_id: i32, - pub post_id: i32, - pub parent_id: Option, + pub id: CommentId, + pub creator_id: PersonId, + pub post_id: PostId, pub content: String, + /// Whether the comment has been removed. pub removed: bool, - pub read: bool, // Whether the recipient has read the comment or not pub published: chrono::NaiveDateTime, pub updated: Option, + /// Whether the comment has been deleted by its creator. pub deleted: bool, - pub ap_id: Url, + /// The federated activity id / ap_id. + pub ap_id: DbUrl, + /// Whether the comment is local. pub local: bool, + #[cfg(feature = "full")] + #[cfg_attr(feature = "full", serde(with = "LtreeDef"))] + #[cfg_attr(feature = "full", ts(type = "string"))] + /// The path / tree location of a comment, separated by dots, ending with the comment's id. Ex: 0.24.27 + pub path: Ltree, + #[cfg(not(feature = "full"))] + pub path: String, + /// Whether the comment has been distinguished(speaking officially) by a mod. + pub distinguished: bool, + pub language_id: LanguageId, } -#[derive(Clone, Queryable, Associations, Identifiable, PartialEq, Debug, Serialize)] -#[belongs_to(Post)] -#[table_name = "comment_alias_1"] -pub struct CommentAlias1 { - pub id: i32, - pub creator_id: i32, - pub post_id: i32, - pub parent_id: Option, +#[derive(Debug, Clone, TypedBuilder)] +#[builder(field_defaults(default))] +#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] +#[cfg_attr(feature = "full", diesel(table_name = comment))] +pub struct CommentInsertForm { + #[builder(!default)] + pub creator_id: PersonId, + #[builder(!default)] + pub post_id: PostId, + #[builder(!default)] pub content: String, - pub removed: bool, - pub read: bool, // Whether the recipient has read the comment or not - pub published: chrono::NaiveDateTime, + pub removed: Option, + pub published: Option, pub updated: Option, - pub deleted: bool, - pub ap_id: Url, - pub local: bool, + pub deleted: Option, + pub ap_id: Option, + pub local: Option, + pub distinguished: Option, + pub language_id: Option, } -#[derive(Insertable, AsChangeset, Clone)] -#[table_name = "comment"] -pub struct CommentForm { - pub creator_id: i32, - pub post_id: i32, - pub parent_id: Option, - pub content: String, +#[derive(Debug, Clone, Default)] +#[cfg_attr(feature = "full", derive(AsChangeset))] +#[cfg_attr(feature = "full", diesel(table_name = comment))] +pub struct CommentUpdateForm { + pub content: Option, pub removed: Option, - pub read: Option, - pub published: Option, - pub updated: Option, + // Don't use a default naive_now here, because the create function does a lot of comment updates + pub updated: Option>, pub deleted: Option, - pub ap_id: Option, - pub local: bool, + pub ap_id: Option, + pub local: Option, + pub distinguished: Option, + pub language_id: Option, } -#[derive(Identifiable, Queryable, Associations, PartialEq, Debug, Clone)] -#[belongs_to(Comment)] -#[table_name = "comment_like"] +#[derive(PartialEq, Eq, Debug, Clone)] +#[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] +#[cfg_attr(feature = "full", diesel(belongs_to(crate::source::comment::Comment)))] +#[cfg_attr(feature = "full", diesel(table_name = comment_like))] pub struct CommentLike { pub id: i32, - pub user_id: i32, - pub comment_id: i32, - pub post_id: i32, // TODO this is redundant + pub person_id: PersonId, + pub comment_id: CommentId, + pub post_id: PostId, // TODO this is redundant pub score: i16, pub published: chrono::NaiveDateTime, } -#[derive(Insertable, AsChangeset, Clone)] -#[table_name = "comment_like"] +#[derive(Clone)] +#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] +#[cfg_attr(feature = "full", diesel(table_name = comment_like))] pub struct CommentLikeForm { - pub user_id: i32, - pub comment_id: i32, - pub post_id: i32, // TODO this is redundant + pub person_id: PersonId, + pub comment_id: CommentId, + pub post_id: PostId, // TODO this is redundant pub score: i16, } -#[derive(Identifiable, Queryable, Associations, PartialEq, Debug)] -#[belongs_to(Comment)] -#[table_name = "comment_saved"] +#[derive(PartialEq, Eq, Debug)] +#[cfg_attr(feature = "full", derive(Identifiable, Queryable, Associations))] +#[cfg_attr(feature = "full", diesel(belongs_to(crate::source::comment::Comment)))] +#[cfg_attr(feature = "full", diesel(table_name = comment_saved))] pub struct CommentSaved { pub id: i32, - pub comment_id: i32, - pub user_id: i32, + pub comment_id: CommentId, + pub person_id: PersonId, pub published: chrono::NaiveDateTime, } -#[derive(Insertable, AsChangeset)] -#[table_name = "comment_saved"] +#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))] +#[cfg_attr(feature = "full", diesel(table_name = comment_saved))] pub struct CommentSavedForm { - pub comment_id: i32, - pub user_id: i32, + pub comment_id: CommentId, + pub person_id: PersonId, }