summaryrefslogtreecommitdiffstats
path: root/server/src/actions/community_view.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/actions/community_view.rs')
-rw-r--r--server/src/actions/community_view.rs37
1 files changed, 32 insertions, 5 deletions
diff --git a/server/src/actions/community_view.rs b/server/src/actions/community_view.rs
index eafda161..7eb07a16 100644
--- a/server/src/actions/community_view.rs
+++ b/server/src/actions/community_view.rs
@@ -18,6 +18,8 @@ table! {
number_of_subscribers -> BigInt,
number_of_posts -> BigInt,
number_of_comments -> BigInt,
+ user_id -> Nullable<Int4>,
+ subscribed -> Nullable<Bool>,
}
}
@@ -58,18 +60,43 @@ pub struct CommunityView {
pub category_name: String,
pub number_of_subscribers: i64,
pub number_of_posts: i64,
- pub number_of_comments: i64
+ pub number_of_comments: i64,
+ pub user_id: Option<i32>,
+ pub subscribed: Option<bool>,
}
impl CommunityView {
- pub fn read(conn: &PgConnection, from_community_id: i32) -> Result<Self, Error> {
+ pub fn read(conn: &PgConnection, from_community_id: i32, from_user_id: Option<i32>) -> Result<Self, Error> {
use actions::community_view::community_view::dsl::*;
- community_view.find(from_community_id).first::<Self>(conn)
+
+ let mut query = community_view.into_boxed();
+
+ query = query.filter(id.eq(from_community_id));
+
+ // The view lets you pass a null user_id, if you're not logged in
+ if let Some(from_user_id) = from_user_id {
+ query = query.filter(user_id.eq(from_user_id));
+ } else {
+ query = query.filter(user_id.is_null());
+ };
+
+ query.first::<Self>(conn)
}
- pub fn list_all(conn: &PgConnection) -> Result<Vec<Self>, Error> {
+ pub fn list_all(conn: &PgConnection, from_user_id: Option<i32>) -> Result<Vec<Self>, Error> {
use actions::community_view::community_view::dsl::*;
- community_view.load::<Self>(conn)
+ let mut query = community_view.into_boxed();
+
+ // The view lets you pass a null user_id, if you're not logged in
+ if let Some(from_user_id) = from_user_id {
+ query = query.filter(user_id.eq(from_user_id))
+ .order_by((subscribed.desc(), number_of_subscribers.desc()));
+ } else {
+ query = query.filter(user_id.is_null())
+ .order_by(number_of_subscribers.desc());
+ };
+
+ query.load::<Self>(conn)
}
}