2023-02-09 15:29:44 +01:00
|
|
|
use rocket::{form::Form, response::Redirect, Route, State};
|
|
|
|
use sea_orm::{ActiveModelTrait, DatabaseConnection, EntityTrait, Set};
|
|
|
|
|
|
|
|
use crate::models::{day, trip, user};
|
|
|
|
|
|
|
|
use super::NaiveDateForm;
|
|
|
|
|
|
|
|
#[derive(FromForm)]
|
|
|
|
struct RegisterForm {
|
|
|
|
day: NaiveDateForm,
|
|
|
|
#[field(validate = len(3..))]
|
|
|
|
name: String,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[put("/", data = "<register>")]
|
|
|
|
async fn register(db: &State<DatabaseConnection>, register: Form<RegisterForm>) -> Redirect {
|
|
|
|
let day = day::Entity::find_by_id(*register.day)
|
|
|
|
.one(db.inner())
|
|
|
|
.await
|
|
|
|
.unwrap()
|
|
|
|
.expect("There's no trip on this date (yet)");
|
|
|
|
|
2023-02-09 17:08:07 +01:00
|
|
|
if !day.open_registration {
|
|
|
|
return Redirect::to("/");
|
|
|
|
}
|
|
|
|
|
2023-02-09 15:29:44 +01:00
|
|
|
let user = user::Model::find_or_create_user(®ister.name, db.inner()).await;
|
|
|
|
|
|
|
|
let day = format!("{}", day.day.format("%Y-%m-%d"));
|
|
|
|
let trip = trip::ActiveModel {
|
|
|
|
day: Set(day),
|
|
|
|
user_id: Set(user.id),
|
|
|
|
..Default::default()
|
|
|
|
};
|
|
|
|
|
|
|
|
trip.insert(db.inner()).await.unwrap();
|
|
|
|
|
|
|
|
Redirect::to("/")
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn routes() -> Vec<Route> {
|
|
|
|
routes![register]
|
|
|
|
}
|