]> Untitled Git - lemmy.git/blob - crates/db_schema/src/impls/registration_application.rs
208b01d01edf8f280cb0e20bcda79f96ad7f54f4
[lemmy.git] / crates / db_schema / src / impls / registration_application.rs
1 use crate::{
2   newtypes::LocalUserId,
3   schema::registration_application::dsl::{local_user_id, registration_application},
4   source::registration_application::{
5     RegistrationApplication,
6     RegistrationApplicationInsertForm,
7     RegistrationApplicationUpdateForm,
8   },
9   traits::Crud,
10   utils::{get_conn, DbPool},
11 };
12 use diesel::{insert_into, result::Error, ExpressionMethods, QueryDsl};
13 use diesel_async::RunQueryDsl;
14
15 #[async_trait]
16 impl Crud for RegistrationApplication {
17   type InsertForm = RegistrationApplicationInsertForm;
18   type UpdateForm = RegistrationApplicationUpdateForm;
19   type IdType = i32;
20
21   async fn create(pool: &DbPool, form: &Self::InsertForm) -> Result<Self, Error> {
22     let conn = &mut get_conn(pool).await?;
23     insert_into(registration_application)
24       .values(form)
25       .get_result::<Self>(conn)
26       .await
27   }
28
29   async fn read(pool: &DbPool, id_: Self::IdType) -> Result<Self, Error> {
30     let conn = &mut get_conn(pool).await?;
31     registration_application.find(id_).first::<Self>(conn).await
32   }
33
34   async fn update(
35     pool: &DbPool,
36     id_: Self::IdType,
37     form: &Self::UpdateForm,
38   ) -> Result<Self, Error> {
39     let conn = &mut get_conn(pool).await?;
40     diesel::update(registration_application.find(id_))
41       .set(form)
42       .get_result::<Self>(conn)
43       .await
44   }
45
46   async fn delete(pool: &DbPool, id_: Self::IdType) -> Result<usize, Error> {
47     let conn = &mut get_conn(pool).await?;
48     diesel::delete(registration_application.find(id_))
49       .execute(conn)
50       .await
51   }
52 }
53
54 impl RegistrationApplication {
55   pub async fn find_by_local_user_id(
56     pool: &DbPool,
57     local_user_id_: LocalUserId,
58   ) -> Result<Self, Error> {
59     let conn = &mut get_conn(pool).await?;
60     registration_application
61       .filter(local_user_id.eq(local_user_id_))
62       .first::<Self>(conn)
63       .await
64   }
65 }