]> Untitled Git - lemmy.git/blob - crates/db_schema/src/impls/post_report.rs
Add diesel_async, get rid of blocking function (#2510)
[lemmy.git] / crates / db_schema / src / impls / post_report.rs
1 use crate::{
2   newtypes::{PersonId, PostReportId},
3   schema::post_report::dsl::*,
4   source::post_report::*,
5   traits::Reportable,
6   utils::{get_conn, naive_now, DbPool},
7 };
8 use diesel::{dsl::*, result::Error, ExpressionMethods, QueryDsl};
9 use diesel_async::RunQueryDsl;
10
11 #[async_trait]
12 impl Reportable for PostReport {
13   type Form = PostReportForm;
14   type IdType = PostReportId;
15
16   async fn report(pool: &DbPool, post_report_form: &PostReportForm) -> Result<Self, Error> {
17     let conn = &mut get_conn(pool).await?;
18     insert_into(post_report)
19       .values(post_report_form)
20       .get_result::<Self>(conn)
21       .await
22   }
23
24   async fn resolve(
25     pool: &DbPool,
26     report_id: Self::IdType,
27     by_resolver_id: PersonId,
28   ) -> Result<usize, Error> {
29     let conn = &mut get_conn(pool).await?;
30     update(post_report.find(report_id))
31       .set((
32         resolved.eq(true),
33         resolver_id.eq(by_resolver_id),
34         updated.eq(naive_now()),
35       ))
36       .execute(conn)
37       .await
38   }
39
40   async fn unresolve(
41     pool: &DbPool,
42     report_id: Self::IdType,
43     by_resolver_id: PersonId,
44   ) -> Result<usize, Error> {
45     let conn = &mut get_conn(pool).await?;
46     update(post_report.find(report_id))
47       .set((
48         resolved.eq(false),
49         resolver_id.eq(by_resolver_id),
50         updated.eq(naive_now()),
51       ))
52       .execute(conn)
53       .await
54   }
55 }