/*
* This file is part of laurelin/api
* Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
*
* Licensed under GPL-3.0-only.
* See LICENSE for licensing information.
*/
use actix_session::Session;
use actix_web::{get, post, web, HttpResponse, Responder};
use laurelin_shared::error::api::APIError;
use crate::{actions, session, PgPool};
#[post("/api/game")]
async fn create(session: Session, pool: web::Data<PgPool>) -> impl Responder {
let session_validation = session::validate_session(&session);
match session_validation {
Err(err) => err,
Ok(user_id) => {
let game_create = web::block(move || {
let mut conn = match pool.get() {
Err(_) => return Err(APIError::DatabasePoolGetFailed),
Ok(conn) => conn,
};
actions::game::create(&mut conn, &user_id)
})
.await;
match game_create {
Err(_err) => {
return HttpResponse::InternalServerError().json(APIError::Undefined);
}
Ok(game_res) => match game_res {
Err(err) => HttpResponse::InternalServerError().body(err.to_string()),
Ok(game) => HttpResponse::Ok().json(game),
},
}
}
}
}
#[get("/api/game/{id}")]
async fn info(session: Session, pool: web::Data<PgPool>, id: web::Path<String>) -> impl Responder {
let session_validation = session::validate_session(&session);
match session_validation {
Err(err) => err,
Ok(user_id) => {
//
return HttpResponse::Ok().body("INFO");
}
}
}
#[post("/api/game/{id}/join")]
async fn join(session: Session, pool: web::Data<PgPool>, id: web::Path<String>) -> impl Responder {
let session_validation = session::validate_session(&session);
match session_validation {
Err(err) => err,
Ok(user_id) => {
//
return HttpResponse::Ok().body("JOIN");
}
}
}
#[get("/api/game/all_forming")]
async fn all_forming(session: Session, pool: web::Data<PgPool>) -> impl Responder {
let session_validation = session::validate_session(&session);
match session_validation {
Err(err) => err,
Ok(user_id) => {
//
return HttpResponse::Ok().body("ALL_FORMING");
}
}
}
#[get("/api/game/my_games")]
async fn my_games(session: Session, pool: web::Data<PgPool>) -> impl Responder {
let session_validation = session::validate_session(&session);
match session_validation {
Err(err) => err,
Ok(user_id) => {
//
return HttpResponse::Ok().body("MY_GAMES");
}
}
}