diff options
Diffstat (limited to 'src/model.rs')
-rw-r--r-- | src/model.rs | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/src/model.rs b/src/model.rs index 9c1bfe6..5f6111e 100644 --- a/src/model.rs +++ b/src/model.rs @@ -1,28 +1,16 @@ -use chrono::prelude::*; use serde::{Deserialize, Serialize}; +use time::OffsetDateTime; -#[allow(non_snake_case)] -#[derive(Debug, Deserialize, sqlx::FromRow, Serialize, Clone)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, sqlx::FromRow)] +#[serde(rename_all = "camelCase")] pub struct User { pub id: uuid::Uuid, pub name: String, pub email: String, + #[serde(default, skip_serializing)] pub password: String, - #[serde(rename = "createdAt")] - pub created_at: Option<DateTime<Utc>>, - #[serde(rename = "updatedAt")] - pub updated_at: Option<DateTime<Utc>>, -} - -impl User { - pub fn into_query_response(self) -> axum::Json<serde_json::Value> { - axum::Json(serde_json::json!({ - "status": "success", - "data": serde_json::json!({ - "user": self - }) - })) - } + pub created_at: Option<OffsetDateTime>, + pub updated_at: Option<OffsetDateTime>, } #[derive(Debug, Serialize, Deserialize)] @@ -32,15 +20,38 @@ pub struct TokenClaims { pub exp: usize, } -#[derive(Debug, Deserialize)] -pub struct RegisterUserSchema { +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub struct RegisterSchema { pub name: String, pub email: String, + #[serde(default, skip_serializing)] pub password: String, } -#[derive(Debug, Deserialize)] -pub struct LoginUserSchema { +#[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_superset!(User, RegisterSchema, name, email, password); +impl_from_superset!(User, LoginSchema, email, password); +impl_from_superset!(RegisterSchema, LoginSchema, email, password); |