35 lines
1.1 KiB
Rust
Executable File
35 lines
1.1 KiB
Rust
Executable File
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<NewUserSchema>,
|
|
pool: web::Data<Pool<ConnectionManager<PgConnection>>>,
|
|
) -> 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<String> = 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(),
|
|
}
|
|
}
|