From cfe292cd89d90159398f67fe7fa1c660f6f6fcf8 Mon Sep 17 00:00:00 2001 From: phoenix Date: Sat, 5 Apr 2025 00:02:29 -0400 Subject: [PATCH] Added code --- src/callers/register.rs | 15 ++++++++----- src/repo/mod.rs | 50 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/callers/register.rs b/src/callers/register.rs index fee223f..a17d2bc 100644 --- a/src/callers/register.rs +++ b/src/callers/register.rs @@ -1,6 +1,5 @@ use axum::{Json, http::StatusCode}; -use crate::models; use crate::repo; pub mod request { @@ -26,12 +25,10 @@ pub mod request { pub mod response { use serde::{Deserialize, Serialize}; - use crate::models; - #[derive(Deserialize, Serialize)] pub struct Response { pub message: String, - pub data: Vec, + pub data: Vec, } } @@ -39,10 +36,18 @@ pub async fn register_user( axum::Extension(pool): axum::Extension, Json(payload): Json, ) -> (StatusCode, Json) { - let mut user = models::common::User { + let mut user = icarus_models::user::User { id: uuid::Uuid::nil(), username: payload.username.clone(), password: payload.password.clone(), + email: payload.email.clone(), + phone: payload.phone.clone(), + firstname: payload.firstname.clone(), + lastname: payload.lastname.clone(), + status: String::from("Active"), + email_verified: true, + date_created: String::from("2025-01-01 12:00:00"), + last_login: String::from("nil"), }; match repo::user::insert(&pool, &user).await { diff --git a/src/repo/mod.rs b/src/repo/mod.rs index 95d3c7a..17a544f 100644 --- a/src/repo/mod.rs +++ b/src/repo/mod.rs @@ -1,20 +1,64 @@ pub mod user { - use crate::models; + // use crate::models; + // use serde::Serialize; + + #[derive(Debug, serde::Serialize, sqlx::FromRow)] + pub struct InsertedData { + pub id: uuid::Uuid, + pub date_created: Option, + // pub email: String, + } pub async fn insert( pool: &sqlx::PgPool, - user: &models::common::User, + user: &icarus_models::user::User, ) -> Result { - let insert_sql = "INSERT INTO \"user\" (username, password) VALUES ($1, $2) RETURNING id"; + let result = sqlx::query_as!( + InsertedData, + r#" + INSERT INTO "user" (username, password, email, phone, firstname, lastname, email_verified, status, date_created) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, NOW()) + RETURNING id, date_created; + "#, + &user.username, // Bind the input message securely + &user.password, + &user.email, + &user.phone, + &user.firstname, + &user.lastname, + user.email_verified, + user.status + ) + .fetch_one(pool) + .await + .map_err(|e| { + eprintln!("Error inserting item: {}", e); + e + }); + + match result { + Ok(id) => Ok(id.id), + Err(err) => Err(err), + } + + /* + let insert_sql = "INSERT INTO \"user\" (username, password, email, phone, firstname, lastname, email_verified, status) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING id"; match sqlx::query_scalar(insert_sql) .bind(&user.username) // Bind the input message securely .bind(&user.password) + .bind(&user.email) + .bind(&user.phone) + .bind(&user.firstname) + .bind(&user.lastname) + .bind(user.email_verified) + .bind(&user.status) .fetch_one(pool) // Execute and expect exactly ONE row with ONE column back .await { Ok(o) => Ok(o), Err(err) => Err(err), // _ => uuid::Uuid::nil(), } + */ } }