Rename modlog items (#5882)

* Rename modlog items

* wip: update schema

* update code

* move
This commit is contained in:
Nutomic 2025-07-28 08:17:17 +00:00 committed by GitHub
parent c8ac7e02d5
commit 398237b02a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 736 additions and 701 deletions

View file

@ -10,7 +10,7 @@ use lemmy_db_schema::{
source::{
community::{Community, CommunityActions, CommunityModeratorForm},
local_user::LocalUser,
mod_log::moderator::{ModAddCommunity, ModAddCommunityForm},
mod_log::moderator::{ModAddToCommunity, ModAddToCommunityForm},
},
traits::Crud,
utils::get_conn,
@ -68,14 +68,14 @@ pub async fn add_mod_to_community(
}
// Mod tables
let form = ModAddCommunityForm {
let form = ModAddToCommunityForm {
mod_person_id: local_user_view.person.id,
other_person_id: tx_data.person_id,
community_id: tx_data.community_id,
removed: Some(!tx_data.added),
};
ModAddCommunity::create(&mut conn.into(), &form).await?;
ModAddToCommunity::create(&mut conn.into(), &form).await?;
Ok(())
}

View file

@ -3,7 +3,7 @@ use lemmy_api_utils::{context::LemmyContext, utils::is_admin};
use lemmy_db_schema::{
source::{
local_user::{LocalUser, LocalUserUpdateForm},
mod_log::moderator::{ModAdd, ModAddForm},
mod_log::admin::{AdminAdd, AdminAddForm},
},
traits::Crud,
};
@ -44,13 +44,13 @@ pub async fn add_admin(
.await?;
// Mod tables
let form = ModAddForm {
let form = AdminAddForm {
mod_person_id: my_person_id,
other_person_id: added_local_user.person.id,
removed: Some(!data.added),
};
ModAdd::create(&mut context.pool(), &form).await?;
AdminAdd::create(&mut context.pool(), &form).await?;
let admins = PersonQuery {
admins_only: Some(true),

View file

@ -9,7 +9,7 @@ use lemmy_db_schema::{
source::{
instance::{InstanceActions, InstanceBanForm},
local_user::LocalUser,
mod_log::moderator::{ModBan, ModBanForm},
mod_log::admin::{AdminBan, AdminBanForm},
},
traits::{Bannable, Crud},
};
@ -65,7 +65,7 @@ pub async fn ban_from_site(
};
// Mod tables
let form = ModBanForm {
let form = AdminBanForm {
mod_person_id: my_person_id,
other_person_id: data.person_id,
reason: data.reason.clone(),
@ -74,7 +74,7 @@ pub async fn ban_from_site(
instance_id: local_user_view.person.instance_id,
};
ModBan::create(&mut context.pool(), &form).await?;
AdminBan::create(&mut context.pool(), &form).await?;
let person_view = PersonView::read(
&mut context.pool(),

View file

@ -6,7 +6,7 @@ use lemmy_db_schema::{
language::Language,
local_site_url_blocklist::LocalSiteUrlBlocklist,
local_user::{LocalUser, LocalUserUpdateForm},
mod_log::moderator::{ModAdd, ModAddForm},
mod_log::admin::{AdminAdd, AdminAddForm},
oauth_provider::OAuthProvider,
tagline::Tagline,
},
@ -57,13 +57,13 @@ pub async fn leave_admin(
.await?;
// Mod tables
let form = ModAddForm {
let form = AdminAddForm {
mod_person_id: my_person_id,
other_person_id: my_person_id,
removed: Some(true),
};
ModAdd::create(&mut context.pool(), &form).await?;
AdminAdd::create(&mut context.pool(), &form).await?;
// Reread site and admins
let site_view = SiteView::read_local(&mut context.pool()).await?;

View file

@ -1,20 +1,20 @@
pub use lemmy_db_schema::{
newtypes::{
AdminAddId,
AdminAllowInstanceId,
AdminBanId,
AdminBlockInstanceId,
AdminPurgeCommentId,
AdminPurgeCommunityId,
AdminPurgePersonId,
AdminPurgePostId,
ModAddCommunityId,
ModAddId,
AdminRemoveCommunityId,
ModAddToCommunityId,
ModBanFromCommunityId,
ModBanId,
ModChangeCommunityVisibilityId,
ModFeaturePostId,
ModLockPostId,
ModRemoveCommentId,
ModRemoveCommunityId,
ModRemovePostId,
ModTransferCommunityId,
ModlogCombinedId,
@ -23,23 +23,23 @@ pub use lemmy_db_schema::{
combined::modlog::ModlogCombined,
mod_log::{
admin::{
AdminAdd,
AdminAllowInstance,
AdminBan,
AdminBlockInstance,
AdminPurgeComment,
AdminPurgeCommunity,
AdminPurgePerson,
AdminPurgePost,
AdminRemoveCommunity,
},
moderator::{
ModAdd,
ModAddCommunity,
ModBan,
ModAddToCommunity,
ModBanFromCommunity,
ModChangeCommunityVisibility,
ModFeaturePost,
ModLockPost,
ModRemoveComment,
ModRemoveCommunity,
ModRemovePost,
ModTransferCommunity,
},
@ -49,21 +49,21 @@ pub use lemmy_db_schema::{
};
pub use lemmy_db_views_modlog_combined::{
api::{GetModlog, GetModlogResponse},
AdminAddView,
AdminAllowInstanceView,
AdminBanView,
AdminBlockInstanceView,
AdminPurgeCommentView,
AdminPurgeCommunityView,
AdminPurgePersonView,
AdminPurgePostView,
ModAddCommunityView,
ModAddView,
AdminRemoveCommunityView,
ModAddToCommunityView,
ModBanFromCommunityView,
ModBanView,
ModChangeCommunityVisibilityView,
ModFeaturePostView,
ModLockPostView,
ModRemoveCommentView,
ModRemoveCommunityView,
ModRemovePostView,
ModTransferCommunityView,
ModlogCombinedView,

View file

@ -10,7 +10,7 @@ use lemmy_db_schema::{
source::{
community::{Community, CommunityUpdateForm},
community_report::CommunityReport,
mod_log::moderator::{ModRemoveCommunity, ModRemoveCommunityForm},
mod_log::admin::{AdminRemoveCommunity, AdminRemoveCommunityForm},
},
traits::{Crud, Reportable},
};
@ -50,13 +50,13 @@ pub async fn remove_community(
.await?;
// Mod tables
let form = ModRemoveCommunityForm {
let form = AdminRemoveCommunityForm {
mod_person_id: local_user_view.person.id,
community_id: data.community_id,
removed: Some(removed),
reason: data.reason.clone(),
};
ModRemoveCommunity::create(&mut context.pool(), &form).await?;
AdminRemoveCommunity::create(&mut context.pool(), &form).await?;
ActivityChannel::submit_activity(
SendActivityData::RemoveCommunity {

View file

@ -33,7 +33,10 @@ use lemmy_db_schema::{
activity::ActivitySendTargets,
community::{CommunityActions, CommunityPersonBanForm},
instance::{InstanceActions, InstanceBanForm},
mod_log::moderator::{ModBan, ModBanForm, ModBanFromCommunity, ModBanFromCommunityForm},
mod_log::{
admin::{AdminBan, AdminBanForm},
moderator::{ModBanFromCommunity, ModBanFromCommunityForm},
},
},
traits::{Bannable, Crud},
};
@ -149,7 +152,7 @@ impl Activity for BlockUser {
}
// write mod log
let form = ModBanForm {
let form = AdminBanForm {
mod_person_id: mod_person.id,
other_person_id: blocked_person.id,
reason,
@ -157,7 +160,7 @@ impl Activity for BlockUser {
expires_at,
instance_id: site.instance_id,
};
ModBan::create(&mut context.pool(), &form).await?;
AdminBan::create(&mut context.pool(), &form).await?;
}
SiteOrCommunity::Right(community) => {
let community_user_ban_form = CommunityPersonBanForm {

View file

@ -28,7 +28,10 @@ use lemmy_db_schema::{
activity::ActivitySendTargets,
community::{CommunityActions, CommunityPersonBanForm},
instance::{InstanceActions, InstanceBanForm},
mod_log::moderator::{ModBan, ModBanForm, ModBanFromCommunity, ModBanFromCommunityForm},
mod_log::{
admin::{AdminBan, AdminBanForm},
moderator::{ModBanFromCommunity, ModBanFromCommunityForm},
},
},
traits::{Bannable, Crud},
};
@ -113,7 +116,7 @@ impl Activity for UndoBlockUser {
}
// write mod log
let form = ModBanForm {
let form = AdminBanForm {
mod_person_id: mod_person.id,
other_person_id: blocked_person.id,
reason: self.object.summary,
@ -121,7 +124,7 @@ impl Activity for UndoBlockUser {
expires_at,
instance_id: site.instance_id,
};
ModBan::create(&mut context.pool(), &form).await?;
AdminBan::create(&mut context.pool(), &form).await?;
}
SiteOrCommunity::Right(community) => {
verify_visibility(&self.to, &self.cc, &community)?;

View file

@ -29,7 +29,7 @@ use lemmy_db_schema::{
source::{
activity::ActivitySendTargets,
community::{Community, CommunityActions, CommunityModeratorForm},
mod_log::moderator::{ModAddCommunity, ModAddCommunityForm},
mod_log::moderator::{ModAddToCommunity, ModAddToCommunityForm},
person::Person,
post::{Post, PostUpdateForm},
},
@ -132,13 +132,13 @@ impl Activity for CollectionAdd {
// write mod log
let actor = self.actor.dereference(context).await?;
let form = ModAddCommunityForm {
let form = ModAddToCommunityForm {
mod_person_id: actor.id,
other_person_id: new_mod.id,
community_id: community.id,
removed: Some(false),
};
ModAddCommunity::create(&mut context.pool(), &form).await?;
ModAddToCommunity::create(&mut context.pool(), &form).await?;
}
}
CollectionType::Featured => {

View file

@ -25,7 +25,7 @@ use lemmy_db_schema::{
source::{
activity::ActivitySendTargets,
community::{Community, CommunityActions, CommunityModeratorForm},
mod_log::moderator::{ModAddCommunity, ModAddCommunityForm},
mod_log::moderator::{ModAddToCommunity, ModAddToCommunityForm},
post::{Post, PostUpdateForm},
},
traits::Crud,
@ -120,13 +120,13 @@ impl Activity for CollectionRemove {
// write mod log
let actor = self.actor.dereference(context).await?;
let form = ModAddCommunityForm {
let form = ModAddToCommunityForm {
mod_person_id: actor.id,
other_person_id: remove_mod.id,
community_id: community.id,
removed: Some(true),
};
ModAddCommunity::create(&mut context.pool(), &form).await?;
ModAddToCommunity::create(&mut context.pool(), &form).await?;
// TODO: send websocket notification about removed mod
}

View file

@ -14,13 +14,9 @@ use lemmy_db_schema::{
comment_report::CommentReport,
community::{Community, CommunityUpdateForm},
community_report::CommunityReport,
mod_log::moderator::{
ModRemoveComment,
ModRemoveCommentForm,
ModRemoveCommunity,
ModRemoveCommunityForm,
ModRemovePost,
ModRemovePostForm,
mod_log::{
admin::{AdminRemoveCommunity, AdminRemoveCommunityForm},
moderator::{ModRemoveComment, ModRemoveCommentForm, ModRemovePost, ModRemovePostForm},
},
post::{Post, PostUpdateForm},
post_report::PostReport,
@ -113,13 +109,13 @@ pub(in crate::activities) async fn receive_remove_action(
Err(FederationError::OnlyLocalAdminCanRemoveCommunity)?
}
CommunityReport::resolve_all_for_object(&mut context.pool(), community.id, actor.id).await?;
let form = ModRemoveCommunityForm {
let form = AdminRemoveCommunityForm {
mod_person_id: actor.id,
community_id: community.id,
removed: Some(true),
reason,
};
ModRemoveCommunity::create(&mut context.pool(), &form).await?;
AdminRemoveCommunity::create(&mut context.pool(), &form).await?;
Community::update(
&mut context.pool(),
community.id,

View file

@ -12,13 +12,9 @@ use lemmy_db_schema::{
source::{
comment::{Comment, CommentUpdateForm},
community::{Community, CommunityUpdateForm},
mod_log::moderator::{
ModRemoveComment,
ModRemoveCommentForm,
ModRemoveCommunity,
ModRemoveCommunityForm,
ModRemovePost,
ModRemovePostForm,
mod_log::{
admin::{AdminRemoveCommunity, AdminRemoveCommunityForm},
moderator::{ModRemoveComment, ModRemoveCommentForm, ModRemovePost, ModRemovePostForm},
},
post::{Post, PostUpdateForm},
},
@ -93,13 +89,13 @@ impl UndoDelete {
if community.local {
Err(FederationError::OnlyLocalAdminCanRestoreCommunity)?
}
let form = ModRemoveCommunityForm {
let form = AdminRemoveCommunityForm {
mod_person_id: actor.id,
community_id: community.id,
removed: Some(false),
reason: None,
};
ModRemoveCommunity::create(&mut context.pool(), &form).await?;
AdminRemoveCommunity::create(&mut context.pool(), &form).await?;
Community::update(
&mut context.pool(),
community.id,

View file

@ -1,15 +1,22 @@
use crate::{
newtypes::{
AdminAddId,
AdminAllowInstanceId,
AdminBanId,
AdminBlockInstanceId,
AdminPurgeCommentId,
AdminPurgeCommunityId,
AdminPurgePersonId,
AdminPurgePostId,
AdminRemoveCommunityId,
},
source::mod_log::admin::{
AdminAdd,
AdminAddForm,
AdminAllowInstance,
AdminAllowInstanceForm,
AdminBan,
AdminBanForm,
AdminBlockInstance,
AdminBlockInstanceForm,
AdminPurgeComment,
@ -20,6 +27,8 @@ use crate::{
AdminPurgePersonForm,
AdminPurgePost,
AdminPurgePostForm,
AdminRemoveCommunity,
AdminRemoveCommunityForm,
},
traits::Crud,
utils::{get_conn, DbPool},
@ -27,12 +36,15 @@ use crate::{
use diesel::{dsl::insert_into, QueryDsl};
use diesel_async::RunQueryDsl;
use lemmy_db_schema_file::schema::{
admin_add,
admin_allow_instance,
admin_ban,
admin_block_instance,
admin_purge_comment,
admin_purge_community,
admin_purge_person,
admin_purge_post,
admin_remove_community,
};
use lemmy_utils::error::{LemmyErrorExt, LemmyErrorType, LemmyResult};
@ -203,3 +215,87 @@ impl Crud for AdminBlockInstance {
.with_lemmy_type(LemmyErrorType::CouldntUpdateModlog)
}
}
impl Crud for AdminRemoveCommunity {
type InsertForm = AdminRemoveCommunityForm;
type UpdateForm = AdminRemoveCommunityForm;
type IdType = AdminRemoveCommunityId;
async fn create(pool: &mut DbPool<'_>, form: &Self::InsertForm) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
insert_into(admin_remove_community::table)
.values(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntCreateModlog)
}
async fn update(
pool: &mut DbPool<'_>,
from_id: Self::IdType,
form: &Self::UpdateForm,
) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
diesel::update(admin_remove_community::table.find(from_id))
.set(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntUpdateModlog)
}
}
impl Crud for AdminBan {
type InsertForm = AdminBanForm;
type UpdateForm = AdminBanForm;
type IdType = AdminBanId;
async fn create(pool: &mut DbPool<'_>, form: &Self::InsertForm) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
insert_into(admin_ban::table)
.values(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntCreateModlog)
}
async fn update(
pool: &mut DbPool<'_>,
from_id: Self::IdType,
form: &Self::UpdateForm,
) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
diesel::update(admin_ban::table.find(from_id))
.set(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntUpdateModlog)
}
}
impl Crud for AdminAdd {
type InsertForm = AdminAddForm;
type UpdateForm = AdminAddForm;
type IdType = AdminAddId;
async fn create(pool: &mut DbPool<'_>, form: &Self::InsertForm) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
insert_into(admin_add::table)
.values(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntCreateModlog)
}
async fn update(
pool: &mut DbPool<'_>,
from_id: Self::IdType,
form: &Self::UpdateForm,
) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
diesel::update(admin_add::table.find(from_id))
.set(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntUpdateModlog)
}
}

View file

@ -1,2 +1,267 @@
pub mod admin;
pub mod moderator;
#[cfg(test)]
mod tests {
use crate::{
source::{
comment::{Comment, CommentInsertForm},
community::{Community, CommunityInsertForm},
instance::Instance,
mod_log::{admin::*, moderator::*},
person::{Person, PersonInsertForm},
post::{Post, PostInsertForm},
},
traits::Crud,
utils::build_db_pool_for_tests,
};
use lemmy_utils::error::LemmyResult;
use pretty_assertions::assert_eq;
use serial_test::serial;
#[tokio::test]
#[serial]
async fn test_crud() -> LemmyResult<()> {
let pool = &build_db_pool_for_tests();
let pool = &mut pool.into();
let inserted_instance = Instance::read_or_create(pool, "my_domain.tld".to_string()).await?;
let new_mod = PersonInsertForm::test_form(inserted_instance.id, "the mod");
let inserted_mod = Person::create(pool, &new_mod).await?;
let new_person = PersonInsertForm::test_form(inserted_instance.id, "jim2");
let inserted_person = Person::create(pool, &new_person).await?;
let new_community = CommunityInsertForm::new(
inserted_instance.id,
"mod_community".to_string(),
"nada".to_owned(),
"pubkey".to_string(),
);
let inserted_community = Community::create(pool, &new_community).await?;
let new_post = PostInsertForm::new(
"A test post thweep".into(),
inserted_person.id,
inserted_community.id,
);
let inserted_post = Post::create(pool, &new_post).await?;
let comment_form = CommentInsertForm::new(
inserted_person.id,
inserted_post.id,
"A test comment".into(),
);
let inserted_comment = Comment::create(pool, &comment_form, None).await?;
// Now the actual tests
// remove post
let mod_remove_post_form = ModRemovePostForm {
mod_person_id: inserted_mod.id,
post_id: inserted_post.id,
reason: None,
removed: None,
};
let inserted_mod_remove_post = ModRemovePost::create(pool, &mod_remove_post_form).await?;
let read_mod_remove_post = ModRemovePost::read(pool, inserted_mod_remove_post.id).await?;
let expected_mod_remove_post = ModRemovePost {
id: inserted_mod_remove_post.id,
post_id: inserted_post.id,
mod_person_id: inserted_mod.id,
reason: None,
removed: true,
published_at: inserted_mod_remove_post.published_at,
};
// lock post
let mod_lock_post_form = ModLockPostForm {
mod_person_id: inserted_mod.id,
post_id: inserted_post.id,
locked: None,
reason: None,
};
let inserted_mod_lock_post = ModLockPost::create(pool, &mod_lock_post_form).await?;
let read_mod_lock_post = ModLockPost::read(pool, inserted_mod_lock_post.id).await?;
let expected_mod_lock_post = ModLockPost {
id: inserted_mod_lock_post.id,
post_id: inserted_post.id,
mod_person_id: inserted_mod.id,
locked: true,
reason: None,
published_at: inserted_mod_lock_post.published_at,
};
// feature post
let mod_feature_post_form = ModFeaturePostForm {
mod_person_id: inserted_mod.id,
post_id: inserted_post.id,
featured: Some(false),
is_featured_community: Some(true),
};
let inserted_mod_feature_post = ModFeaturePost::create(pool, &mod_feature_post_form).await?;
let read_mod_feature_post = ModFeaturePost::read(pool, inserted_mod_feature_post.id).await?;
let expected_mod_feature_post = ModFeaturePost {
id: inserted_mod_feature_post.id,
post_id: inserted_post.id,
mod_person_id: inserted_mod.id,
featured: false,
is_featured_community: true,
published_at: inserted_mod_feature_post.published_at,
};
// comment
let mod_remove_comment_form = ModRemoveCommentForm {
mod_person_id: inserted_mod.id,
comment_id: inserted_comment.id,
reason: None,
removed: None,
};
let inserted_mod_remove_comment =
ModRemoveComment::create(pool, &mod_remove_comment_form).await?;
let read_mod_remove_comment =
ModRemoveComment::read(pool, inserted_mod_remove_comment.id).await?;
let expected_mod_remove_comment = ModRemoveComment {
id: inserted_mod_remove_comment.id,
comment_id: inserted_comment.id,
mod_person_id: inserted_mod.id,
reason: None,
removed: true,
published_at: inserted_mod_remove_comment.published_at,
};
// community
let admin_remove_community_form = AdminRemoveCommunityForm {
mod_person_id: inserted_mod.id,
community_id: inserted_community.id,
reason: None,
removed: None,
};
let inserted_admin_remove_community =
AdminRemoveCommunity::create(pool, &admin_remove_community_form).await?;
let read_mod_remove_community =
AdminRemoveCommunity::read(pool, inserted_admin_remove_community.id).await?;
let expected_admin_remove_community = AdminRemoveCommunity {
id: inserted_admin_remove_community.id,
community_id: inserted_community.id,
mod_person_id: inserted_mod.id,
reason: None,
removed: true,
published_at: inserted_admin_remove_community.published_at,
};
// ban from community
let mod_ban_from_community_form = ModBanFromCommunityForm {
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
community_id: inserted_community.id,
reason: None,
banned: None,
expires_at: None,
};
let inserted_mod_ban_from_community =
ModBanFromCommunity::create(pool, &mod_ban_from_community_form).await?;
let read_mod_ban_from_community =
ModBanFromCommunity::read(pool, inserted_mod_ban_from_community.id).await?;
let expected_mod_ban_from_community = ModBanFromCommunity {
id: inserted_mod_ban_from_community.id,
community_id: inserted_community.id,
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
reason: None,
banned: true,
expires_at: None,
published_at: inserted_mod_ban_from_community.published_at,
};
// ban
let admin_ban_form = AdminBanForm {
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
reason: None,
banned: None,
expires_at: None,
instance_id: inserted_instance.id,
};
let inserted_admin_ban = AdminBan::create(pool, &admin_ban_form).await?;
let read_mod_ban = AdminBan::read(pool, inserted_admin_ban.id).await?;
let expected_admin_ban = AdminBan {
id: inserted_admin_ban.id,
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
reason: None,
banned: true,
expires_at: None,
published_at: inserted_admin_ban.published_at,
instance_id: inserted_instance.id,
};
// mod add community
let mod_add_to_community_form = ModAddToCommunityForm {
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
community_id: inserted_community.id,
removed: None,
};
let inserted_mod_add_to_community =
ModAddToCommunity::create(pool, &mod_add_to_community_form).await?;
let read_mod_add_to_community =
ModAddToCommunity::read(pool, inserted_mod_add_to_community.id).await?;
let expected_mod_add_to_community = ModAddToCommunity {
id: inserted_mod_add_to_community.id,
community_id: inserted_community.id,
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
removed: false,
published_at: inserted_mod_add_to_community.published_at,
};
// admin add
let admin_add_form = AdminAddForm {
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
removed: None,
};
let inserted_admin_add = AdminAdd::create(pool, &admin_add_form).await?;
let read_mod_add = AdminAdd::read(pool, inserted_admin_add.id).await?;
let expected_admin_add = AdminAdd {
id: inserted_admin_add.id,
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
removed: false,
published_at: inserted_admin_add.published_at,
};
Comment::delete(pool, inserted_comment.id).await?;
Post::delete(pool, inserted_post.id).await?;
Community::delete(pool, inserted_community.id).await?;
Person::delete(pool, inserted_person.id).await?;
Person::delete(pool, inserted_mod.id).await?;
Instance::delete(pool, inserted_instance.id).await?;
assert_eq!(expected_mod_remove_post, read_mod_remove_post);
assert_eq!(expected_mod_lock_post, read_mod_lock_post);
assert_eq!(expected_mod_feature_post, read_mod_feature_post);
assert_eq!(expected_mod_remove_comment, read_mod_remove_comment);
assert_eq!(expected_admin_remove_community, read_mod_remove_community);
assert_eq!(expected_mod_ban_from_community, read_mod_ban_from_community);
assert_eq!(expected_admin_ban, read_mod_ban);
assert_eq!(expected_mod_add_to_community, read_mod_add_to_community);
assert_eq!(expected_admin_add, read_mod_add);
Ok(())
}
}

View file

@ -1,24 +1,17 @@
use crate::{
newtypes::{
ModAddCommunityId,
ModAddId,
ModAddToCommunityId,
ModBanFromCommunityId,
ModBanId,
ModChangeCommunityVisibilityId,
ModFeaturePostId,
ModLockPostId,
ModRemoveCommentId,
ModRemoveCommunityId,
ModRemovePostId,
ModTransferCommunityId,
},
source::mod_log::moderator::{
ModAdd,
ModAddCommunity,
ModAddCommunityForm,
ModAddForm,
ModBan,
ModBanForm,
ModAddToCommunity,
ModAddToCommunityForm,
ModBanFromCommunity,
ModBanFromCommunityForm,
ModChangeCommunityVisibility,
@ -29,8 +22,6 @@ use crate::{
ModLockPostForm,
ModRemoveComment,
ModRemoveCommentForm,
ModRemoveCommunity,
ModRemoveCommunityForm,
ModRemovePost,
ModRemovePostForm,
ModTransferCommunity,
@ -42,15 +33,12 @@ use crate::{
use diesel::{dsl::insert_into, QueryDsl};
use diesel_async::RunQueryDsl;
use lemmy_db_schema_file::schema::{
mod_add,
mod_add_community,
mod_ban,
mod_add_to_community,
mod_ban_from_community,
mod_change_community_visibility,
mod_feature_post,
mod_lock_post,
mod_remove_comment,
mod_remove_community,
mod_remove_post,
mod_transfer_community,
};
@ -196,34 +184,6 @@ impl ModRemoveComment {
}
}
impl Crud for ModRemoveCommunity {
type InsertForm = ModRemoveCommunityForm;
type UpdateForm = ModRemoveCommunityForm;
type IdType = ModRemoveCommunityId;
async fn create(pool: &mut DbPool<'_>, form: &Self::InsertForm) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
insert_into(mod_remove_community::table)
.values(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntCreateModlog)
}
async fn update(
pool: &mut DbPool<'_>,
from_id: Self::IdType,
form: &Self::UpdateForm,
) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
diesel::update(mod_remove_community::table.find(from_id))
.set(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntUpdateModlog)
}
}
impl Crud for ModBanFromCommunity {
type InsertForm = ModBanFromCommunityForm;
type UpdateForm = ModBanFromCommunityForm;
@ -252,34 +212,6 @@ impl Crud for ModBanFromCommunity {
}
}
impl Crud for ModBan {
type InsertForm = ModBanForm;
type UpdateForm = ModBanForm;
type IdType = ModBanId;
async fn create(pool: &mut DbPool<'_>, form: &Self::InsertForm) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
insert_into(mod_ban::table)
.values(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntCreateModlog)
}
async fn update(
pool: &mut DbPool<'_>,
from_id: Self::IdType,
form: &Self::UpdateForm,
) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
diesel::update(mod_ban::table.find(from_id))
.set(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntUpdateModlog)
}
}
impl Crud for ModChangeCommunityVisibility {
type InsertForm = ModChangeCommunityVisibilityForm;
type UpdateForm = ModChangeCommunityVisibilityForm;
@ -308,14 +240,14 @@ impl Crud for ModChangeCommunityVisibility {
}
}
impl Crud for ModAddCommunity {
type InsertForm = ModAddCommunityForm;
type UpdateForm = ModAddCommunityForm;
type IdType = ModAddCommunityId;
impl Crud for ModAddToCommunity {
type InsertForm = ModAddToCommunityForm;
type UpdateForm = ModAddToCommunityForm;
type IdType = ModAddToCommunityId;
async fn create(pool: &mut DbPool<'_>, form: &Self::InsertForm) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
insert_into(mod_add_community::table)
insert_into(mod_add_to_community::table)
.values(form)
.get_result::<Self>(conn)
.await
@ -328,7 +260,7 @@ impl Crud for ModAddCommunity {
form: &Self::UpdateForm,
) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
diesel::update(mod_add_community::table.find(from_id))
diesel::update(mod_add_to_community::table.find(from_id))
.set(form)
.get_result::<Self>(conn)
.await
@ -363,293 +295,3 @@ impl Crud for ModTransferCommunity {
.with_lemmy_type(LemmyErrorType::CouldntUpdateModlog)
}
}
impl Crud for ModAdd {
type InsertForm = ModAddForm;
type UpdateForm = ModAddForm;
type IdType = ModAddId;
async fn create(pool: &mut DbPool<'_>, form: &Self::InsertForm) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
insert_into(mod_add::table)
.values(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntCreateModlog)
}
async fn update(
pool: &mut DbPool<'_>,
from_id: Self::IdType,
form: &Self::UpdateForm,
) -> LemmyResult<Self> {
let conn = &mut get_conn(pool).await?;
diesel::update(mod_add::table.find(from_id))
.set(form)
.get_result::<Self>(conn)
.await
.with_lemmy_type(LemmyErrorType::CouldntUpdateModlog)
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{
source::{
comment::{Comment, CommentInsertForm},
community::{Community, CommunityInsertForm},
instance::Instance,
person::{Person, PersonInsertForm},
post::{Post, PostInsertForm},
},
utils::build_db_pool_for_tests,
};
use lemmy_utils::error::LemmyResult;
use pretty_assertions::assert_eq;
use serial_test::serial;
#[tokio::test]
#[serial]
async fn test_crud() -> LemmyResult<()> {
let pool = &build_db_pool_for_tests();
let pool = &mut pool.into();
let inserted_instance = Instance::read_or_create(pool, "my_domain.tld".to_string()).await?;
let new_mod = PersonInsertForm::test_form(inserted_instance.id, "the mod");
let inserted_mod = Person::create(pool, &new_mod).await?;
let new_person = PersonInsertForm::test_form(inserted_instance.id, "jim2");
let inserted_person = Person::create(pool, &new_person).await?;
let new_community = CommunityInsertForm::new(
inserted_instance.id,
"mod_community".to_string(),
"nada".to_owned(),
"pubkey".to_string(),
);
let inserted_community = Community::create(pool, &new_community).await?;
let new_post = PostInsertForm::new(
"A test post thweep".into(),
inserted_person.id,
inserted_community.id,
);
let inserted_post = Post::create(pool, &new_post).await?;
let comment_form = CommentInsertForm::new(
inserted_person.id,
inserted_post.id,
"A test comment".into(),
);
let inserted_comment = Comment::create(pool, &comment_form, None).await?;
// Now the actual tests
// remove post
let mod_remove_post_form = ModRemovePostForm {
mod_person_id: inserted_mod.id,
post_id: inserted_post.id,
reason: None,
removed: None,
};
let inserted_mod_remove_post = ModRemovePost::create(pool, &mod_remove_post_form).await?;
let read_mod_remove_post = ModRemovePost::read(pool, inserted_mod_remove_post.id).await?;
let expected_mod_remove_post = ModRemovePost {
id: inserted_mod_remove_post.id,
post_id: inserted_post.id,
mod_person_id: inserted_mod.id,
reason: None,
removed: true,
published_at: inserted_mod_remove_post.published_at,
};
// lock post
let mod_lock_post_form = ModLockPostForm {
mod_person_id: inserted_mod.id,
post_id: inserted_post.id,
locked: None,
reason: None,
};
let inserted_mod_lock_post = ModLockPost::create(pool, &mod_lock_post_form).await?;
let read_mod_lock_post = ModLockPost::read(pool, inserted_mod_lock_post.id).await?;
let expected_mod_lock_post = ModLockPost {
id: inserted_mod_lock_post.id,
post_id: inserted_post.id,
mod_person_id: inserted_mod.id,
locked: true,
reason: None,
published_at: inserted_mod_lock_post.published_at,
};
// feature post
let mod_feature_post_form = ModFeaturePostForm {
mod_person_id: inserted_mod.id,
post_id: inserted_post.id,
featured: Some(false),
is_featured_community: Some(true),
};
let inserted_mod_feature_post = ModFeaturePost::create(pool, &mod_feature_post_form).await?;
let read_mod_feature_post = ModFeaturePost::read(pool, inserted_mod_feature_post.id).await?;
let expected_mod_feature_post = ModFeaturePost {
id: inserted_mod_feature_post.id,
post_id: inserted_post.id,
mod_person_id: inserted_mod.id,
featured: false,
is_featured_community: true,
published_at: inserted_mod_feature_post.published_at,
};
// comment
let mod_remove_comment_form = ModRemoveCommentForm {
mod_person_id: inserted_mod.id,
comment_id: inserted_comment.id,
reason: None,
removed: None,
};
let inserted_mod_remove_comment =
ModRemoveComment::create(pool, &mod_remove_comment_form).await?;
let read_mod_remove_comment =
ModRemoveComment::read(pool, inserted_mod_remove_comment.id).await?;
let expected_mod_remove_comment = ModRemoveComment {
id: inserted_mod_remove_comment.id,
comment_id: inserted_comment.id,
mod_person_id: inserted_mod.id,
reason: None,
removed: true,
published_at: inserted_mod_remove_comment.published_at,
};
// community
let mod_remove_community_form = ModRemoveCommunityForm {
mod_person_id: inserted_mod.id,
community_id: inserted_community.id,
reason: None,
removed: None,
};
let inserted_mod_remove_community =
ModRemoveCommunity::create(pool, &mod_remove_community_form).await?;
let read_mod_remove_community =
ModRemoveCommunity::read(pool, inserted_mod_remove_community.id).await?;
let expected_mod_remove_community = ModRemoveCommunity {
id: inserted_mod_remove_community.id,
community_id: inserted_community.id,
mod_person_id: inserted_mod.id,
reason: None,
removed: true,
published_at: inserted_mod_remove_community.published_at,
};
// ban from community
let mod_ban_from_community_form = ModBanFromCommunityForm {
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
community_id: inserted_community.id,
reason: None,
banned: None,
expires_at: None,
};
let inserted_mod_ban_from_community =
ModBanFromCommunity::create(pool, &mod_ban_from_community_form).await?;
let read_mod_ban_from_community =
ModBanFromCommunity::read(pool, inserted_mod_ban_from_community.id).await?;
let expected_mod_ban_from_community = ModBanFromCommunity {
id: inserted_mod_ban_from_community.id,
community_id: inserted_community.id,
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
reason: None,
banned: true,
expires_at: None,
published_at: inserted_mod_ban_from_community.published_at,
};
// ban
let mod_ban_form = ModBanForm {
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
reason: None,
banned: None,
expires_at: None,
instance_id: inserted_instance.id,
};
let inserted_mod_ban = ModBan::create(pool, &mod_ban_form).await?;
let read_mod_ban = ModBan::read(pool, inserted_mod_ban.id).await?;
let expected_mod_ban = ModBan {
id: inserted_mod_ban.id,
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
reason: None,
banned: true,
expires_at: None,
published_at: inserted_mod_ban.published_at,
instance_id: inserted_instance.id,
};
// mod add community
let mod_add_community_form = ModAddCommunityForm {
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
community_id: inserted_community.id,
removed: None,
};
let inserted_mod_add_community = ModAddCommunity::create(pool, &mod_add_community_form).await?;
let read_mod_add_community = ModAddCommunity::read(pool, inserted_mod_add_community.id).await?;
let expected_mod_add_community = ModAddCommunity {
id: inserted_mod_add_community.id,
community_id: inserted_community.id,
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
removed: false,
published_at: inserted_mod_add_community.published_at,
};
// mod add
let mod_add_form = ModAddForm {
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
removed: None,
};
let inserted_mod_add = ModAdd::create(pool, &mod_add_form).await?;
let read_mod_add = ModAdd::read(pool, inserted_mod_add.id).await?;
let expected_mod_add = ModAdd {
id: inserted_mod_add.id,
mod_person_id: inserted_mod.id,
other_person_id: inserted_person.id,
removed: false,
published_at: inserted_mod_add.published_at,
};
Comment::delete(pool, inserted_comment.id).await?;
Post::delete(pool, inserted_post.id).await?;
Community::delete(pool, inserted_community.id).await?;
Person::delete(pool, inserted_person.id).await?;
Person::delete(pool, inserted_mod.id).await?;
Instance::delete(pool, inserted_instance.id).await?;
assert_eq!(expected_mod_remove_post, read_mod_remove_post);
assert_eq!(expected_mod_lock_post, read_mod_lock_post);
assert_eq!(expected_mod_feature_post, read_mod_feature_post);
assert_eq!(expected_mod_remove_comment, read_mod_remove_comment);
assert_eq!(expected_mod_remove_community, read_mod_remove_community);
assert_eq!(expected_mod_ban_from_community, read_mod_ban_from_community);
assert_eq!(expected_mod_ban, read_mod_ban);
assert_eq!(expected_mod_add_community, read_mod_add_community);
assert_eq!(expected_mod_add, read_mod_add);
Ok(())
}
}

View file

@ -95,12 +95,12 @@ pub enum ModlogActionType {
ModLockPost,
ModFeaturePost,
ModRemoveComment,
ModRemoveCommunity,
AdminRemoveCommunity,
ModBanFromCommunity,
ModAddCommunity,
ModAddToCommunity,
ModTransferCommunity,
ModAdd,
ModBan,
AdminAdd,
AdminBan,
ModChangeCommunityVisibility,
AdminPurgePerson,
AdminPurgeCommunity,

View file

@ -284,7 +284,7 @@ pub struct ModRemoveCommentId(pub i32);
#[cfg_attr(feature = "full", derive(DieselNewType))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
pub struct ModRemoveCommunityId(pub i32);
pub struct AdminRemoveCommunityId(pub i32);
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "full", derive(DieselNewType))]
@ -308,7 +308,7 @@ pub struct ModBanFromCommunityId(pub i32);
#[cfg_attr(feature = "full", derive(DieselNewType))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
pub struct ModBanId(pub i32);
pub struct AdminBanId(pub i32);
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "full", derive(DieselNewType))]
@ -320,7 +320,7 @@ pub struct ModChangeCommunityVisibilityId(pub i32);
#[cfg_attr(feature = "full", derive(DieselNewType))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
pub struct ModAddCommunityId(pub i32);
pub struct ModAddToCommunityId(pub i32);
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "full", derive(DieselNewType))]
@ -332,7 +332,7 @@ pub struct ModTransferCommunityId(pub i32);
#[cfg_attr(feature = "full", derive(DieselNewType))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
pub struct ModAddId(pub i32);
pub struct AdminAddId(pub i32);
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "full", derive(DieselNewType))]

View file

@ -1,19 +1,19 @@
use crate::newtypes::{
AdminAddId,
AdminAllowInstanceId,
AdminBanId,
AdminBlockInstanceId,
AdminPurgeCommentId,
AdminPurgeCommunityId,
AdminPurgePersonId,
AdminPurgePostId,
ModAddCommunityId,
ModAddId,
AdminRemoveCommunityId,
ModAddToCommunityId,
ModBanFromCommunityId,
ModBanId,
ModChangeCommunityVisibilityId,
ModFeaturePostId,
ModLockPostId,
ModRemoveCommentId,
ModRemoveCommunityId,
ModRemovePostId,
ModTransferCommunityId,
ModlogCombinedId,
@ -43,15 +43,15 @@ pub struct ModlogCombined {
pub admin_purge_community_id: Option<AdminPurgeCommunityId>,
pub admin_purge_person_id: Option<AdminPurgePersonId>,
pub admin_purge_post_id: Option<AdminPurgePostId>,
pub mod_add_id: Option<ModAddId>,
pub mod_add_community_id: Option<ModAddCommunityId>,
pub mod_ban_id: Option<ModBanId>,
pub admin_add_id: Option<AdminAddId>,
pub mod_add_to_community_id: Option<ModAddToCommunityId>,
pub admin_ban_id: Option<AdminBanId>,
pub mod_ban_from_community_id: Option<ModBanFromCommunityId>,
pub mod_feature_post_id: Option<ModFeaturePostId>,
pub mod_change_community_visibility_id: Option<ModChangeCommunityVisibilityId>,
pub mod_lock_post_id: Option<ModLockPostId>,
pub mod_remove_comment_id: Option<ModRemoveCommentId>,
pub mod_remove_community_id: Option<ModRemoveCommunityId>,
pub admin_remove_community_id: Option<AdminRemoveCommunityId>,
pub mod_remove_post_id: Option<ModRemovePostId>,
pub mod_transfer_community_id: Option<ModTransferCommunityId>,
}

View file

@ -1,10 +1,13 @@
use crate::newtypes::{
AdminAddId,
AdminAllowInstanceId,
AdminBanId,
AdminBlockInstanceId,
AdminPurgeCommentId,
AdminPurgeCommunityId,
AdminPurgePersonId,
AdminPurgePostId,
AdminRemoveCommunityId,
CommunityId,
InstanceId,
PersonId,
@ -13,12 +16,15 @@ use crate::newtypes::{
use chrono::{DateTime, Utc};
#[cfg(feature = "full")]
use lemmy_db_schema_file::schema::{
admin_add,
admin_allow_instance,
admin_ban,
admin_block_instance,
admin_purge_comment,
admin_purge_community,
admin_purge_person,
admin_purge_post,
admin_remove_community,
};
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
@ -181,3 +187,82 @@ pub struct AdminBlockInstanceForm {
pub blocked: bool,
pub reason: Option<String>,
}
#[skip_serializing_none]
#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "full", derive(Queryable, Selectable, Identifiable))]
#[cfg_attr(feature = "full", diesel(table_name = admin_remove_community))]
#[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When a moderator removes a community.
pub struct AdminRemoveCommunity {
pub id: AdminRemoveCommunityId,
pub mod_person_id: PersonId,
pub community_id: CommunityId,
pub reason: Option<String>,
pub removed: bool,
pub published_at: DateTime<Utc>,
}
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
#[cfg_attr(feature = "full", diesel(table_name = admin_remove_community))]
pub struct AdminRemoveCommunityForm {
pub mod_person_id: PersonId,
pub community_id: CommunityId,
pub reason: Option<String>,
pub removed: Option<bool>,
}
#[skip_serializing_none]
#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "full", derive(Queryable, Selectable, Identifiable))]
#[cfg_attr(feature = "full", diesel(table_name = admin_ban))]
#[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When someone is banned from the site.
pub struct AdminBan {
pub id: AdminBanId,
pub mod_person_id: PersonId,
pub other_person_id: PersonId,
pub reason: Option<String>,
pub banned: bool,
pub expires_at: Option<DateTime<Utc>>,
pub published_at: DateTime<Utc>,
pub instance_id: InstanceId,
}
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
#[cfg_attr(feature = "full", diesel(table_name = admin_ban))]
pub struct AdminBanForm {
pub mod_person_id: PersonId,
pub other_person_id: PersonId,
pub reason: Option<String>,
pub banned: Option<bool>,
pub expires_at: Option<DateTime<Utc>>,
pub instance_id: InstanceId,
}
#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "full", derive(Queryable, Selectable, Identifiable))]
#[cfg_attr(feature = "full", diesel(table_name = admin_add))]
#[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When someone is added as a site admin.
pub struct AdminAdd {
pub id: AdminAddId,
pub mod_person_id: PersonId,
pub other_person_id: PersonId,
pub removed: bool,
pub published_at: DateTime<Utc>,
}
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
#[cfg_attr(feature = "full", diesel(table_name = admin_add))]
pub struct AdminAddForm {
pub mod_person_id: PersonId,
pub other_person_id: PersonId,
pub removed: Option<bool>,
}

View file

@ -1,16 +1,12 @@
use crate::newtypes::{
CommentId,
CommunityId,
InstanceId,
ModAddCommunityId,
ModAddId,
ModAddToCommunityId,
ModBanFromCommunityId,
ModBanId,
ModChangeCommunityVisibilityId,
ModFeaturePostId,
ModLockPostId,
ModRemoveCommentId,
ModRemoveCommunityId,
ModRemovePostId,
ModTransferCommunityId,
PersonId,
@ -20,15 +16,12 @@ use chrono::{DateTime, Utc};
use lemmy_db_schema_file::enums::CommunityVisibility;
#[cfg(feature = "full")]
use lemmy_db_schema_file::schema::{
mod_add,
mod_add_community,
mod_ban,
mod_add_to_community,
mod_ban_from_community,
mod_change_community_visibility,
mod_feature_post,
mod_lock_post,
mod_remove_comment,
mod_remove_community,
mod_remove_post,
mod_transfer_community,
};
@ -137,32 +130,6 @@ pub struct ModRemoveCommentForm {
pub removed: Option<bool>,
}
#[skip_serializing_none]
#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "full", derive(Queryable, Selectable, Identifiable))]
#[cfg_attr(feature = "full", diesel(table_name = mod_remove_community))]
#[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When a moderator removes a community.
pub struct ModRemoveCommunity {
pub id: ModRemoveCommunityId,
pub mod_person_id: PersonId,
pub community_id: CommunityId,
pub reason: Option<String>,
pub removed: bool,
pub published_at: DateTime<Utc>,
}
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
#[cfg_attr(feature = "full", diesel(table_name = mod_remove_community))]
pub struct ModRemoveCommunityForm {
pub mod_person_id: PersonId,
pub community_id: CommunityId,
pub reason: Option<String>,
pub removed: Option<bool>,
}
#[skip_serializing_none]
#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "full", derive(Queryable, Selectable, Identifiable))]
@ -193,25 +160,6 @@ pub struct ModBanFromCommunityForm {
pub expires_at: Option<DateTime<Utc>>,
}
#[skip_serializing_none]
#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "full", derive(Queryable, Selectable, Identifiable))]
#[cfg_attr(feature = "full", diesel(table_name = mod_ban))]
#[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When someone is banned from the site.
pub struct ModBan {
pub id: ModBanId,
pub mod_person_id: PersonId,
pub other_person_id: PersonId,
pub reason: Option<String>,
pub banned: bool,
pub expires_at: Option<DateTime<Utc>>,
pub published_at: DateTime<Utc>,
pub instance_id: InstanceId,
}
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
#[cfg_attr(feature = "full", diesel(table_name = mod_change_community_visibility))]
pub struct ModChangeCommunityVisibilityForm {
@ -235,26 +183,15 @@ pub struct ModChangeCommunityVisibility {
pub visibility: CommunityVisibility,
}
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
#[cfg_attr(feature = "full", diesel(table_name = mod_ban))]
pub struct ModBanForm {
pub mod_person_id: PersonId,
pub other_person_id: PersonId,
pub reason: Option<String>,
pub banned: Option<bool>,
pub expires_at: Option<DateTime<Utc>>,
pub instance_id: InstanceId,
}
#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "full", derive(Queryable, Selectable, Identifiable))]
#[cfg_attr(feature = "full", diesel(table_name = mod_add_community))]
#[cfg_attr(feature = "full", diesel(table_name = mod_add_to_community))]
#[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When someone is added as a community moderator.
pub struct ModAddCommunity {
pub id: ModAddCommunityId,
pub struct ModAddToCommunity {
pub id: ModAddToCommunityId,
pub mod_person_id: PersonId,
pub other_person_id: PersonId,
pub community_id: CommunityId,
@ -263,8 +200,8 @@ pub struct ModAddCommunity {
}
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
#[cfg_attr(feature = "full", diesel(table_name = mod_add_community))]
pub struct ModAddCommunityForm {
#[cfg_attr(feature = "full", diesel(table_name = mod_add_to_community))]
pub struct ModAddToCommunityForm {
pub mod_person_id: PersonId,
pub other_person_id: PersonId,
pub community_id: CommunityId,
@ -293,26 +230,3 @@ pub struct ModTransferCommunityForm {
pub other_person_id: PersonId,
pub community_id: CommunityId,
}
#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
#[cfg_attr(feature = "full", derive(Queryable, Selectable, Identifiable))]
#[cfg_attr(feature = "full", diesel(table_name = mod_add))]
#[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When someone is added as a site moderator.
pub struct ModAdd {
pub id: ModAddId,
pub mod_person_id: PersonId,
pub other_person_id: PersonId,
pub removed: bool,
pub published_at: DateTime<Utc>,
}
#[cfg_attr(feature = "full", derive(Insertable, AsChangeset))]
#[cfg_attr(feature = "full", diesel(table_name = mod_add))]
pub struct ModAddForm {
pub mod_person_id: PersonId,
pub other_person_id: PersonId,
pub removed: Option<bool>,
}

View file

@ -58,6 +58,16 @@ pub mod sql_types {
pub struct VoteShowEnum;
}
diesel::table! {
admin_add (id) {
id -> Int4,
mod_person_id -> Int4,
other_person_id -> Int4,
removed -> Bool,
published_at -> Timestamptz,
}
}
diesel::table! {
admin_allow_instance (id) {
id -> Int4,
@ -69,6 +79,19 @@ diesel::table! {
}
}
diesel::table! {
admin_ban (id) {
id -> Int4,
mod_person_id -> Int4,
other_person_id -> Int4,
reason -> Nullable<Text>,
banned -> Bool,
expires_at -> Nullable<Timestamptz>,
published_at -> Timestamptz,
instance_id -> Int4,
}
}
diesel::table! {
admin_block_instance (id) {
id -> Int4,
@ -119,6 +142,17 @@ diesel::table! {
}
}
diesel::table! {
admin_remove_community (id) {
id -> Int4,
mod_person_id -> Int4,
community_id -> Int4,
reason -> Nullable<Text>,
removed -> Bool,
published_at -> Timestamptz,
}
}
diesel::table! {
captcha_answer (uuid) {
uuid -> Uuid,
@ -563,17 +597,7 @@ diesel::table! {
}
diesel::table! {
mod_add (id) {
id -> Int4,
mod_person_id -> Int4,
other_person_id -> Int4,
removed -> Bool,
published_at -> Timestamptz,
}
}
diesel::table! {
mod_add_community (id) {
mod_add_to_community (id) {
id -> Int4,
mod_person_id -> Int4,
other_person_id -> Int4,
@ -583,19 +607,6 @@ diesel::table! {
}
}
diesel::table! {
mod_ban (id) {
id -> Int4,
mod_person_id -> Int4,
other_person_id -> Int4,
reason -> Nullable<Text>,
banned -> Bool,
expires_at -> Nullable<Timestamptz>,
published_at -> Timestamptz,
instance_id -> Int4,
}
}
diesel::table! {
mod_ban_from_community (id) {
id -> Int4,
@ -655,17 +666,6 @@ diesel::table! {
}
}
diesel::table! {
mod_remove_community (id) {
id -> Int4,
mod_person_id -> Int4,
community_id -> Int4,
reason -> Nullable<Text>,
removed -> Bool,
published_at -> Timestamptz,
}
}
diesel::table! {
mod_remove_post (id) {
id -> Int4,
@ -697,14 +697,14 @@ diesel::table! {
admin_purge_community_id -> Nullable<Int4>,
admin_purge_person_id -> Nullable<Int4>,
admin_purge_post_id -> Nullable<Int4>,
mod_add_id -> Nullable<Int4>,
mod_add_community_id -> Nullable<Int4>,
mod_ban_id -> Nullable<Int4>,
admin_add_id -> Nullable<Int4>,
mod_add_to_community_id -> Nullable<Int4>,
admin_ban_id -> Nullable<Int4>,
mod_ban_from_community_id -> Nullable<Int4>,
mod_feature_post_id -> Nullable<Int4>,
mod_lock_post_id -> Nullable<Int4>,
mod_remove_comment_id -> Nullable<Int4>,
mod_remove_community_id -> Nullable<Int4>,
admin_remove_community_id -> Nullable<Int4>,
mod_remove_post_id -> Nullable<Int4>,
mod_transfer_community_id -> Nullable<Int4>,
mod_change_community_visibility_id -> Nullable<Int4>,
@ -1136,6 +1136,7 @@ diesel::table! {
diesel::joinable!(admin_allow_instance -> instance (instance_id));
diesel::joinable!(admin_allow_instance -> person (admin_person_id));
diesel::joinable!(admin_ban -> instance (instance_id));
diesel::joinable!(admin_block_instance -> instance (instance_id));
diesel::joinable!(admin_block_instance -> person (admin_person_id));
diesel::joinable!(admin_purge_comment -> person (admin_person_id));
@ -1144,6 +1145,8 @@ diesel::joinable!(admin_purge_community -> person (admin_person_id));
diesel::joinable!(admin_purge_person -> person (admin_person_id));
diesel::joinable!(admin_purge_post -> community (community_id));
diesel::joinable!(admin_purge_post -> person (admin_person_id));
diesel::joinable!(admin_remove_community -> community (community_id));
diesel::joinable!(admin_remove_community -> person (mod_person_id));
diesel::joinable!(comment -> language (language_id));
diesel::joinable!(comment -> person (creator_id));
diesel::joinable!(comment -> post (post_id));
@ -1173,8 +1176,7 @@ diesel::joinable!(local_user_keyword_block -> local_user (local_user_id));
diesel::joinable!(local_user_language -> language (language_id));
diesel::joinable!(local_user_language -> local_user (local_user_id));
diesel::joinable!(login_token -> local_user (user_id));
diesel::joinable!(mod_add_community -> community (community_id));
diesel::joinable!(mod_ban -> instance (instance_id));
diesel::joinable!(mod_add_to_community -> community (community_id));
diesel::joinable!(mod_ban_from_community -> community (community_id));
diesel::joinable!(mod_change_community_visibility -> community (community_id));
diesel::joinable!(mod_change_community_visibility -> person (mod_person_id));
@ -1184,26 +1186,24 @@ diesel::joinable!(mod_lock_post -> person (mod_person_id));
diesel::joinable!(mod_lock_post -> post (post_id));
diesel::joinable!(mod_remove_comment -> comment (comment_id));
diesel::joinable!(mod_remove_comment -> person (mod_person_id));
diesel::joinable!(mod_remove_community -> community (community_id));
diesel::joinable!(mod_remove_community -> person (mod_person_id));
diesel::joinable!(mod_remove_post -> person (mod_person_id));
diesel::joinable!(mod_remove_post -> post (post_id));
diesel::joinable!(mod_transfer_community -> community (community_id));
diesel::joinable!(modlog_combined -> admin_add (admin_add_id));
diesel::joinable!(modlog_combined -> admin_allow_instance (admin_allow_instance_id));
diesel::joinable!(modlog_combined -> admin_ban (admin_ban_id));
diesel::joinable!(modlog_combined -> admin_block_instance (admin_block_instance_id));
diesel::joinable!(modlog_combined -> admin_purge_comment (admin_purge_comment_id));
diesel::joinable!(modlog_combined -> admin_purge_community (admin_purge_community_id));
diesel::joinable!(modlog_combined -> admin_purge_person (admin_purge_person_id));
diesel::joinable!(modlog_combined -> admin_purge_post (admin_purge_post_id));
diesel::joinable!(modlog_combined -> mod_add (mod_add_id));
diesel::joinable!(modlog_combined -> mod_add_community (mod_add_community_id));
diesel::joinable!(modlog_combined -> mod_ban (mod_ban_id));
diesel::joinable!(modlog_combined -> admin_remove_community (admin_remove_community_id));
diesel::joinable!(modlog_combined -> mod_add_to_community (mod_add_to_community_id));
diesel::joinable!(modlog_combined -> mod_ban_from_community (mod_ban_from_community_id));
diesel::joinable!(modlog_combined -> mod_change_community_visibility (mod_change_community_visibility_id));
diesel::joinable!(modlog_combined -> mod_feature_post (mod_feature_post_id));
diesel::joinable!(modlog_combined -> mod_lock_post (mod_lock_post_id));
diesel::joinable!(modlog_combined -> mod_remove_comment (mod_remove_comment_id));
diesel::joinable!(modlog_combined -> mod_remove_community (mod_remove_community_id));
diesel::joinable!(modlog_combined -> mod_remove_post (mod_remove_post_id));
diesel::joinable!(modlog_combined -> mod_transfer_community (mod_transfer_community_id));
diesel::joinable!(multi_community -> instance (instance_id));
@ -1254,12 +1254,15 @@ diesel::joinable!(site_language -> site (site_id));
diesel::joinable!(tag -> community (community_id));
diesel::allow_tables_to_appear_in_same_query!(
admin_add,
admin_allow_instance,
admin_ban,
admin_block_instance,
admin_purge_comment,
admin_purge_community,
admin_purge_person,
admin_purge_post,
admin_remove_community,
captcha_answer,
comment,
comment_actions,
@ -1287,15 +1290,12 @@ diesel::allow_tables_to_appear_in_same_query!(
local_user_keyword_block,
local_user_language,
login_token,
mod_add,
mod_add_community,
mod_ban,
mod_add_to_community,
mod_ban_from_community,
mod_change_community_visibility,
mod_feature_post,
mod_lock_post,
mod_remove_comment,
mod_remove_community,
mod_remove_post,
mod_transfer_community,
modlog_combined,

View file

@ -602,15 +602,15 @@ CALL r.create_modlog_combined_trigger ('admin_purge_comment');
CALL r.create_modlog_combined_trigger ('admin_purge_community');
CALL r.create_modlog_combined_trigger ('admin_purge_person');
CALL r.create_modlog_combined_trigger ('admin_purge_post');
CALL r.create_modlog_combined_trigger ('mod_add');
CALL r.create_modlog_combined_trigger ('mod_add_community');
CALL r.create_modlog_combined_trigger ('mod_ban');
CALL r.create_modlog_combined_trigger ('admin_add');
CALL r.create_modlog_combined_trigger ('mod_add_to_community');
CALL r.create_modlog_combined_trigger ('admin_ban');
CALL r.create_modlog_combined_trigger ('mod_ban_from_community');
CALL r.create_modlog_combined_trigger ('mod_feature_post');
CALL r.create_modlog_combined_trigger ('mod_change_community_visibility');
CALL r.create_modlog_combined_trigger ('mod_lock_post');
CALL r.create_modlog_combined_trigger ('mod_remove_comment');
CALL r.create_modlog_combined_trigger ('mod_remove_community');
CALL r.create_modlog_combined_trigger ('admin_remove_community');
CALL r.create_modlog_combined_trigger ('mod_remove_post');
CALL r.create_modlog_combined_trigger ('mod_transfer_community');
-- Prevent using delete instead of uplete on action tables

View file

@ -1,19 +1,19 @@
use crate::{
AdminAddView,
AdminAllowInstanceView,
AdminBanView,
AdminBlockInstanceView,
AdminPurgeCommentView,
AdminPurgeCommunityView,
AdminPurgePersonView,
AdminPurgePostView,
ModAddCommunityView,
ModAddView,
AdminRemoveCommunityView,
ModAddToCommunityView,
ModBanFromCommunityView,
ModBanView,
ModChangeCommunityVisibilityView,
ModFeaturePostView,
ModLockPostView,
ModRemoveCommentView,
ModRemoveCommunityView,
ModRemovePostView,
ModTransferCommunityView,
ModlogCombinedView,
@ -50,25 +50,25 @@ use lemmy_db_schema::{
use lemmy_db_schema_file::{
enums::ListingType,
schema::{
admin_add,
admin_allow_instance,
admin_ban,
admin_block_instance,
admin_purge_comment,
admin_purge_community,
admin_purge_person,
admin_purge_post,
admin_remove_community,
comment,
community,
community_actions,
instance,
mod_add,
mod_add_community,
mod_ban,
mod_add_to_community,
mod_ban_from_community,
mod_change_community_visibility,
mod_feature_post,
mod_lock_post,
mod_remove_comment,
mod_remove_community,
mod_remove_post,
mod_transfer_community,
modlog_combined,
@ -95,24 +95,24 @@ impl ModlogCombinedViewInternal {
.or(admin_purge_community::admin_person_id.eq(person::id))
.or(admin_purge_person::admin_person_id.eq(person::id))
.or(admin_purge_post::admin_person_id.eq(person::id))
.or(mod_add::mod_person_id.eq(person::id))
.or(mod_add_community::mod_person_id.eq(person::id))
.or(mod_ban::mod_person_id.eq(person::id))
.or(admin_add::mod_person_id.eq(person::id))
.or(mod_add_to_community::mod_person_id.eq(person::id))
.or(admin_ban::mod_person_id.eq(person::id))
.or(mod_ban_from_community::mod_person_id.eq(person::id))
.or(mod_feature_post::mod_person_id.eq(person::id))
.or(mod_change_community_visibility::mod_person_id.eq(person::id))
.or(mod_lock_post::mod_person_id.eq(person::id))
.or(mod_remove_comment::mod_person_id.eq(person::id))
.or(mod_remove_community::mod_person_id.eq(person::id))
.or(admin_remove_community::mod_person_id.eq(person::id))
.or(mod_remove_post::mod_person_id.eq(person::id))
.or(mod_transfer_community::mod_person_id.eq(person::id)),
);
let other_person_join = aliases::person1.on(
mod_add::other_person_id
admin_add::other_person_id
.eq(other_person)
.or(mod_add_community::other_person_id.eq(other_person))
.or(mod_ban::other_person_id.eq(other_person))
.or(mod_add_to_community::other_person_id.eq(other_person))
.or(admin_ban::other_person_id.eq(other_person))
.or(mod_ban_from_community::other_person_id.eq(other_person))
// Some tables don't have the other_person_id directly, so you need to join
.or(
@ -156,7 +156,7 @@ impl ModlogCombinedViewInternal {
let community_join = community::table.on(
admin_purge_post::community_id
.eq(community::id)
.or(mod_add_community::community_id.eq(community::id))
.or(mod_add_to_community::community_id.eq(community::id))
.or(mod_ban_from_community::community_id.eq(community::id))
.or(
mod_feature_post::id
@ -174,7 +174,7 @@ impl ModlogCombinedViewInternal {
.is_not_null()
.and(post::community_id.eq(community::id)),
)
.or(mod_remove_community::community_id.eq(community::id))
.or(admin_remove_community::community_id.eq(community::id))
.or(
mod_remove_post::id
.is_not_null()
@ -202,15 +202,15 @@ impl ModlogCombinedViewInternal {
.left_join(admin_purge_community::table)
.left_join(admin_purge_person::table)
.left_join(admin_purge_post::table)
.left_join(mod_add::table)
.left_join(mod_add_community::table)
.left_join(mod_ban::table)
.left_join(admin_add::table)
.left_join(mod_add_to_community::table)
.left_join(admin_ban::table)
.left_join(mod_ban_from_community::table)
.left_join(mod_feature_post::table)
.left_join(mod_change_community_visibility::table)
.left_join(mod_lock_post::table)
.left_join(mod_remove_comment::table)
.left_join(mod_remove_community::table)
.left_join(admin_remove_community::table)
.left_join(mod_remove_post::table)
.left_join(mod_transfer_community::table)
.left_join(moderator_join)
@ -234,15 +234,15 @@ impl PaginationCursorBuilder for ModlogCombinedView {
AdminPurgeCommunity(v) => ('D', v.admin_purge_community.id.0),
AdminPurgePerson(v) => ('E', v.admin_purge_person.id.0),
AdminPurgePost(v) => ('F', v.admin_purge_post.id.0),
ModAdd(v) => ('G', v.mod_add.id.0),
ModAddCommunity(v) => ('H', v.mod_add_community.id.0),
ModBan(v) => ('I', v.mod_ban.id.0),
AdminAdd(v) => ('G', v.admin_add.id.0),
ModAddToCommunity(v) => ('H', v.mod_add_to_community.id.0),
AdminBan(v) => ('I', v.admin_ban.id.0),
ModBanFromCommunity(v) => ('J', v.mod_ban_from_community.id.0),
ModFeaturePost(v) => ('K', v.mod_feature_post.id.0),
ModChangeCommunityVisibility(v) => ('L', v.mod_change_community_visibility.id.0),
ModLockPost(v) => ('M', v.mod_lock_post.id.0),
ModRemoveComment(v) => ('N', v.mod_remove_comment.id.0),
ModRemoveCommunity(v) => ('O', v.mod_remove_community.id.0),
AdminRemoveCommunity(v) => ('O', v.admin_remove_community.id.0),
ModRemovePost(v) => ('P', v.mod_remove_post.id.0),
ModTransferCommunity(v) => ('Q', v.mod_transfer_community.id.0),
};
@ -271,15 +271,15 @@ impl PaginationCursorBuilder for ModlogCombinedView {
'D' => query.filter(modlog_combined::admin_purge_community_id.eq(id)),
'E' => query.filter(modlog_combined::admin_purge_person_id.eq(id)),
'F' => query.filter(modlog_combined::admin_purge_post_id.eq(id)),
'G' => query.filter(modlog_combined::mod_add_id.eq(id)),
'H' => query.filter(modlog_combined::mod_add_community_id.eq(id)),
'I' => query.filter(modlog_combined::mod_ban_id.eq(id)),
'G' => query.filter(modlog_combined::admin_add_id.eq(id)),
'H' => query.filter(modlog_combined::mod_add_to_community_id.eq(id)),
'I' => query.filter(modlog_combined::admin_ban_id.eq(id)),
'J' => query.filter(modlog_combined::mod_ban_from_community_id.eq(id)),
'K' => query.filter(modlog_combined::mod_feature_post_id.eq(id)),
'L' => query.filter(modlog_combined::mod_change_community_visibility_id.eq(id)),
'M' => query.filter(modlog_combined::mod_lock_post_id.eq(id)),
'N' => query.filter(modlog_combined::mod_remove_comment_id.eq(id)),
'O' => query.filter(modlog_combined::mod_remove_community_id.eq(id)),
'O' => query.filter(modlog_combined::admin_remove_community_id.eq(id)),
'P' => query.filter(modlog_combined::mod_remove_post_id.eq(id)),
'Q' => query.filter(modlog_combined::mod_transfer_community_id.eq(id)),
_ => return Err(LemmyErrorType::CouldntParsePaginationToken.into()),
@ -349,16 +349,18 @@ impl ModlogCombinedQuery<'_> {
ModLockPost => query.filter(modlog_combined::mod_lock_post_id.is_not_null()),
ModFeaturePost => query.filter(modlog_combined::mod_feature_post_id.is_not_null()),
ModRemoveComment => query.filter(modlog_combined::mod_remove_comment_id.is_not_null()),
ModRemoveCommunity => query.filter(modlog_combined::mod_remove_community_id.is_not_null()),
AdminRemoveCommunity => {
query.filter(modlog_combined::admin_remove_community_id.is_not_null())
}
ModBanFromCommunity => {
query.filter(modlog_combined::mod_ban_from_community_id.is_not_null())
}
ModAddCommunity => query.filter(modlog_combined::mod_add_community_id.is_not_null()),
ModAddToCommunity => query.filter(modlog_combined::mod_add_to_community_id.is_not_null()),
ModTransferCommunity => {
query.filter(modlog_combined::mod_transfer_community_id.is_not_null())
}
ModAdd => query.filter(modlog_combined::mod_add_id.is_not_null()),
ModBan => query.filter(modlog_combined::mod_ban_id.is_not_null()),
AdminAdd => query.filter(modlog_combined::admin_add_id.is_not_null()),
AdminBan => query.filter(modlog_combined::admin_ban_id.is_not_null()),
ModChangeCommunityVisibility => {
query.filter(modlog_combined::mod_change_community_visibility_id.is_not_null())
}
@ -484,26 +486,28 @@ impl InternalToCombinedView for ModlogCombinedViewInternal {
admin: v.moderator,
community,
}))
} else if let (Some(mod_add), Some(other_person)) = (v.mod_add, v.other_person.clone()) {
Some(ModlogCombinedView::ModAdd(ModAddView {
mod_add,
} else if let (Some(admin_add), Some(other_person)) = (v.admin_add, v.other_person.clone()) {
Some(ModlogCombinedView::AdminAdd(AdminAddView {
admin_add,
moderator: v.moderator,
other_person,
}))
} else if let (Some(mod_add_community), Some(other_person), Some(community)) = (
v.mod_add_community,
} else if let (Some(mod_add_to_community), Some(other_person), Some(community)) = (
v.mod_add_to_community,
v.other_person.clone(),
v.community.clone(),
) {
Some(ModlogCombinedView::ModAddCommunity(ModAddCommunityView {
mod_add_community,
moderator: v.moderator,
other_person,
community,
}))
} else if let (Some(mod_ban), Some(other_person)) = (v.mod_ban, v.other_person.clone()) {
Some(ModlogCombinedView::ModBan(ModBanView {
mod_ban,
Some(ModlogCombinedView::ModAddToCommunity(
ModAddToCommunityView {
mod_add_to_community,
moderator: v.moderator,
other_person,
community,
},
))
} else if let (Some(admin_ban), Some(other_person)) = (v.admin_ban, v.other_person.clone()) {
Some(ModlogCombinedView::AdminBan(AdminBanView {
admin_ban,
moderator: v.moderator,
other_person,
}))
@ -577,12 +581,12 @@ impl InternalToCombinedView for ModlogCombinedViewInternal {
post,
comment,
}))
} else if let (Some(mod_remove_community), Some(community)) =
(v.mod_remove_community, v.community.clone())
} else if let (Some(admin_remove_community), Some(community)) =
(v.admin_remove_community, v.community.clone())
{
Some(ModlogCombinedView::ModRemoveCommunity(
ModRemoveCommunityView {
mod_remove_community,
Some(ModlogCombinedView::AdminRemoveCommunity(
AdminRemoveCommunityView {
admin_remove_community,
moderator: v.moderator,
community,
},
@ -622,8 +626,8 @@ impl InternalToCombinedView for ModlogCombinedViewInternal {
#[cfg(test)]
#[expect(clippy::indexing_slicing)]
mod tests {
use crate::{impls::ModlogCombinedQuery, ModlogCombinedView};
use super::*;
use crate::AdminAllowInstance;
use lemmy_db_schema::{
newtypes::PersonId,
source::{
@ -632,8 +636,11 @@ mod tests {
instance::Instance,
mod_log::{
admin::{
AdminAllowInstance,
AdminAdd,
AdminAddForm,
AdminAllowInstanceForm,
AdminBan,
AdminBanForm,
AdminBlockInstance,
AdminBlockInstanceForm,
AdminPurgeComment,
@ -644,14 +651,12 @@ mod tests {
AdminPurgePersonForm,
AdminPurgePost,
AdminPurgePostForm,
AdminRemoveCommunity,
AdminRemoveCommunityForm,
},
moderator::{
ModAdd,
ModAddCommunity,
ModAddCommunityForm,
ModAddForm,
ModBan,
ModBanForm,
ModAddToCommunity,
ModAddToCommunityForm,
ModBanFromCommunity,
ModBanFromCommunityForm,
ModChangeCommunityVisibility,
@ -662,8 +667,6 @@ mod tests {
ModLockPostForm,
ModRemoveComment,
ModRemoveCommentForm,
ModRemoveCommunity,
ModRemoveCommunityForm,
ModRemovePost,
ModRemovePostForm,
ModTransferCommunity,
@ -988,22 +991,22 @@ mod tests {
let pool = &mut pool.into();
let data = init_data(pool).await?;
let form = ModAddForm {
let form = AdminAddForm {
mod_person_id: data.timmy.id,
other_person_id: data.jessica.id,
removed: Some(false),
};
ModAdd::create(pool, &form).await?;
AdminAdd::create(pool, &form).await?;
let form = ModAddCommunityForm {
let form = ModAddToCommunityForm {
mod_person_id: data.timmy.id,
other_person_id: data.jessica.id,
community_id: data.community.id,
removed: Some(false),
};
ModAddCommunity::create(pool, &form).await?;
ModAddToCommunity::create(pool, &form).await?;
let form = ModBanForm {
let form = AdminBanForm {
mod_person_id: data.timmy.id,
other_person_id: data.jessica.id,
banned: Some(true),
@ -1011,7 +1014,7 @@ mod tests {
expires_at: None,
instance_id: data.instance.id,
};
ModBan::create(pool, &form).await?;
AdminBan::create(pool, &form).await?;
let form = ModBanFromCommunityForm {
mod_person_id: data.timmy.id,
@ -1047,13 +1050,13 @@ mod tests {
};
ModRemoveComment::create(pool, &form).await?;
let form = ModRemoveCommunityForm {
let form = AdminRemoveCommunityForm {
mod_person_id: data.timmy.id,
community_id: data.community.id,
removed: Some(true),
reason: None,
};
ModRemoveCommunity::create(pool, &form).await?;
AdminRemoveCommunity::create(pool, &form).await?;
let form = ModRemovePostForm {
mod_person_id: data.timmy.id,
@ -1164,8 +1167,8 @@ mod tests {
panic!("wrong type");
}
if let ModlogCombinedView::ModRemoveCommunity(v) = &modlog[5] {
assert_eq!(data.community.id, v.mod_remove_community.community_id);
if let ModlogCombinedView::AdminRemoveCommunity(v) = &modlog[5] {
assert_eq!(data.community.id, v.admin_remove_community.community_id);
assert_eq!(data.community.id, v.community.id);
assert_eq!(
data.timmy.id,
@ -1231,7 +1234,7 @@ mod tests {
panic!("wrong type");
}
if let ModlogCombinedView::ModBan(v) = &modlog[10] {
if let ModlogCombinedView::AdminBan(v) = &modlog[10] {
assert_eq!(
data.timmy.id,
v.moderator.as_ref().map(|a| a.id).unwrap_or(PersonId(-1))
@ -1241,8 +1244,8 @@ mod tests {
panic!("wrong type");
}
if let ModlogCombinedView::ModAddCommunity(v) = &modlog[11] {
assert_eq!(data.community.id, v.mod_add_community.community_id);
if let ModlogCombinedView::ModAddToCommunity(v) = &modlog[11] {
assert_eq!(data.community.id, v.mod_add_to_community.community_id);
assert_eq!(data.community.id, v.community.id);
assert_eq!(
data.timmy.id,
@ -1253,7 +1256,7 @@ mod tests {
panic!("wrong type");
}
if let ModlogCombinedView::ModAdd(v) = &modlog[12] {
if let ModlogCombinedView::AdminAdd(v) = &modlog[12] {
assert_eq!(
data.timmy.id,
v.moderator.as_ref().map(|a| a.id).unwrap_or(PersonId(-1))

View file

@ -4,23 +4,23 @@ use lemmy_db_schema::source::{
instance::Instance,
mod_log::{
admin::{
AdminAdd,
AdminAllowInstance,
AdminBan,
AdminBlockInstance,
AdminPurgeComment,
AdminPurgeCommunity,
AdminPurgePerson,
AdminPurgePost,
AdminRemoveCommunity,
},
moderator::{
ModAdd,
ModAddCommunity,
ModBan,
ModAddToCommunity,
ModBanFromCommunity,
ModChangeCommunityVisibility,
ModFeaturePost,
ModLockPost,
ModRemoveComment,
ModRemoveCommunity,
ModRemovePost,
ModTransferCommunity,
},
@ -47,8 +47,8 @@ pub mod impls;
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When someone is added as a community moderator.
pub struct ModAddCommunityView {
pub mod_add_community: ModAddCommunity,
pub struct ModAddToCommunityView {
pub mod_add_to_community: ModAddToCommunity,
pub moderator: Option<Person>,
pub community: Community,
pub other_person: Person,
@ -61,8 +61,8 @@ pub struct ModAddCommunityView {
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When someone is added as a site moderator.
pub struct ModAddView {
pub mod_add: ModAdd,
pub struct AdminAddView {
pub admin_add: AdminAdd,
pub moderator: Option<Person>,
pub other_person: Person,
}
@ -88,8 +88,8 @@ pub struct ModBanFromCommunityView {
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When someone is banned from the site.
pub struct ModBanView {
pub mod_ban: ModBan,
pub struct AdminBanView {
pub admin_ban: AdminBan,
pub moderator: Option<Person>,
pub other_person: Person,
}
@ -144,9 +144,9 @@ pub struct ModRemoveCommentView {
#[cfg_attr(feature = "full", diesel(check_for_backend(diesel::pg::Pg)))]
#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
#[cfg_attr(feature = "ts-rs", ts(optional_fields, export))]
/// When a moderator removes a community.
pub struct ModRemoveCommunityView {
pub mod_remove_community: ModRemoveCommunity,
/// When an admin removes a community.
pub struct AdminRemoveCommunityView {
pub admin_remove_community: AdminRemoveCommunity,
pub moderator: Option<Person>,
pub community: Community,
}
@ -290,11 +290,11 @@ pub(crate) struct ModlogCombinedViewInternal {
#[cfg_attr(feature = "full", diesel(embed))]
pub admin_purge_post: Option<AdminPurgePost>,
#[cfg_attr(feature = "full", diesel(embed))]
pub mod_add: Option<ModAdd>,
pub admin_add: Option<AdminAdd>,
#[cfg_attr(feature = "full", diesel(embed))]
pub mod_add_community: Option<ModAddCommunity>,
pub mod_add_to_community: Option<ModAddToCommunity>,
#[cfg_attr(feature = "full", diesel(embed))]
pub mod_ban: Option<ModBan>,
pub admin_ban: Option<AdminBan>,
#[cfg_attr(feature = "full", diesel(embed))]
pub mod_ban_from_community: Option<ModBanFromCommunity>,
#[cfg_attr(feature = "full", diesel(embed))]
@ -306,7 +306,7 @@ pub(crate) struct ModlogCombinedViewInternal {
#[cfg_attr(feature = "full", diesel(embed))]
pub mod_remove_comment: Option<ModRemoveComment>,
#[cfg_attr(feature = "full", diesel(embed))]
pub mod_remove_community: Option<ModRemoveCommunity>,
pub admin_remove_community: Option<AdminRemoveCommunity>,
#[cfg_attr(feature = "full", diesel(embed))]
pub mod_remove_post: Option<ModRemovePost>,
#[cfg_attr(feature = "full", diesel(embed))]
@ -345,15 +345,15 @@ pub enum ModlogCombinedView {
AdminPurgeCommunity(AdminPurgeCommunityView),
AdminPurgePerson(AdminPurgePersonView),
AdminPurgePost(AdminPurgePostView),
ModAdd(ModAddView),
ModAddCommunity(ModAddCommunityView),
ModBan(ModBanView),
AdminAdd(AdminAddView),
ModAddToCommunity(ModAddToCommunityView),
AdminBan(AdminBanView),
ModBanFromCommunity(ModBanFromCommunityView),
ModFeaturePost(ModFeaturePostView),
ModChangeCommunityVisibility(ModChangeCommunityVisibilityView),
ModLockPost(ModLockPostView),
ModRemoveComment(ModRemoveCommentView),
ModRemoveCommunity(ModRemoveCommunityView),
AdminRemoveCommunity(AdminRemoveCommunityView),
ModRemovePost(ModRemovePostView),
ModTransferCommunity(ModTransferCommunityView),
}

View file

@ -504,41 +504,41 @@ fn create_modlog_items(
&v.admin_purge_post.reason,
settings,
),
ModlogCombinedView::ModAdd(v) => build_modlog_item(
ModlogCombinedView::AdminAdd(v) => build_modlog_item(
&v.moderator,
&v.mod_add.published_at,
&v.admin_add.published_at,
&modlog_url,
&format!(
"{} admin {}",
removed_added_str(v.mod_add.removed),
removed_added_str(v.admin_add.removed),
&v.other_person.name
),
&None,
settings,
),
ModlogCombinedView::ModAddCommunity(v) => build_modlog_item(
ModlogCombinedView::ModAddToCommunity(v) => build_modlog_item(
&v.moderator,
&v.mod_add_community.published_at,
&v.mod_add_to_community.published_at,
&modlog_url,
&format!(
"{} mod {} to /c/{}",
removed_added_str(v.mod_add_community.removed),
removed_added_str(v.mod_add_to_community.removed),
&v.other_person.name,
&v.community.name
),
&None,
settings,
),
ModlogCombinedView::ModBan(v) => build_modlog_item(
ModlogCombinedView::AdminBan(v) => build_modlog_item(
&v.moderator,
&v.mod_ban.published_at,
&v.admin_ban.published_at,
&modlog_url,
&format!(
"{} {}",
banned_unbanned_str(v.mod_ban.banned),
banned_unbanned_str(v.admin_ban.banned),
&v.other_person.name
),
&v.mod_ban.reason,
&v.admin_ban.reason,
settings,
),
ModlogCombinedView::ModBanFromCommunity(v) => build_modlog_item(
@ -609,16 +609,16 @@ fn create_modlog_items(
&v.mod_remove_comment.reason,
settings,
),
ModlogCombinedView::ModRemoveCommunity(v) => build_modlog_item(
ModlogCombinedView::AdminRemoveCommunity(v) => build_modlog_item(
&v.moderator,
&v.mod_remove_community.published_at,
&v.admin_remove_community.published_at,
&modlog_url,
&format!(
"{} community /c/{}",
removed_restored_str(v.mod_remove_community.removed),
removed_restored_str(v.admin_remove_community.removed),
&v.community.name
),
&v.mod_remove_community.reason,
&v.admin_remove_community.reason,
settings,
),
ModlogCombinedView::ModRemovePost(v) => build_modlog_item(

View file

@ -0,0 +1,16 @@
ALTER TABLE admin_ban RENAME TO mod_ban;
ALTER TABLE admin_add RENAME TO mod_add;
ALTER TABLE admin_remove_community RENAME TO mod_remove_community;
ALTER TABLE mod_add_to_community RENAME TO mod_add_community;
ALTER TABLE modlog_combined RENAME COLUMN admin_ban_id TO mod_ban_id;
ALTER TABLE modlog_combined RENAME COLUMN admin_add_id TO mod_add_id;
ALTER TABLE modlog_combined RENAME COLUMN admin_remove_community_id TO mod_remove_community_id;
ALTER TABLE modlog_combined RENAME COLUMN mod_add_to_community_id TO mod_add_community_id;

View file

@ -0,0 +1,16 @@
ALTER TABLE mod_ban RENAME TO admin_ban;
ALTER TABLE mod_add RENAME TO admin_add;
ALTER TABLE mod_remove_community RENAME TO admin_remove_community;
ALTER TABLE mod_add_community RENAME TO mod_add_to_community;
ALTER TABLE modlog_combined RENAME COLUMN mod_ban_id TO admin_ban_id;
ALTER TABLE modlog_combined RENAME COLUMN mod_add_id TO admin_add_id;
ALTER TABLE modlog_combined RENAME COLUMN mod_remove_community_id TO admin_remove_community_id;
ALTER TABLE modlog_combined RENAME COLUMN mod_add_community_id TO mod_add_to_community_id;