diff --git a/src/repo/mod.rs b/src/repo/mod.rs index 7f3ce8f..48d6b59 100644 --- a/src/repo/mod.rs +++ b/src/repo/mod.rs @@ -1,4 +1,6 @@ pub mod user { + use sqlx::Row; + #[derive(Debug, serde::Serialize, sqlx::FromRow)] pub struct InsertedData { pub id: uuid::Uuid, @@ -9,32 +11,38 @@ pub mod user { pool: &sqlx::PgPool, user: &icarus_models::user::User, ) -> Result { - let result = sqlx::query_as!( - InsertedData, + let row = sqlx::query( r#" INSERT INTO "user" (username, password, email, phone, firstname, lastname, email_verified, status) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING id, date_created; - "#, - &user.username, - &user.password, - &user.email, - &user.phone, - &user.firstname, - &user.lastname, - user.email_verified, - user.status - ) + "#) + .bind(&user.username) + .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) .await .map_err(|e| { eprintln!("Error inserting item: {}", e); e - }); + })?; - match result { - Ok(id) => Ok(id.id), - Err(err) => Err(err), + let result = InsertedData { + id: row.try_get("id").map_err(|_e| sqlx::Error::RowNotFound)?, + date_created: row + .try_get("date_created") + .map_err(|_e| sqlx::Error::RowNotFound)?, + }; + + if !result.id.is_nil() { + Ok(result.id) + } else { + Err(sqlx::Error::RowNotFound) } } }