From: Dessalines Date: Sun, 6 Dec 2020 04:37:16 +0000 (-0500) Subject: Adding other community views. X-Git-Url: http://these/git/readmes/%7B%60https:/%7Burl%7D?a=commitdiff_plain;h=5e510e7a677f0b3e914952f7bc0de402fc1e1539;p=lemmy.git Adding other community views. --- 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 00000000..faded4df --- /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 00000000..5cdcbf89 --- /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 00000000..faaae0f2 --- /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 c092e8ec..0aff8eae 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;