use actix_web::{get, web, Responder, http::header::ContentType, HttpResponse, post}; use chrono::{DateTime, ParseError}; 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::GameNightsResponse; use crate::request::error::ApiError; use crate::DbPool; use crate::util::GetConnection; impl GamenightPost { pub fn into_with_user(&self, user: User) -> Result { return Ok(schema::gamenight::Gamenight { datetime: DateTime::parse_from_rfc3339(&self.datetime)?.with_timezone(&chrono::Utc), id: Uuid::new_v4(), name: self.name.clone(), owner_id: user.id }) } } impl Into for GamenightGet { fn into(self) -> Uuid { Uuid::parse_str(self.id.as_str()).unwrap() } } #[get("/gamenights")] pub async fn gamenights(pool: web::Data, _user: User) -> Result { let mut conn = pool.get_conn(); let gamenights: GameNightsResponse = schema::gamenights(&mut conn)?; Ok(HttpResponse::Ok() .content_type(ContentType::json()) .body(serde_json::to_string(&gamenights)?) ) } #[post("/gamenight")] pub async fn gamenight_post(pool: web::Data, user: User, gamenight_data: web::Json) -> Result { let mut conn = pool.get_conn(); schema::gamenight::add_gamenight(&mut conn, gamenight_data.into_with_user(user)?)?; Ok(HttpResponse::Ok()) } #[get("/gamenight")] pub async fn gamenight_get(pool: web::Data, _user: User, gamenight_data: web::Json) -> Result { let mut conn = pool.get_conn(); let gamenight = schema::gamenight::get_gamenight(&mut conn, gamenight_data.into_inner().into())?; Ok(HttpResponse::Ok() .content_type(ContentType::json()) .body(serde_json::to_string(&gamenight)?)) }