diff --git a/src/main.rs b/src/main.rs index 8c1f1e6..740979a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -346,6 +346,7 @@ async fn post(req: Request, db: Arc>) -> Result login(req, db).await, "/register" => register(req, db).await, "/logout" => logout().await, + "/player" => post_player(req, db).await, _ => not_found().await, } } @@ -354,13 +355,9 @@ async fn post_vote( req: Request, db: Arc>, ) -> Result, Error> { - let body = req.into_body().collect().await?; - let data: Result = from_reader(body.aggregate().reader()); - if data.is_err() { - return Ok(Response::builder() - .status(StatusCode::BAD_REQUEST) - .body(Body::Empty) - .unwrap()); + let data = req_json::(req).await; + if data.is_none() { + return bad_request().await; } let vote = data.unwrap(); let timestamp: DateTime = DateTime::from(SystemTime::now()); @@ -382,7 +379,26 @@ async fn post_vote( .body(Body::Empty) .unwrap()); } - Ok(Response::builder().body(Body::Empty).unwrap()) + ok().await +} + +async fn post_player(req: Request, db: Arc>) -> Result, Error> { + let data = req_json::(req).await; + if data.is_none() { + return bad_request().await; + } + let data = data.unwrap(); + let name = data.get("name").unwrap().as_str().unwrap(); + let pool = db.clone().lock().unwrap().clone(); + let mut conn = pool.acquire().await.unwrap(); + let r = sqlx::query!(r#"INSERT INTO players (name) VALUES (?1)"#, data).execute(&mut *conn).await; + if r.is_err() { + return Ok(Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .body(Body::Empty) + .unwrap()); + } + ok().await } async fn post_admin(