Starting to work on community view
This commit is contained in:
parent
2d4099577f
commit
88d7b0a83c
4 changed files with 67 additions and 2 deletions
|
@ -5,7 +5,7 @@ use crate::{
|
|||
use diesel::{dsl::*, result::Error, *};
|
||||
use serde::Serialize;
|
||||
|
||||
#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize)]
|
||||
#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Clone)]
|
||||
#[table_name = "category"]
|
||||
pub struct Category {
|
||||
pub id: i32,
|
||||
|
|
|
@ -7,8 +7,9 @@ use crate::{
|
|||
Joinable,
|
||||
};
|
||||
use diesel::{dsl::*, result::Error, *};
|
||||
use serde::Serialize;
|
||||
|
||||
#[derive(Clone, Queryable, Identifiable, PartialEq, Debug)]
|
||||
#[derive(Clone, Queryable, Identifiable, PartialEq, Debug, Serialize)]
|
||||
#[table_name = "community"]
|
||||
pub struct Community {
|
||||
pub id: i32,
|
||||
|
|
61
lemmy_db/src/views/community_view.rs
Normal file
61
lemmy_db/src/views/community_view.rs
Normal file
|
@ -0,0 +1,61 @@
|
|||
use crate::{
|
||||
category::Category,
|
||||
community::{Community, CommunityFollower},
|
||||
schema::{category, community, community_follower, user_},
|
||||
user::{UserSafe, User_},
|
||||
};
|
||||
use diesel::{result::Error, *};
|
||||
use serde::Serialize;
|
||||
|
||||
#[derive(Debug, Serialize, Clone)]
|
||||
pub struct CommunityView {
|
||||
pub community: Community,
|
||||
pub creator: UserSafe,
|
||||
pub category: Category,
|
||||
pub subscribed: bool,
|
||||
}
|
||||
|
||||
// creator_actor_id -> Text,
|
||||
// creator_local -> Bool,
|
||||
// creator_name -> Varchar,
|
||||
// creator_preferred_username -> Nullable<Varchar>,
|
||||
// creator_avatar -> Nullable<Text>,
|
||||
// category_name -> Varchar,
|
||||
// number_of_subscribers -> BigInt,
|
||||
// number_of_posts -> BigInt,
|
||||
// number_of_comments -> BigInt,
|
||||
// hot_rank -> Int4,
|
||||
// user_id -> Nullable<Int4>,
|
||||
// subscribed -> Nullable<Bool>,
|
||||
|
||||
impl CommunityView {
|
||||
pub fn read(
|
||||
conn: &PgConnection,
|
||||
community_id: i32,
|
||||
my_user_id: Option<i32>,
|
||||
) -> Result<Self, Error> {
|
||||
let subscribed = match my_user_id {
|
||||
Some(user_id) => {
|
||||
let res = community_follower::table
|
||||
.filter(community_follower::community_id.eq(community_id))
|
||||
.filter(community_follower::user_id.eq(user_id))
|
||||
.get_result::<CommunityFollower>(conn);
|
||||
res.is_ok()
|
||||
}
|
||||
None => false,
|
||||
};
|
||||
|
||||
let (community, creator, category) = community::table
|
||||
.find(community_id)
|
||||
.inner_join(user_::table)
|
||||
.inner_join(category::table)
|
||||
.first::<(Community, User_, Category)>(conn)?;
|
||||
|
||||
Ok(CommunityView {
|
||||
community,
|
||||
creator: creator.to_safe(),
|
||||
category,
|
||||
subscribed,
|
||||
})
|
||||
}
|
||||
}
|
|
@ -1,2 +1,5 @@
|
|||
pub mod community_view;
|
||||
pub mod site_view;
|
||||
pub mod user_view;
|
||||
|
||||
// TODO Every single aggregate trigger is likely broken, you need to test every one of these out
|
||||
|
|
Loading…
Reference in a new issue