55 lines
1.4 KiB
Rust
55 lines
1.4 KiB
Rust
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<Timestamptz>,
|
|
}
|
|
}
|
|
|
|
#[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<DateTime<Utc>>,
|
|
}
|
|
|
|
pub async fn get_all_registration_tokens(
|
|
conn: &DbConn,
|
|
) -> Result<Vec<RegistrationToken>, DatabaseError> {
|
|
Ok(conn
|
|
.run(|c| registration_tokens::table.load::<RegistrationToken>(c))
|
|
.await?)
|
|
}
|
|
|
|
pub async fn add_registration_token(
|
|
conn: &DbConn,
|
|
token: RegistrationToken,
|
|
) -> Result<usize, DatabaseError> {
|
|
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<usize, DatabaseError> {
|
|
Ok(conn
|
|
.run(move |c| {
|
|
diesel::delete(registration_tokens::table.filter(registration_tokens::id.eq(id)))
|
|
.execute(c)
|
|
})
|
|
.await?)
|
|
}
|