use actix_web::{get, web, Responder, http::header::ContentType, HttpResponse, post}; use chrono::{DateTime, ParseError}; use crate::{DbPool, request::{error::ApiError, responses::GameNightResponse, requests::Gamenight}, schema::{self, user::User}}; use uuid::Uuid; impl Gamenight { pub fn into_with_user(&self, user: User) -> Result<schema::gamenight::Gamenight, ParseError> { 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 }) } } #[get("/gamenights")] pub async fn gamenights(pool: web::Data<DbPool>, _user: User) -> Result<impl Responder, ApiError> { let mut conn = pool.get().expect("couldn't get db connection from pool"); let gamenights = schema::gamenights(&mut conn)?; Ok(HttpResponse::Ok() .content_type(ContentType::json()) .body(serde_json::to_string(&GameNightResponse { gamenights })?) ) } #[post("/gamenight")] pub async fn gamenight(pool: web::Data<DbPool>, user: User, gamenight_data: web::Json<Gamenight>) -> Result<impl Responder, ApiError> { let mut conn = pool.get().expect("couldn't get db connection from pool"); schema::gamenight::add_gamenight(&mut conn, gamenight_data.into_with_user(user)?)?; Ok(HttpResponse::Ok()) }