X-Git-Url: http://these/git/?a=blobdiff_plain;f=crates%2Fdb_views_actor%2Fsrc%2Fcommunity_follower_view.rs;h=ccc7ae706790f7df35a6ad19beb4d42905293b15;hb=985fe24669d3fdeecc0aa76cc74dd6570cbad5c8;hp=337c28cd073db5cdc1992221acc133b60e96e8ca;hpb=c88722983e5c61a2c72075d0303a40618843a7d1;p=lemmy.git diff --git a/crates/db_views_actor/src/community_follower_view.rs b/crates/db_views_actor/src/community_follower_view.rs index 337c28cd..ccc7ae70 100644 --- a/crates/db_views_actor/src/community_follower_view.rs +++ b/crates/db_views_actor/src/community_follower_view.rs @@ -1,63 +1,54 @@ -use diesel::{result::Error, *}; -use lemmy_db_queries::{ToSafe, ViewToVec}; +use crate::structs::CommunityFollowerView; +use diesel::{result::Error, ExpressionMethods, QueryDsl}; +use diesel_async::RunQueryDsl; use lemmy_db_schema::{ + newtypes::{CommunityId, PersonId}, schema::{community, community_follower, person}, - source::{ - community::{Community, CommunitySafe}, - person::{Person, PersonSafe}, - }, + source::{community::Community, person::Person}, + traits::JoinView, + utils::{get_conn, DbPool}, }; -use serde::Serialize; -#[derive(Debug, Serialize, Clone)] -pub struct CommunityFollowerView { - pub community: CommunitySafe, - pub follower: PersonSafe, -} - -type CommunityFollowerViewTuple = (CommunitySafe, PersonSafe); +type CommunityFollowerViewTuple = (Community, Person); impl CommunityFollowerView { - pub fn for_community(conn: &PgConnection, community_id: i32) -> Result, Error> { + pub async fn for_community(pool: &DbPool, community_id: CommunityId) -> Result, Error> { + let conn = &mut get_conn(pool).await?; let res = community_follower::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_follower::community_id.eq(community_id)) - .order_by(community_follower::published) - .load::(conn)?; + .order_by(community::title) + .load::(conn) + .await?; - Ok(Self::from_tuple_to_vec(res)) + Ok(res.into_iter().map(Self::from_tuple).collect()) } - pub fn for_person(conn: &PgConnection, person_id: i32) -> Result, Error> { + pub async fn for_person(pool: &DbPool, person_id: PersonId) -> Result, Error> { + let conn = &mut get_conn(pool).await?; let res = community_follower::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_follower::person_id.eq(person_id)) - .order_by(community_follower::published) - .load::(conn)?; + .filter(community::deleted.eq(false)) + .filter(community::removed.eq(false)) + .order_by(community::title) + .load::(conn) + .await?; - Ok(Self::from_tuple_to_vec(res)) + Ok(res.into_iter().map(Self::from_tuple).collect()) } } -impl ViewToVec for CommunityFollowerView { - type DbTuple = CommunityFollowerViewTuple; - fn from_tuple_to_vec(items: Vec) -> Vec { - items - .iter() - .map(|a| Self { - community: a.0.to_owned(), - follower: a.1.to_owned(), - }) - .collect::>() +impl JoinView for CommunityFollowerView { + type JoinTuple = CommunityFollowerViewTuple; + fn from_tuple(a: Self::JoinTuple) -> Self { + Self { + community: a.0, + follower: a.1, + } } }