]> Untitled Git - lemmy.git/blob - crates/db_views/src/site_view.rs
Fixing hot_ranks and scores to append a published sort. (#3618)
[lemmy.git] / crates / db_views / src / site_view.rs
1 use crate::structs::SiteView;
2 use diesel::{result::Error, ExpressionMethods, JoinOnDsl, QueryDsl};
3 use diesel_async::RunQueryDsl;
4 use lemmy_db_schema::{
5   aggregates::structs::SiteAggregates,
6   schema::{local_site, local_site_rate_limit, site, site_aggregates},
7   source::{local_site::LocalSite, local_site_rate_limit::LocalSiteRateLimit, site::Site},
8   utils::{get_conn, DbPool},
9 };
10
11 impl SiteView {
12   pub async fn read_local(pool: &mut DbPool<'_>) -> Result<Self, Error> {
13     let conn = &mut get_conn(pool).await?;
14     let (mut site, local_site, local_site_rate_limit, counts) = site::table
15       .inner_join(local_site::table)
16       .inner_join(
17         local_site_rate_limit::table.on(local_site::id.eq(local_site_rate_limit::local_site_id)),
18       )
19       .inner_join(site_aggregates::table)
20       .select((
21         site::all_columns,
22         local_site::all_columns,
23         local_site_rate_limit::all_columns,
24         site_aggregates::all_columns,
25       ))
26       .first::<(Site, LocalSite, LocalSiteRateLimit, SiteAggregates)>(conn)
27       .await?;
28
29     site.private_key = None;
30     Ok(SiteView {
31       site,
32       local_site,
33       local_site_rate_limit,
34       counts,
35     })
36   }
37 }