v1.1: Add weekly introductions
- Create a new migration adding a Weeks table, allowing for new weekly introductions and paving the way for multiple week handling. - Add route to update the weekly introduction - Move the week rendering to a specific week file - Update the templates to use the week number from the week data - Update templates to render and edit weekly introductions
This commit is contained in:
parent
9911895b5b
commit
67ce54e992
12 changed files with 165 additions and 71 deletions
69
src/main.rs
69
src/main.rs
|
@ -9,76 +9,23 @@ use rocket::serde::{Serialize, Deserialize, json::Json};
|
|||
use rocket_dyn_templates::{Template, context};
|
||||
|
||||
use rocket_db_pools::{sqlx, sqlx::Row, Database, Connection};
|
||||
use sqlx::Error;
|
||||
|
||||
mod database_records;
|
||||
mod auth;
|
||||
mod vote;
|
||||
mod truth;
|
||||
mod vote;
|
||||
mod week;
|
||||
|
||||
|
||||
mod database;
|
||||
mod database_records;
|
||||
use database::Db;
|
||||
use database_records::*;
|
||||
use auth::User;
|
||||
|
||||
#[get("/<week_number>")]
|
||||
async fn week(week_number: u8, mut db: Connection<Db>, cookies: &CookieJar<'_>) -> Template {
|
||||
let user: User = auth::get_user(week_number, &mut db, cookies).await;
|
||||
|
||||
let other_players = if user.logged_in {
|
||||
match sqlx::query_as("SELECT id, name FROM Players WHERE id <> $1 AND is_admin == 0 ORDER BY name")
|
||||
.bind(user.id)
|
||||
.fetch_all(&mut **db).await {
|
||||
Ok(v) => v,
|
||||
Err(error) => {
|
||||
println!("Some error while getting players : {error}");
|
||||
Vec::<Player>::new()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Vec::<Player>::new()
|
||||
};
|
||||
|
||||
// FIXME : This is fucking *trash* but fucking hell mate
|
||||
if user.is_admin {
|
||||
let truths: Vec<Truth> = match sqlx::query_as("SELECT * FROM Truths WHERE week == $1 ORDER BY number")
|
||||
.bind(week_number)
|
||||
.fetch_all(&mut **db).await {
|
||||
Ok(v) => v,
|
||||
Err(error) => {
|
||||
error!("Error while getting truths : {error}");
|
||||
Vec::<Truth>::new()
|
||||
}
|
||||
};
|
||||
|
||||
Template::render("index", context! {
|
||||
week_number: week_number,
|
||||
truths: truths,
|
||||
user: user,
|
||||
other_players: other_players,
|
||||
})
|
||||
} else {
|
||||
let truths: Vec<DisplayTruth> = match sqlx::query_as("SELECT id, number, author_id, rendered_text FROM Truths WHERE week == $1 ORDER BY number")
|
||||
.bind(week_number)
|
||||
.fetch_all(&mut **db).await {
|
||||
Ok(v) => v,
|
||||
Err(error) => {
|
||||
error!("Error while getting truths : {error}");
|
||||
Vec::<DisplayTruth>::new()
|
||||
}
|
||||
};
|
||||
|
||||
Template::render("index", context! {
|
||||
week_number: week_number,
|
||||
truths: truths,
|
||||
user: user,
|
||||
other_players: other_players,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[get("/")]
|
||||
async fn index(mut db: Connection<Db>) -> Redirect {
|
||||
let current_week: u8 = match sqlx::query("SELECT max(week) AS last_week FROM Truths;")
|
||||
let current_week: u8 = match sqlx::query("SELECT number FROM Weeks WHERE is_last_week == 1;")
|
||||
.fetch_one(&mut **db).await {
|
||||
Ok(v) => v.try_get(0).ok().unwrap_or_else(|| 1), // If error, go back to 1
|
||||
Err(error) => {
|
||||
|
@ -87,14 +34,14 @@ async fn index(mut db: Connection<Db>) -> Redirect {
|
|||
}
|
||||
};
|
||||
|
||||
Redirect::to(uri!("/", week(week_number = if current_week == 0 {1} else {current_week})))
|
||||
Redirect::to(uri!(week::week(week_number = if current_week == 0 {1} else {current_week})))
|
||||
}
|
||||
|
||||
#[launch]
|
||||
fn rocket() -> _ {
|
||||
rocket::build()
|
||||
.mount("/", FileServer::from(relative!("static_files")))
|
||||
.mount("/", routes![index, vote::fetch_vote_data, vote::vote, truth::create_truth, truth::edit_truth, week, auth::login])
|
||||
.mount("/", routes![index, vote::fetch_vote_data, vote::vote, truth::create_truth, truth::edit_truth, week::week, week::update_week, auth::login])
|
||||
.attach(database::stage())
|
||||
.attach(Template::fairing())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue