From 07cd30f8976c561d0a5c56142626a66654d331e9 Mon Sep 17 00:00:00 2001 From: phoenix Date: Thu, 3 Apr 2025 16:09:57 -0400 Subject: [PATCH] Saving changes --- src/callers/register.rs | 44 +++++++++++++++++++++++++++++++++++++++-- src/models/common.rs | 3 +++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/callers/register.rs b/src/callers/register.rs index 7a1299a..1330ef4 100644 --- a/src/callers/register.rs +++ b/src/callers/register.rs @@ -1,12 +1,52 @@ use axum::{Json, http::StatusCode}; +// use sqlx::{Executor, PgPool, Row, postgres::PgPoolOptions}; // Added Row for potential use use crate::models; pub async fn register_user( + axum::Extension(pool): axum::Extension, Json(payload): Json, ) -> (StatusCode, Json) { - let user = models::common::User { + let mut user = models::common::User { + id: uuid::Uuid::nil(), username: payload.username.clone(), + password: payload.password.clone(), }; - (StatusCode::CREATED, Json(user)) + + let insert_sql = "INSERT INTO \"user\" (username, password) VALUES ($1, $2) RETURNING id"; + println!("SQL: {:?}", insert_sql); + /* + sqlx::query(insert_sql) + .bind(&user.username) + .bind(&user.password) + .execute(&pool) + .await; + */ + + /* + let returned_id: uuid::Uuid = sqlx::query_scalar(insert_sql) + .bind(&user.username) + .bind(&user.password) + .fetch_one(&pool).await? // fetch_one expects exactly one row + */ + let id = match sqlx::query_scalar(insert_sql) + .bind(&user.username) // Bind the input message securely + .bind(&user.password) + .fetch_one(&pool) // Execute and expect exactly ONE row with ONE column back + .await + { + Ok(o) => o, + _ => { + uuid::Uuid::nil() + // (StatusCode::BAD_REQUEST, Json(user)) + } + }; + + if id != uuid::Uuid::nil() { + println!("User inserted."); + user.id = id; + (StatusCode::CREATED, Json(user)) + } else { + (StatusCode::BAD_REQUEST, Json(user)) + } } diff --git a/src/models/common.rs b/src/models/common.rs index cda15f2..6838cfb 100644 --- a/src/models/common.rs +++ b/src/models/common.rs @@ -3,9 +3,12 @@ use serde::{Deserialize, Serialize}; #[derive(Deserialize)] pub struct CreateUser { pub username: String, + pub password: String, } #[derive(Serialize)] pub struct User { + pub id: uuid::Uuid, pub username: String, + pub password: String, }