use crate::schema::{DatabaseError, DbConn}; use chrono::DateTime; use chrono::Utc; use diesel::{QueryDsl, RunQueryDsl, ExpressionMethods}; use serde::{Deserialize, Serialize}; use uuid::Uuid; table! { registration_tokens (id) { id -> diesel::sql_types::Uuid, token -> Char, single_use -> Bool, expires -> Nullable, } } #[derive(Serialize, Deserialize, Debug, Insertable, Queryable)] #[table_name = "registration_tokens"] pub struct RegistrationToken { pub id: Uuid, pub token: String, pub single_use: bool, pub expires: Option>, } pub async fn get_all_registration_tokens( conn: &DbConn, ) -> Result, DatabaseError> { Ok(conn .run(|c| registration_tokens::table.load::(c)) .await?) } pub async fn add_registration_token( conn: &DbConn, token: RegistrationToken, ) -> Result { Ok(conn .run(|c| { diesel::insert_into(registration_tokens::table) .values(token) .execute(c) }) .await?) } pub async fn delete_registration_token(conn: &DbConn, id: Uuid) -> Result { Ok(conn .run(move |c| { diesel::delete(registration_tokens::table.filter(registration_tokens::id.eq(id))) .execute(c) }) .await?) }