use crate::diesel; use crate::json_serialization::new_user::NewUserSchema; use crate::models::user::new_user::NewUser; use crate::schema::users; use actix_web::{web, HttpResponse}; use diesel::{ prelude::*, r2d2::{ConnectionManager, Pool}, }; use secrecy::Secret; #[tracing::instrument(name = "Create new User", skip(pool))] pub async fn create( new_user: web::Json, pool: web::Data>>, ) -> HttpResponse { let pool_arc = pool.get_ref().clone(); let mut connection = pool_arc.get().expect("Failed to get database connection"); let name: String = new_user.name.clone(); let email: String = new_user.email.clone(); let new_password: Secret = Secret::new(new_user.password.clone()); let new_user = NewUser::new(name, email, new_password); let insert_result = diesel::insert_into(users::table) .values(&new_user) .execute(&mut connection); match insert_result { Ok(_) => HttpResponse::Created().await.unwrap(), Err(_) => HttpResponse::Conflict().await.unwrap(), } }