summaryrefslogtreecommitdiffstats
path: root/server/src/db/community.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/db/community.rs')
-rw-r--r--server/src/db/community.rs373
1 files changed, 0 insertions, 373 deletions
diff --git a/server/src/db/community.rs b/server/src/db/community.rs
deleted file mode 100644
index 461ba473..00000000
--- a/server/src/db/community.rs
+++ /dev/null
@@ -1,373 +0,0 @@
-use crate::{
- db::{Bannable, Crud, Followable, Joinable},
- schema::{community, community_follower, community_moderator, community_user_ban},
-};
-use diesel::{dsl::*, result::Error, *};
-use serde::{Deserialize, Serialize};
-
-#[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
-#[table_name = "community"]
-pub struct Community {
- pub id: i32,
- pub name: String,
- pub title: String,
- pub description: Option<String>,
- pub category_id: i32,
- pub creator_id: i32,
- pub removed: bool,
- pub published: chrono::NaiveDateTime,
- pub updated: Option<chrono::NaiveDateTime>,
- pub deleted: bool,
- pub nsfw: bool,
- pub actor_id: String,
- pub local: bool,
- pub private_key: Option<String>,
- pub public_key: Option<String>,
- pub last_refreshed_at: chrono::NaiveDateTime,
-}
-
-// TODO add better delete, remove, lock actions here.
-#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize, Debug)]
-#[table_name = "community"]
-pub struct CommunityForm {
- pub name: String,
- pub title: String,
- pub description: Option<String>,
- pub category_id: i32,
- pub creator_id: i32,
- pub removed: Option<bool>,
- pub published: Option<chrono::NaiveDateTime>,
- pub updated: Option<chrono::NaiveDateTime>,
- pub deleted: Option<bool>,
- pub nsfw: bool,
- pub actor_id: String,
- pub local: bool,
- pub private_key: Option<String>,
- pub public_key: Option<String>,
- pub last_refreshed_at: Option<chrono::NaiveDateTime>,
-}
-
-impl Crud<CommunityForm> for Community {
- fn read(conn: &PgConnection, community_id: i32) -> Result<Self, Error> {
- use crate::schema::community::dsl::*;
- community.find(community_id).first::<Self>(conn)
- }
-
- fn delete(conn: &PgConnection, community_id: i32) -> Result<usize, Error> {
- use crate::schema::community::dsl::*;
- diesel::delete(community.find(community_id)).execute(conn)
- }
-
- fn create(conn: &PgConnection, new_community: &CommunityForm) -> Result<Self, Error> {
- use crate::schema::community::dsl::*;
- insert_into(community)
- .values(new_community)
- .get_result::<Self>(conn)
- }
-
- fn update(
- conn: &PgConnection,
- community_id: i32,
- new_community: &CommunityForm,
- ) -> Result<Self, Error> {
- use crate::schema::community::dsl::*;
- diesel::update(community.find(community_id))
- .set(new_community)
- .get_result::<Self>(conn)
- }
-}
-
-impl Community {
- pub fn read_from_name(conn: &PgConnection, community_name: &str) -> Result<Self, Error> {
- use crate::schema::community::dsl::*;
- community
- .filter(name.eq(community_name))
- .first::<Self>(conn)
- }
-
- pub fn read_from_actor_id(conn: &PgConnection, community_id: &str) -> Result<Self, Error> {
- use crate::schema::community::dsl::*;
- community
- .filter(actor_id.eq(community_id))
- .first::<Self>(conn)
- }
-
- pub fn list_local(conn: &PgConnection) -> Result<Vec<Self>, Error> {
- use crate::schema::community::dsl::*;
- community.filter(local.eq(true)).load::<Community>(conn)
- }
-}
-
-#[derive(Identifiable, Queryable, Associations, PartialEq, Debug)]
-#[belongs_to(Community)]
-#[table_name = "community_moderator"]
-pub struct CommunityModerator {
- pub id: i32,
- pub community_id: i32,
- pub user_id: i32,
- pub published: chrono::NaiveDateTime,
-}
-
-#[derive(Insertable, AsChangeset, Clone)]
-#[table_name = "community_moderator"]
-pub struct CommunityModeratorForm {
- pub community_id: i32,
- pub user_id: i32,
-}
-
-impl Joinable<CommunityModeratorForm> for CommunityModerator {
- fn join(
- conn: &PgConnection,
- community_user_form: &CommunityModeratorForm,
- ) -> Result<Self, Error> {
- use crate::schema::community_moderator::dsl::*;
- insert_into(community_moderator)
- .values(community_user_form)
- .get_result::<Self>(conn)
- }
-
- fn leave(
- conn: &PgConnection,
- community_user_form: &CommunityModeratorForm,
- ) -> Result<usize, Error> {
- use crate::schema::community_moderator::dsl::*;
- diesel::delete(
- community_moderator
- .filter(community_id.eq(community_user_form.community_id))
- .filter(user_id.eq(community_user_form.user_id)),
- )
- .execute(conn)
- }
-}
-
-impl CommunityModerator {
- pub fn delete_for_community(conn: &PgConnection, for_community_id: i32) -> Result<usize, Error> {
- use crate::schema::community_moderator::dsl::*;
- diesel::delete(community_moderator.filter(community_id.eq(for_community_id))).execute(conn)
- }
-}
-
-#[derive(Identifiable, Queryable, Associations, PartialEq, Debug)]
-#[belongs_to(Community)]
-#[table_name = "community_user_ban"]
-pub struct CommunityUserBan {
- pub id: i32,
- pub community_id: i32,
- pub user_id: i32,
- pub published: chrono::NaiveDateTime,
-}
-
-#[derive(Insertable, AsChangeset, Clone)]
-#[table_name = "community_user_ban"]
-pub struct CommunityUserBanForm {
- pub community_id: i32,
- pub user_id: i32,
-}
-
-impl Bannable<CommunityUserBanForm> for CommunityUserBan {
- fn ban(
- conn: &PgConnection,
- community_user_ban_form: &CommunityUserBanForm,
- ) -> Result<Self, Error> {
- use crate::schema::community_user_ban::dsl::*;
- insert_into(community_user_ban)
- .values(community_user_ban_form)
- .get_result::<Self>(conn)
- }
-
- fn unban(
- conn: &PgConnection,
- community_user_ban_form: &CommunityUserBanForm,
- ) -> Result<usize, Error> {
- use crate::schema::community_user_ban::dsl::*;
- diesel::delete(
- community_user_ban
- .filter(community_id.eq(community_user_ban_form.community_id))
- .filter(user_id.eq(community_user_ban_form.user_id)),
- )
- .execute(conn)
- }
-}
-
-#[derive(Identifiable, Queryable, Associations, PartialEq, Debug)]
-#[belongs_to(Community)]
-#[table_name = "community_follower"]
-pub struct CommunityFollower {
- pub id: i32,
- pub community_id: i32,
- pub user_id: i32,
- pub published: chrono::NaiveDateTime,
-}
-
-#[derive(Insertable, AsChangeset, Clone)]
-#[table_name = "community_follower"]
-pub struct CommunityFollowerForm {
- pub community_id: i32,
- pub user_id: i32,
-}
-
-impl Followable<CommunityFollowerForm> for CommunityFollower {
- fn follow(
- conn: &PgConnection,
- community_follower_form: &CommunityFollowerForm,
- ) -> Result<Self, Error> {
- use crate::schema::community_follower::dsl::*;
- insert_into(community_follower)
- .values(community_follower_form)
- .get_result::<Self>(conn)
- }
- fn unfollow(
- conn: &PgConnection,
- community_follower_form: &CommunityFollowerForm,
- ) -> Result<usize, Error> {
- use crate::schema::community_follower::dsl::*;
- diesel::delete(
- community_follower
- .filter(community_id.eq(&community_follower_form.community_id))
- .filter(user_id.eq(&community_follower_form.user_id)),
- )
- .execute(conn)
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::{super::user::*, *};
- use crate::db::{establish_unpooled_connection, ListingType, SortType};
-
- #[test]
- fn test_crud() {
- let conn = establish_unpooled_connection();
-
- let new_user = UserForm {
- name: "bobbee".into(),
- preferred_username: None,
- password_encrypted: "nope".into(),
- email: None,
- matrix_user_id: None,
- avatar: None,
- admin: false,
- banned: false,
- updated: None,
- show_nsfw: false,
- theme: "darkly".into(),
- default_sort_type: SortType::Hot as i16,
- default_listing_type: ListingType::Subscribed as i16,
- lang: "browser".into(),
- show_avatars: true,
- send_notifications_to_email: false,
- actor_id: "http://fake.com".into(),
- bio: None,
- local: true,
- private_key: None,
- public_key: None,
- last_refreshed_at: None,
- };
-
- let inserted_user = User_::create(&conn, &new_user).unwrap();
-
- let new_community = CommunityForm {
- name: "TIL".into(),
- creator_id: inserted_user.id,
- title: "nada".to_owned(),
- description: None,
- category_id: 1,
- nsfw: false,
- removed: None,
- deleted: None,
- updated: None,
- actor_id: "http://fake.com".into(),
- local: true,
- private_key: None,
- public_key: None,
- last_refreshed_at: None,
- published: None,
- };
-
- let inserted_community = Community::create(&conn, &new_community).unwrap();
-
- let expected_community = Community {
- id: inserted_community.id,
- creator_id: inserted_user.id,
- name: "TIL".into(),
- title: "nada".to_owned(),
- description: None,
- category_id: 1,
- nsfw: false,
- removed: false,
- deleted: false,
- published: inserted_community.published,
- updated: None,
- actor_id: "http://fake.com".into(),
- local: true,
- private_key: None,
- public_key: None,
- last_refreshed_at: inserted_community.published,
- };
-
- let community_follower_form = CommunityFollowerForm {
- community_id: inserted_community.id,
- user_id: inserted_user.id,
- };
-
- let inserted_community_follower =
- CommunityFollower::follow(&conn, &community_follower_form).unwrap();
-
- let expected_community_follower = CommunityFollower {
- id: inserted_community_follower.id,
- community_id: inserted_community.id,
- user_id: inserted_user.id,
- published: inserted_community_follower.published,
- };
-
- let community_user_form = CommunityModeratorForm {
- community_id: inserted_community.id,
- user_id: inserted_user.id,
- };
-
- let inserted_community_user = CommunityModerator::join(&conn, &community_user_form).unwrap();
-
- let expected_community_user = CommunityModerator {
- id: inserted_community_user.id,
- community_id: inserted_community.id,
- user_id: inserted_user.id,
- published: inserted_community_user.published,
- };
-
- let community_user_ban_form = CommunityUserBanForm {
- community_id: inserted_community.id,
- user_id: inserted_user.id,
- };
-
- let inserted_community_user_ban =
- CommunityUserBan::ban(&conn, &community_user_ban_form).unwrap();
-
- let expected_community_user_ban = CommunityUserBan {
- id: inserted_community_user_ban.id,
- community_id: inserted_community.id,
- user_id: inserted_user.id,
- published: inserted_community_user_ban.published,
- };
-
- let read_community = Community::read(&conn, inserted_community.id).unwrap();
- let updated_community =
- Community::update(&conn, inserted_community.id, &new_community).unwrap();
- let ignored_community = CommunityFollower::unfollow(&conn, &community_follower_form).unwrap();
- let left_community = CommunityModerator::leave(&conn, &community_user_form).unwrap();
- let unban = CommunityUserBan::unban(&conn, &community_user_ban_form).unwrap();
- let num_deleted = Community::delete(&conn, inserted_community.id).unwrap();
- User_::delete(&conn, inserted_user.id).unwrap();
-
- assert_eq!(expected_community, read_community);
- assert_eq!(expected_community, inserted_community);
- assert_eq!(expected_community, updated_community);
- assert_eq!(expected_community_follower, inserted_community_follower);
- assert_eq!(expected_community_user, inserted_community_user);
- assert_eq!(expected_community_user_ban, inserted_community_user_ban);
- assert_eq!(1, ignored_community);
- assert_eq!(1, left_community);
- assert_eq!(1, unban);
- // assert_eq!(2, loaded_count);
- assert_eq!(1, num_deleted);
- }
-}