summaryrefslogtreecommitdiffstats
path: root/src/model.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/model.rs')
-rw-r--r--src/model.rs51
1 files changed, 23 insertions, 28 deletions
diff --git a/src/model.rs b/src/model.rs
index 51ce493..395cdd1 100644
--- a/src/model.rs
+++ b/src/model.rs
@@ -3,33 +3,41 @@ use std::str::FromStr;
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use time::OffsetDateTime;
+use uuid::Uuid;
use crate::Error;
-#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, FromRow)]
+#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, FromRow)]
#[serde(rename_all = "camelCase")]
pub struct User {
- pub id: uuid::Uuid,
+ pub uuid: Uuid,
pub name: String,
pub email: String,
#[serde(default, skip_serializing)]
- pub password: String,
+ pub password_hash: String,
pub created_at: Option<OffsetDateTime>,
pub updated_at: Option<OffsetDateTime>,
}
-#[derive(Debug, Serialize, Deserialize)]
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub struct TokenClaims {
- pub sub: String,
- pub iat: usize,
- pub exp: usize,
+ pub sub: Uuid,
+ pub exp: i64,
+}
+
+impl TokenClaims {
+ pub fn new(sub: Uuid, max_age: time::Duration) -> Self {
+ Self {
+ sub,
+ exp: (time::OffsetDateTime::now_utc() + max_age).unix_timestamp(),
+ }
+ }
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RegisterSchema {
pub name: String,
pub email: String,
- #[serde(default, skip_serializing)]
pub password: String,
}
@@ -43,27 +51,14 @@ impl RegisterSchema {
#[derive(Debug, Serialize, Deserialize)]
pub struct LoginSchema {
pub email: String,
- #[serde(default, skip_serializing)]
pub password: String,
}
-macro_rules! impl_from_superset {
- ($from:tt, $to:ty, $($field:tt)*) => {
- impl From<$from> for $to {
- fn from(value: $from) -> Self {
- let $from {
- $($field)*,
- ..
- } = value;
-
- Self {
- $($field)*,
- }
- }
- }
- };
+impl From<RegisterSchema> for LoginSchema {
+ fn from(value: RegisterSchema) -> Self {
+ let RegisterSchema {
+ email, password, ..
+ } = value;
+ Self { email, password }
+ }
}
-
-impl_from_superset!(User, RegisterSchema, name, email, password);
-impl_from_superset!(User, LoginSchema, email, password);
-impl_from_superset!(RegisterSchema, LoginSchema, email, password);