Fixes the ugly Register User post handler.

This commit is contained in:
Dennis Brentjes
2023-03-30 09:32:24 +02:00
parent 3509a70a6a
commit 70ae15f655
9 changed files with 70 additions and 68 deletions

View File

@@ -1,10 +1,16 @@
use actix_web::{get, web, Responder, http::header::ContentType, HttpResponse, post};
use chrono::{DateTime, ParseError};
use crate::{DbPool, request::{error::ApiError, responses::GameNightResponse, requests::{GamenightPost, GamenightGet}, util::GetPgConnection}, schema::{self, user::User}};
use uuid::Uuid;
use crate::schema::{self};
use crate::schema::user::User;
use crate::request::requests::GamenightGet;
use crate::request::requests::GamenightPost;
use crate::request::responses::GameNightResponse;
use crate::request::error::ApiError;
use crate::DbPool;
use crate::util::GetConnection;
impl GamenightPost {
pub fn into_with_user(&self, user: User) -> Result<schema::gamenight::Gamenight, ParseError> {
return Ok(schema::gamenight::Gamenight {

View File

@@ -5,7 +5,6 @@ mod user_handlers;
mod gamenight_handlers;
mod error;
mod authorization;
mod util;
pub use user_handlers::login;
pub use user_handlers::register;

View File

@@ -1,5 +1,8 @@
use serde::{Serialize, Deserialize};
use validator::Validate;
use diesel::PgConnection;
use diesel::r2d2::ConnectionManager;
use diesel::r2d2::Pool;
use crate::schema::user::{unique_email, unique_username};
@@ -13,12 +16,12 @@ pub struct Login {
pub struct Register {
#[validate(
length(min = 1),
custom(function = "unique_username", arg = "&'v_a mut diesel::PgConnection")
custom(function = "unique_username", arg = "&'v_a Pool<ConnectionManager<PgConnection>>")
)]
pub username: String,
#[validate(
email,
custom(function = "unique_email", arg = "&'v_a mut diesel::PgConnection")
custom(function = "unique_email", arg = "&'v_a Pool<ConnectionManager<PgConnection>>")
)]
#[validate(email)]
pub email: String,

View File

@@ -7,7 +7,7 @@ use crate::request::requests::{Login, Register};
use crate::request::error::ApiError;
use crate::request::responses::LoginResponse;
use crate::request::authorization::get_token;
use crate::request::util::GetPgConnection;
use crate::util::GetConnection;
use crate::schema::{self};
use serde_json;
@@ -30,8 +30,6 @@ impl Into<schema::user::Register> for Register {
}
}
#[get("/token")]
pub async fn login(pool: web::Data<DbPool>, login_data: web::Json<Login>) -> Result<impl Responder, ApiError> {
let data = login_data.into_inner();
@@ -57,19 +55,12 @@ pub async fn login(pool: web::Data<DbPool>, login_data: web::Json<Login>) -> Res
#[post("/user")]
pub async fn register(pool: web::Data<DbPool>, register_data: web::Json<Register>) -> Result<impl Responder, ApiError> {
let data1 = register_data.clone();
let data2 = register_data.clone();
let register_request = data2.into();
let mut conn1 = pool.get_conn();
let mut conn2 = pool.get_conn();
let _validation_result = web::block(move || {
data1.validate_args((&mut conn1, &mut conn2))
}).await??;
let mut conn3 = pool.get_conn();
let _register_result = web::block(move || {
schema::register(&mut conn3, register_request)
web::block(move || -> Result<(), ApiError> {
register_data.validate_args((&pool, &pool))?;
let register_request = register_data.into_inner().into();
let mut conn = pool.get_conn();
schema::register(&mut conn, register_request)?;
Ok(())
}).await??;
return Ok(HttpResponse::Ok())

View File

@@ -1,14 +0,0 @@
use actix_web::web;
use diesel::{r2d2::{PooledConnection, ConnectionManager}, PgConnection};
use crate::DbPool;
pub trait GetPgConnection {
fn get_conn(&self) -> PooledConnection<ConnectionManager<PgConnection>>;
}
impl GetPgConnection for web::Data<DbPool> {
fn get_conn(&self) -> PooledConnection<ConnectionManager<PgConnection>> {
self.get().expect("couldn't get db connection from pool")
}
}