]> Untitled Git - lemmy.git/blob - crates/db_schema/src/impls/email_verification.rs
af19bbba0d1e4c306b2e5080c2e2f86f4626ce0a
[lemmy.git] / crates / db_schema / src / impls / email_verification.rs
1 use crate::{
2   newtypes::LocalUserId,
3   schema::email_verification::dsl::{
4     email_verification,
5     local_user_id,
6     published,
7     verification_token,
8   },
9   source::email_verification::{EmailVerification, EmailVerificationForm},
10   utils::{get_conn, DbPool},
11 };
12 use diesel::{
13   dsl::{now, IntervalDsl},
14   insert_into,
15   result::Error,
16   ExpressionMethods,
17   QueryDsl,
18 };
19 use diesel_async::RunQueryDsl;
20
21 impl EmailVerification {
22   pub async fn create(pool: &DbPool, form: &EmailVerificationForm) -> Result<Self, Error> {
23     let conn = &mut get_conn(pool).await?;
24     insert_into(email_verification)
25       .values(form)
26       .get_result::<Self>(conn)
27       .await
28   }
29
30   pub async fn read_for_token(pool: &DbPool, token: &str) -> Result<Self, Error> {
31     let conn = &mut get_conn(pool).await?;
32     email_verification
33       .filter(verification_token.eq(token))
34       .filter(published.gt(now - 7.days()))
35       .first::<Self>(conn)
36       .await
37   }
38   pub async fn delete_old_tokens_for_local_user(
39     pool: &DbPool,
40     local_user_id_: LocalUserId,
41   ) -> Result<usize, Error> {
42     let conn = &mut get_conn(pool).await?;
43     diesel::delete(email_verification.filter(local_user_id.eq(local_user_id_)))
44       .execute(conn)
45       .await
46   }
47 }