]> Untitled Git - lemmy.git/blob - crates/db_views/src/site_view.rs
Merge crates db_schema and db_queries
[lemmy.git] / crates / db_views / src / site_view.rs
1 use diesel::{result::Error, *};
2 use lemmy_db_schema::{
3   aggregates::site_aggregates::SiteAggregates,
4   schema::{person, site, site_aggregates},
5   source::{
6     person::{Person, PersonSafe},
7     site::Site,
8   },
9   traits::ToSafe,
10 };
11 use serde::{Deserialize, Serialize};
12
13 #[derive(Debug, Serialize, Deserialize, Clone)]
14 pub struct SiteView {
15   pub site: Site,
16   pub creator: PersonSafe,
17   pub counts: SiteAggregates,
18 }
19
20 impl SiteView {
21   pub fn read(conn: &PgConnection) -> Result<Self, Error> {
22     let (site, creator, counts) = site::table
23       .inner_join(person::table)
24       .inner_join(site_aggregates::table)
25       .select((
26         site::all_columns,
27         Person::safe_columns_tuple(),
28         site_aggregates::all_columns,
29       ))
30       .first::<(Site, PersonSafe, SiteAggregates)>(conn)?;
31
32     Ok(SiteView {
33       site,
34       creator,
35       counts,
36     })
37   }
38 }