forked from Roflin/gamenight
37 lines
1.4 KiB
Rust
37 lines
1.4 KiB
Rust
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())
|
|
} |