]> Untitled Git - lemmy.git/blob - crates/db_schema/src/impls/local_site_rate_limit.rs
b1af5f869193bf097d3dad3c1d211d90806c2514
[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: &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(pool: &DbPool, form: &LocalSiteRateLimitInsertForm) -> Result<Self, Error> {
20     let conn = &mut get_conn(pool).await?;
21     insert_into(local_site_rate_limit::table)
22       .values(form)
23       .get_result::<Self>(conn)
24       .await
25   }
26   pub async fn update(pool: &DbPool, form: &LocalSiteRateLimitUpdateForm) -> Result<(), Error> {
27     // avoid error "There are no changes to save. This query cannot be built"
28     if form.is_empty() {
29       return Ok(());
30     }
31     let conn = &mut get_conn(pool).await?;
32     diesel::update(local_site_rate_limit::table)
33       .set(form)
34       .get_result::<Self>(conn)
35       .await?;
36     Ok(())
37   }
38 }
39
40 impl LocalSiteRateLimitUpdateForm {
41   fn is_empty(&self) -> bool {
42     self.message.is_none()
43       && self.message_per_second.is_none()
44       && self.post.is_none()
45       && self.post_per_second.is_none()
46       && self.register.is_none()
47       && self.register_per_second.is_none()
48       && self.image.is_none()
49       && self.image_per_second.is_none()
50       && self.comment.is_none()
51       && self.comment_per_second.is_none()
52       && self.search.is_none()
53       && self.search_per_second.is_none()
54       && self.updated.is_none()
55   }
56 }