]> Untitled Git - lemmy.git/blob - crates/db_schema/src/impls/private_message_report.rs
Add diesel_async, get rid of blocking function (#2510)
[lemmy.git] / crates / db_schema / src / impls / private_message_report.rs
1 use crate::{
2   newtypes::{PersonId, PrivateMessageReportId},
3   schema::private_message_report::dsl::*,
4   source::private_message_report::{PrivateMessageReport, PrivateMessageReportForm},
5   traits::Reportable,
6   utils::{get_conn, naive_now, DbPool},
7 };
8 use diesel::{dsl::*, result::Error, *};
9 use diesel_async::RunQueryDsl;
10
11 #[async_trait]
12 impl Reportable for PrivateMessageReport {
13   type Form = PrivateMessageReportForm;
14   type IdType = PrivateMessageReportId;
15
16   async fn report(pool: &DbPool, pm_report_form: &PrivateMessageReportForm) -> Result<Self, Error> {
17     let conn = &mut get_conn(pool).await?;
18     insert_into(private_message_report)
19       .values(pm_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(private_message_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(private_message_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 }