forked from Roflin/gamenight
91 lines
2.1 KiB
Rust
91 lines
2.1 KiB
Rust
use crate::schema;
|
|
use rocket::request::FlashMessage;
|
|
use rocket::response::Redirect;
|
|
use rocket_dyn_templates::Template;
|
|
use serde::{Deserialize, Serialize};
|
|
use std::borrow::Cow;
|
|
|
|
#[derive(Serialize, Deserialize, Debug)]
|
|
struct FlashData {
|
|
has_data: bool,
|
|
kind: Cow<'static, str>,
|
|
message: Cow<'static, str>,
|
|
}
|
|
|
|
impl FlashData {
|
|
const EMPTY: Self = Self {
|
|
has_data: false,
|
|
message: Cow::Borrowed(""),
|
|
kind: Cow::Borrowed(""),
|
|
};
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, Debug)]
|
|
struct GameNightsData {
|
|
gamenights: Vec<schema::GameNight>,
|
|
flash: FlashData,
|
|
}
|
|
|
|
#[get("/gamenights")]
|
|
pub async fn gamenights(conn: schema::DbConn) -> Template {
|
|
let gamenights = schema::get_all_gamenights(conn).await;
|
|
|
|
let data = GameNightsData {
|
|
gamenights: gamenights,
|
|
flash: FlashData::EMPTY,
|
|
};
|
|
|
|
Template::render("gamenights", &data)
|
|
}
|
|
|
|
#[get("/")]
|
|
pub async fn index() -> Redirect {
|
|
Redirect::to(uri!(gamenights))
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, Debug)]
|
|
struct GameNightAddData {
|
|
post_url: String,
|
|
flash: FlashData,
|
|
}
|
|
|
|
#[get("/gamenight/add")]
|
|
pub async fn add_game_night(flash: Option<FlashMessage<'_>>) -> Template {
|
|
let flash_data = match flash {
|
|
None => FlashData::EMPTY,
|
|
Some(flash) => FlashData {
|
|
has_data: true,
|
|
message: Cow::Owned(flash.message().to_string()),
|
|
kind: Cow::Owned(flash.kind().to_string()),
|
|
},
|
|
};
|
|
|
|
let data = GameNightAddData {
|
|
post_url: "/api/gamenight".to_string(),
|
|
flash: flash_data,
|
|
};
|
|
|
|
Template::render("gamenight_add", &data)
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, Debug)]
|
|
struct RegisterData {
|
|
flash: FlashData,
|
|
}
|
|
|
|
#[get("/register")]
|
|
pub async fn register(flash: Option<FlashMessage<'_>>) -> Template {
|
|
let flash_data = match flash {
|
|
None => FlashData::EMPTY,
|
|
Some(flash) => FlashData {
|
|
has_data: true,
|
|
message: Cow::Owned(flash.message().to_string()),
|
|
kind: Cow::Owned(flash.kind().to_string()),
|
|
},
|
|
};
|
|
|
|
let data = RegisterData { flash: flash_data };
|
|
|
|
Template::render("register", &data)
|
|
}
|