activation_code_repository.rs
1 use crate::db::DB; 2 use crate::models::activation_code::ActivationCode; 3 use crate::util::accounts_error::AccountsResult; 4 use sqlx::types::uuid::Uuid; 5 use sqlx::Transaction; 6 7 pub async fn insert( 8 transaction: &mut Transaction<'_, DB>, 9 login_details: Uuid, 10 ) -> AccountsResult<ActivationCode> { 11 Ok(sqlx::query_as!( 12 ActivationCode, 13 " 14 INSERT INTO activation_code (login_details) 15 VALUES ($1 ) 16 RETURNING id, login_details, code, created_at, modified_at 17 ", 18 login_details 19 ) 20 .fetch_one(&mut **transaction) 21 .await?) 22 } 23 24 pub async fn delete_outdated( 25 transaction: &mut Transaction<'_, DB>, 26 lifetime_minutes: u64, 27 ) -> AccountsResult<Vec<ActivationCode>> { 28 Ok(sqlx::query_as!( 29 ActivationCode, 30 " 31 DELETE 32 FROM activation_code 33 WHERE created_at + ($1 * interval '1 minute') < NOW() 34 RETURNING id, login_details, code, created_at, modified_at 35 ", 36 lifetime_minutes as f64 37 ) 38 .fetch_all(&mut **transaction) 39 .await?) 40 } 41 42 pub async fn get_by_login_details_and_code( 43 transaction: &mut Transaction<'_, DB>, 44 login_details: Uuid, 45 code: Uuid, 46 ) -> AccountsResult<Option<ActivationCode>> { 47 Ok(sqlx::query_as!( 48 ActivationCode, 49 " 50 SELECT id, login_details, code, created_at, modified_at 51 FROM activation_code 52 WHERE 53 login_details = $1 AND 54 code = $2 55 ", 56 login_details, 57 code 58 ) 59 .fetch_optional(&mut **transaction) 60 .await?) 61 } 62 63 pub async fn delete( 64 transaction: &mut Transaction<'_, DB>, 65 login_details: Uuid, 66 ) -> AccountsResult<()> { 67 sqlx::query_as!( 68 ActivationCode, 69 " 70 DELETE 71 FROM activation_code 72 WHERE login_details = $1 73 ", 74 login_details 75 ) 76 .execute(&mut **transaction) 77 .await?; 78 Ok(()) 79 }