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