]> Untitled Git - lemmy.git/blob - crates/db_schema/src/impls/local_site_rate_limit.rs
0c9e96e0b45e0e600ad0c97f45b28b78f75587bb
[lemmy.git] / crates / db_schema / src / impls / local_site_rate_limit.rs
1 use crate::{
2   schema::local_site_rate_limit,
3   source::local_site_rate_limit::{
4     LocalSiteRateLimit,
5     LocalSiteRateLimitInsertForm,
6     LocalSiteRateLimitUpdateForm,
7   },
8   utils::{get_conn, DbPool},
9 };
10 use diesel::{dsl::insert_into, result::Error};
11 use diesel_async::RunQueryDsl;
12
13 impl LocalSiteRateLimit {
14   pub async fn read(pool: &mut DbPool<'_>) -> Result<Self, Error> {
15     let conn = &mut get_conn(pool).await?;
16     local_site_rate_limit::table.first::<Self>(conn).await
17   }
18
19   pub async fn create(
20     pool: &mut DbPool<'_>,
21     form: &LocalSiteRateLimitInsertForm,
22   ) -> Result<Self, Error> {
23     let conn = &mut get_conn(pool).await?;
24     insert_into(local_site_rate_limit::table)
25       .values(form)
26       .get_result::<Self>(conn)
27       .await
28   }
29   pub async fn update(
30     pool: &mut DbPool<'_>,
31     form: &LocalSiteRateLimitUpdateForm,
32   ) -> Result<(), Error> {
33     // avoid error "There are no changes to save. This query cannot be built"
34     if form.is_empty() {
35       return Ok(());
36     }
37     let conn = &mut get_conn(pool).await?;
38     diesel::update(local_site_rate_limit::table)
39       .set(form)
40       .get_result::<Self>(conn)
41       .await?;
42     Ok(())
43   }
44 }
45
46 impl LocalSiteRateLimitUpdateForm {
47   fn is_empty(&self) -> bool {
48     self.message.is_none()
49       && self.message_per_second.is_none()
50       && self.post.is_none()
51       && self.post_per_second.is_none()
52       && self.register.is_none()
53       && self.register_per_second.is_none()
54       && self.image.is_none()
55       && self.image_per_second.is_none()
56       && self.comment.is_none()
57       && self.comment_per_second.is_none()
58       && self.search.is_none()
59       && self.search_per_second.is_none()
60       && self.updated.is_none()
61   }
62 }