]> Untitled Git - lemmy.git/blobdiff - crates/db_schema/src/aggregates/structs.rs
Add support for Featured Posts (#2585)
[lemmy.git] / crates / db_schema / src / aggregates / structs.rs
index 2f635b9e69b09320f7d5e878e5077867f780a6c0..d52b5bb419213e10288e80e000c44e17362d691f 100644 (file)
@@ -1,18 +1,19 @@
-use crate::newtypes::{CommentId, CommunityId, PersonId, PostId};
-use serde::{Deserialize, Serialize};
-
+use crate::newtypes::{CommentId, CommunityId, PersonId, PostId, SiteId};
 #[cfg(feature = "full")]
 use crate::schema::{
   comment_aggregates,
   community_aggregates,
   person_aggregates,
+  person_post_aggregates,
   post_aggregates,
   site_aggregates,
 };
+use serde::{Deserialize, Serialize};
 
-#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
+#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
 #[cfg_attr(feature = "full", derive(Queryable, Associations, Identifiable))]
-#[cfg_attr(feature = "full", table_name = "comment_aggregates")]
+#[cfg_attr(feature = "full", diesel(table_name = comment_aggregates))]
+#[cfg_attr(feature = "full", diesel(belongs_to(crate::source::comment::Comment)))]
 pub struct CommentAggregates {
   pub id: i32,
   pub comment_id: CommentId,
@@ -20,11 +21,16 @@ pub struct CommentAggregates {
   pub upvotes: i64,
   pub downvotes: i64,
   pub published: chrono::NaiveDateTime,
+  pub child_count: i32,
 }
 
-#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
+#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
 #[cfg_attr(feature = "full", derive(Queryable, Associations, Identifiable))]
-#[cfg_attr(feature = "full", table_name = "community_aggregates")]
+#[cfg_attr(feature = "full", diesel(table_name = community_aggregates))]
+#[cfg_attr(
+  feature = "full",
+  diesel(belongs_to(crate::source::community::Community))
+)]
 pub struct CommunityAggregates {
   pub id: i32,
   pub community_id: CommunityId,
@@ -38,9 +44,10 @@ pub struct CommunityAggregates {
   pub users_active_half_year: i64,
 }
 
-#[derive(PartialEq, Debug, Serialize, Deserialize, Clone, Default)]
+#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone, Default)]
 #[cfg_attr(feature = "full", derive(Queryable, Associations, Identifiable))]
-#[cfg_attr(feature = "full", table_name = "person_aggregates")]
+#[cfg_attr(feature = "full", diesel(table_name = person_aggregates))]
+#[cfg_attr(feature = "full", diesel(belongs_to(crate::source::person::Person)))]
 pub struct PersonAggregates {
   pub id: i32,
   pub person_id: PersonId,
@@ -50,9 +57,10 @@ pub struct PersonAggregates {
   pub comment_score: i64,
 }
 
-#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
+#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
 #[cfg_attr(feature = "full", derive(Queryable, Associations, Identifiable))]
-#[cfg_attr(feature = "full", table_name = "post_aggregates")]
+#[cfg_attr(feature = "full", diesel(table_name = post_aggregates))]
+#[cfg_attr(feature = "full", diesel(belongs_to(crate::source::post::Post)))]
 pub struct PostAggregates {
   pub id: i32,
   pub post_id: PostId,
@@ -60,18 +68,42 @@ pub struct PostAggregates {
   pub score: i64,
   pub upvotes: i64,
   pub downvotes: i64,
-  pub stickied: bool,
   pub published: chrono::NaiveDateTime,
   pub newest_comment_time_necro: chrono::NaiveDateTime, // A newest comment time, limited to 2 days, to prevent necrobumping
   pub newest_comment_time: chrono::NaiveDateTime,
+  pub featured_community: bool,
+  pub featured_local: bool,
+}
+
+#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
+#[cfg_attr(feature = "full", derive(Queryable, Associations, Identifiable))]
+#[cfg_attr(feature = "full", diesel(table_name = person_post_aggregates))]
+#[cfg_attr(feature = "full", diesel(belongs_to(crate::source::person::Person)))]
+pub struct PersonPostAggregates {
+  pub id: i32,
+  pub person_id: PersonId,
+  pub post_id: PostId,
+  pub read_comments: i64,
+  pub published: chrono::NaiveDateTime,
+}
+
+#[derive(Clone, Default)]
+#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
+#[cfg_attr(feature = "full", diesel(table_name = person_post_aggregates))]
+pub struct PersonPostAggregatesForm {
+  pub person_id: PersonId,
+  pub post_id: PostId,
+  pub read_comments: i64,
+  pub published: Option<chrono::NaiveDateTime>,
 }
 
-#[derive(PartialEq, Debug, Serialize, Deserialize, Clone)]
+#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Clone)]
 #[cfg_attr(feature = "full", derive(Queryable, Associations, Identifiable))]
-#[cfg_attr(feature = "full", table_name = "site_aggregates")]
+#[cfg_attr(feature = "full", diesel(table_name = site_aggregates))]
+#[cfg_attr(feature = "full", diesel(belongs_to(crate::source::site::Site)))]
 pub struct SiteAggregates {
   pub id: i32,
-  pub site_id: i32,
+  pub site_id: SiteId,
   pub users: i64,
   pub posts: i64,
   pub comments: i64,