From 5e510e7a677f0b3e914952f7bc0de402fc1e1539 Mon Sep 17 00:00:00 2001 From: Dessalines Date: Sat, 5 Dec 2020 23:37:16 -0500 Subject: [PATCH] Adding other community views. --- lemmy_db/src/views/community_follower_view.rs | 50 +++++++++++++++++++ .../src/views/community_moderator_view.rs | 50 +++++++++++++++++++ lemmy_db/src/views/community_user_ban_view.rs | 33 ++++++++++++ lemmy_db/src/views/mod.rs | 3 ++ 4 files changed, 136 insertions(+) create mode 100644 lemmy_db/src/views/community_follower_view.rs create mode 100644 lemmy_db/src/views/community_moderator_view.rs create mode 100644 lemmy_db/src/views/community_user_ban_view.rs diff --git a/lemmy_db/src/views/community_follower_view.rs b/lemmy_db/src/views/community_follower_view.rs new file mode 100644 index 000000000..faded4dfc --- /dev/null +++ b/lemmy_db/src/views/community_follower_view.rs @@ -0,0 +1,50 @@ +use crate::{ + community::{Community, CommunitySafe}, + schema::{community, community_follower, user_}, + user::{UserSafe, User_}, + ToSafe, +}; +use diesel::{result::Error, *}; +use serde::Serialize; + +#[derive(Debug, Serialize, Clone)] +pub struct CommunityFollowerView { + pub community: CommunitySafe, + pub follower: UserSafe, +} + +impl CommunityFollowerView { + pub fn for_community(conn: &PgConnection, for_community_id: i32) -> Result, Error> { + let res = community_follower::table + .inner_join(community::table) + .inner_join(user_::table) + .select((Community::safe_columns_tuple(), User_::safe_columns_tuple())) + .filter(community_follower::community_id.eq(for_community_id)) + .order_by(community_follower::published) + .load::<(CommunitySafe, UserSafe)>(conn)?; + + Ok(to_vec(res)) + } + + pub fn for_user(conn: &PgConnection, for_user_id: i32) -> Result, Error> { + let res = community_follower::table + .inner_join(community::table) + .inner_join(user_::table) + .select((Community::safe_columns_tuple(), User_::safe_columns_tuple())) + .filter(community_follower::user_id.eq(for_user_id)) + .order_by(community_follower::published) + .load::<(CommunitySafe, UserSafe)>(conn)?; + + Ok(to_vec(res)) + } +} + +fn to_vec(users: Vec<(CommunitySafe, UserSafe)>) -> Vec { + users + .iter() + .map(|a| CommunityFollowerView { + community: a.0.to_owned(), + follower: a.1.to_owned(), + }) + .collect::>() +} diff --git a/lemmy_db/src/views/community_moderator_view.rs b/lemmy_db/src/views/community_moderator_view.rs new file mode 100644 index 000000000..5cdcbf899 --- /dev/null +++ b/lemmy_db/src/views/community_moderator_view.rs @@ -0,0 +1,50 @@ +use crate::{ + community::{Community, CommunitySafe}, + schema::{community, community_moderator, user_}, + user::{UserSafe, User_}, + ToSafe, +}; +use diesel::{result::Error, *}; +use serde::Serialize; + +#[derive(Debug, Serialize, Clone)] +pub struct CommunityModeratorView { + pub community: CommunitySafe, + pub moderator: UserSafe, +} + +impl CommunityModeratorView { + pub fn for_community(conn: &PgConnection, for_community_id: i32) -> Result, Error> { + let res = community_moderator::table + .inner_join(community::table) + .inner_join(user_::table) + .select((Community::safe_columns_tuple(), User_::safe_columns_tuple())) + .filter(community_moderator::community_id.eq(for_community_id)) + .order_by(community_moderator::published) + .load::<(CommunitySafe, UserSafe)>(conn)?; + + Ok(to_vec(res)) + } + + pub fn for_user(conn: &PgConnection, for_user_id: i32) -> Result, Error> { + let res = community_moderator::table + .inner_join(community::table) + .inner_join(user_::table) + .select((Community::safe_columns_tuple(), User_::safe_columns_tuple())) + .filter(community_moderator::user_id.eq(for_user_id)) + .order_by(community_moderator::published) + .load::<(CommunitySafe, UserSafe)>(conn)?; + + Ok(to_vec(res)) + } +} + +fn to_vec(users: Vec<(CommunitySafe, UserSafe)>) -> Vec { + users + .iter() + .map(|a| CommunityModeratorView { + community: a.0.to_owned(), + moderator: a.1.to_owned(), + }) + .collect::>() +} diff --git a/lemmy_db/src/views/community_user_ban_view.rs b/lemmy_db/src/views/community_user_ban_view.rs new file mode 100644 index 000000000..faaae0f2d --- /dev/null +++ b/lemmy_db/src/views/community_user_ban_view.rs @@ -0,0 +1,33 @@ +use crate::{ + community::{Community, CommunitySafe}, + schema::{community, community_user_ban, user_}, + user::{UserSafe, User_}, + ToSafe, +}; +use diesel::{result::Error, *}; +use serde::Serialize; + +#[derive(Debug, Serialize, Clone)] +pub struct CommunityUserBanView { + pub community: CommunitySafe, + pub user: UserSafe, +} + +impl CommunityUserBanView { + pub fn get( + conn: &PgConnection, + from_user_id: i32, + from_community_id: i32, + ) -> Result { + let (community, user) = community_user_ban::table + .inner_join(community::table) + .inner_join(user_::table) + .select((Community::safe_columns_tuple(), User_::safe_columns_tuple())) + .filter(community_user_ban::community_id.eq(from_community_id)) + .filter(community_user_ban::user_id.eq(from_user_id)) + .order_by(community_user_ban::published) + .first::<(CommunitySafe, UserSafe)>(conn)?; + + Ok(CommunityUserBanView { community, user }) + } +} diff --git a/lemmy_db/src/views/mod.rs b/lemmy_db/src/views/mod.rs index c092e8ec3..0aff8eae2 100644 --- a/lemmy_db/src/views/mod.rs +++ b/lemmy_db/src/views/mod.rs @@ -1,3 +1,6 @@ +pub mod community_follower_view; +pub mod community_moderator_view; +pub mod community_user_ban_view; pub mod community_view; pub mod site_view; pub mod user_view;