use crate::structs::CommunityModeratorView;
-use diesel::{result::Error, ExpressionMethods, QueryDsl};
+use diesel::{dsl::exists, result::Error, select, ExpressionMethods, QueryDsl};
use diesel_async::RunQueryDsl;
use lemmy_db_schema::{
newtypes::{CommunityId, PersonId},
type CommunityModeratorViewTuple = (Community, Person);
impl CommunityModeratorView {
+ pub async fn is_community_moderator(
+ pool: &DbPool,
+ find_community_id: CommunityId,
+ find_person_id: PersonId,
+ ) -> Result<bool, Error> {
+ use lemmy_db_schema::schema::community_moderator::dsl::{
+ community_id,
+ community_moderator,
+ person_id,
+ };
+ let conn = &mut get_conn(pool).await?;
+ select(exists(
+ community_moderator
+ .filter(community_id.eq(find_community_id))
+ .filter(person_id.eq(find_person_id)),
+ ))
+ .get_result::<bool>(conn)
+ .await
+ }
pub async fn for_community(pool: &DbPool, community_id: CommunityId) -> Result<Vec<Self>, Error> {
let conn = &mut get_conn(pool).await?;
let res = community_moderator::table
.inner_join(community::table)
.inner_join(person::table)
- .select((community::all_columns, person::all_columns))
.filter(community_moderator::community_id.eq(community_id))
+ .select((community::all_columns, person::all_columns))
.order_by(community_moderator::published)
.load::<CommunityModeratorViewTuple>(conn)
.await?;
let res = community_moderator::table
.inner_join(community::table)
.inner_join(person::table)
- .select((community::all_columns, person::all_columns))
.filter(community_moderator::person_id.eq(person_id))
.filter(community::deleted.eq(false))
.filter(community::removed.eq(false))
- .order_by(community_moderator::published)
+ .select((community::all_columns, person::all_columns))
.load::<CommunityModeratorViewTuple>(conn)
.await?;