use sqlx::prelude::FromRow; use crate::models::AppError; use super::DbPool; #[derive(Debug)] pub struct NewUserEntity { pub username: String, pub password: String, pub email: String, pub name: String, } #[allow(dead_code)] #[derive(Debug, FromRow)] pub struct UserEntity { pub id: i32, pub name: String, pub email: String, pub status_id: i32, } pub async fn insert_new_user( pool: &DbPool, new_user: NewUserEntity, ) -> Result { let NewUserEntity { username, password, email, name, } = new_user; sqlx::query_as::<_, UserEntity>("INSERT INTO public.user (username, email, password, name) VALUES ($1, $2, $3, $4) RETURNING id, username, email, name, status_id;") .bind(username) .bind(email) .bind(password) .bind(name) .fetch_one(pool).await .map_err(|err| { eprintln!("Error inserting NewUserEntity {err:?}"); AppError::from(err) }) } pub async fn verify_user(pool: &DbPool, user_id: i32) -> Result<(), AppError> { sqlx::query("UPDATE public.user SET status_id = 1, updated_at = now() WHERE id = $1;") .bind(user_id) .execute(pool) .await .map_err(|err| { eprintln!("Error verifying user with id '{user_id}'."); AppError::from(err) }) .map(|_| ()) }