X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_views_actor%2Fsrc%2Fcommunity_moderator_view.rs;h=70e799b85af852216851c0fcd294a79074a849fa;hb=985fe24669d3fdeecc0aa76cc74dd6570cbad5c8;hp=e9e6625c7a8be71aaff0a43c6a963bb548c24270;hpb=48f187188bce9f5fa1ac8ee09615540ee4df8540;p=lemmy.git diff --git a/crates/db_views_actor/src/community_moderator_view.rs b/crates/db_views_actor/src/community_moderator_view.rs index e9e6625c..70e799b8 100644 --- a/crates/db_views_actor/src/community_moderator_view.rs +++ b/crates/db_views_actor/src/community_moderator_view.rs @@ -4,15 +4,12 @@ use diesel_async::RunQueryDsl; use lemmy_db_schema::{ newtypes::{CommunityId, PersonId}, schema::{community, community_moderator, person}, - source::{ - community::{Community, CommunitySafe}, - person::{Person, PersonSafe}, - }, - traits::{ToSafe, ViewToVec}, + source::{community::Community, person::Person}, + traits::JoinView, utils::{get_conn, DbPool}, }; -type CommunityModeratorViewTuple = (CommunitySafe, PersonSafe); +type CommunityModeratorViewTuple = (Community, Person); impl CommunityModeratorView { pub async fn for_community(pool: &DbPool, community_id: CommunityId) -> Result, Error> { @@ -20,16 +17,13 @@ impl CommunityModeratorView { let res = community_moderator::table .inner_join(community::table) .inner_join(person::table) - .select(( - Community::safe_columns_tuple(), - Person::safe_columns_tuple(), - )) + .select((community::all_columns, person::all_columns)) .filter(community_moderator::community_id.eq(community_id)) .order_by(community_moderator::published) .load::(conn) .await?; - Ok(Self::from_tuple_to_vec(res)) + Ok(res.into_iter().map(Self::from_tuple).collect()) } pub async fn for_person(pool: &DbPool, person_id: PersonId) -> Result, Error> { @@ -37,10 +31,7 @@ impl CommunityModeratorView { let res = community_moderator::table .inner_join(community::table) .inner_join(person::table) - .select(( - Community::safe_columns_tuple(), - Person::safe_columns_tuple(), - )) + .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)) @@ -48,7 +39,7 @@ impl CommunityModeratorView { .load::(conn) .await?; - Ok(Self::from_tuple_to_vec(res)) + Ok(res.into_iter().map(Self::from_tuple).collect()) } /// Finds all communities first mods / creators @@ -58,10 +49,7 @@ impl CommunityModeratorView { let res = community_moderator::table .inner_join(community::table) .inner_join(person::table) - .select(( - Community::safe_columns_tuple(), - Person::safe_columns_tuple(), - )) + .select((community::all_columns, person::all_columns)) // A hacky workaround instead of group_bys // https://stackoverflow.com/questions/24042359/how-to-join-only-one-row-in-joined-table-with-postgres .distinct_on(community_moderator::community_id) @@ -72,19 +60,16 @@ impl CommunityModeratorView { .load::(conn) .await?; - Ok(Self::from_tuple_to_vec(res)) + Ok(res.into_iter().map(Self::from_tuple).collect()) } } -impl ViewToVec for CommunityModeratorView { - type DbTuple = CommunityModeratorViewTuple; - fn from_tuple_to_vec(items: Vec) -> Vec { - items - .into_iter() - .map(|a| Self { - community: a.0, - moderator: a.1, - }) - .collect::>() +impl JoinView for CommunityModeratorView { + type JoinTuple = CommunityModeratorViewTuple; + fn from_tuple(a: Self::JoinTuple) -> Self { + Self { + community: a.0, + moderator: a.1, + } } }