forked from Roflin/gamenight
60 lines
2.0 KiB
Rust
60 lines
2.0 KiB
Rust
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<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
|
|
})
|
|
}
|
|
}
|
|
|
|
impl Into<Uuid> for GamenightGet {
|
|
fn into(self) -> Uuid {
|
|
Uuid::parse_str(self.id.as_str()).unwrap()
|
|
}
|
|
}
|
|
|
|
#[get("/gamenights")]
|
|
pub async fn gamenights(pool: web::Data<DbPool>, _user: User) -> Result<impl Responder, ApiError> {
|
|
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<DbPool>, user: User, gamenight_data: web::Json<GamenightPost>) -> Result<impl Responder, ApiError> {
|
|
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<DbPool>, _user: User, gamenight_data: web::Json<GamenightGet>) -> Result<impl Responder, ApiError> {
|
|
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)?))
|
|
} |