Skip to content
Clone
030e59e
111 lines 3.4 KB Rust
use serde::{Deserialize, Serialize};
use time::format_description::well_known::Rfc3339;
use utoipa::ToSchema;
use uuid::Uuid;
#[derive(Debug, Clone, Copy, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum EmailChangeTicketStatus {
Pending,
Verified,
Completed,
Cancelled,
}
impl From<db::user::user_email_change_tickets::EmailChangeTicketStatus>
for EmailChangeTicketStatus
{
fn from(s: db::user::user_email_change_tickets::EmailChangeTicketStatus) -> Self {
use db::user::user_email_change_tickets::EmailChangeTicketStatus as Db;
match s {
Db::Pending => EmailChangeTicketStatus::Pending,
Db::Verified => EmailChangeTicketStatus::Verified,
Db::Completed => EmailChangeTicketStatus::Completed,
Db::Cancelled => EmailChangeTicketStatus::Cancelled,
}
}
}
impl From<EmailChangeTicketStatus>
for db::user::user_email_change_tickets::EmailChangeTicketStatus
{
fn from(s: EmailChangeTicketStatus) -> Self {
use db::user::user_email_change_tickets::EmailChangeTicketStatus as Db;
match s {
EmailChangeTicketStatus::Pending => Db::Pending,
EmailChangeTicketStatus::Verified => Db::Verified,
EmailChangeTicketStatus::Completed => Db::Completed,
EmailChangeTicketStatus::Cancelled => Db::Cancelled,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct EmailView {
pub id: Uuid,
pub email: String,
pub is_activated: bool,
pub is_primary: bool,
pub activated_at: Option<String>,
pub created_at: String,
pub updated_at: String,
}
impl From<db::user::user_emails::Model> for EmailView {
fn from(m: db::user::user_emails::Model) -> Self {
Self {
id: m.id,
email: m.email,
is_activated: m.is_activated,
is_primary: m.is_primary,
activated_at: m
.activated_at
.map(|t| t.format(&Rfc3339).unwrap_or_default()),
created_at: m.created_at.format(&Rfc3339).unwrap_or_default(),
updated_at: m.updated_at.format(&Rfc3339).unwrap_or_default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct AddEmailCmd {
pub email: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct AddEmailResp {
pub email_id: Uuid,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct SetPrimaryEmailResp {
pub email: EmailView,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct EmailChangeTicketView {
pub id: Uuid,
pub new_email: String,
pub status: EmailChangeTicketStatus,
pub expires_at: String,
pub created_at: String,
pub used_at: Option<String>,
}
impl From<db::user::user_email_change_tickets::Model> for EmailChangeTicketView {
fn from(m: db::user::user_email_change_tickets::Model) -> Self {
Self {
id: m.id,
new_email: m.new_email,
status: m.status.into(),
expires_at: m.expires_at.format(&Rfc3339).unwrap_or_default(),
created_at: m.created_at.format(&Rfc3339).unwrap_or_default(),
used_at: m.used_at.map(|t| t.format(&Rfc3339).unwrap_or_default()),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct ConfirmEmailChangeCmd {
pub ticket_id: Uuid,
}