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 for_community(pool: &DbPool, community_id: CommunityId) -> Result<Vec<Self>, Error> {
+ pub async fn is_community_moderator(
+ pool: &mut 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: &mut DbPool<'_>,
+ community_id: CommunityId,
+ ) -> Result<Vec<Self>, Error> {
let conn = &mut get_conn(pool).await?;
let res = community_moderator::table
.inner_join(community::table)
Ok(res.into_iter().map(Self::from_tuple).collect())
}
- pub async fn for_person(pool: &DbPool, person_id: PersonId) -> Result<Vec<Self>, Error> {
+ pub async fn for_person(pool: &mut DbPool<'_>, person_id: PersonId) -> Result<Vec<Self>, Error> {
let conn = &mut get_conn(pool).await?;
let res = community_moderator::table
.inner_join(community::table)
/// Finds all communities first mods / creators
/// Ideally this should be a group by, but diesel doesn't support it yet
- pub async fn get_community_first_mods(pool: &DbPool) -> Result<Vec<Self>, Error> {
+ pub async fn get_community_first_mods(pool: &mut DbPool<'_>) -> Result<Vec<Self>, Error> {
let conn = &mut get_conn(pool).await?;
let res = community_moderator::table
.inner_join(community::table)