Adding other community views.
authorDessalines <tyhou13@gmx.com>
Sun, 6 Dec 2020 04:37:16 +0000 (23:37 -0500)
committerDessalines <tyhou13@gmx.com>
Sun, 6 Dec 2020 04:37:16 +0000 (23:37 -0500)
lemmy_db/src/views/community_follower_view.rs [new file with mode: 0644]
lemmy_db/src/views/community_moderator_view.rs [new file with mode: 0644]
lemmy_db/src/views/community_user_ban_view.rs [new file with mode: 0644]
lemmy_db/src/views/mod.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 (file)
index 0000000..faded4d
--- /dev/null
@@ -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<Vec<Self>, 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<Vec<Self>, 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<CommunityFollowerView> {
+  users
+    .iter()
+    .map(|a| CommunityFollowerView {
+      community: a.0.to_owned(),
+      follower: a.1.to_owned(),
+    })
+    .collect::<Vec<CommunityFollowerView>>()
+}
diff --git a/lemmy_db/src/views/community_moderator_view.rs b/lemmy_db/src/views/community_moderator_view.rs
new file mode 100644 (file)
index 0000000..5cdcbf8
--- /dev/null
@@ -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<Vec<Self>, 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<Vec<Self>, 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<CommunityModeratorView> {
+  users
+    .iter()
+    .map(|a| CommunityModeratorView {
+      community: a.0.to_owned(),
+      moderator: a.1.to_owned(),
+    })
+    .collect::<Vec<CommunityModeratorView>>()
+}
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 (file)
index 0000000..faaae0f
--- /dev/null
@@ -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<Self, Error> {
+    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 })
+  }
+}
index c092e8ec3db102b27b437f2f3db2e1ed552e7e20..0aff8eae2b44ab63061a143fb10ad8c324654841 100644 (file)
@@ -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;