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 = "")] async fn register( db: &State, register: Form, user: user::Model, ) -> Redirect { let day = day::Entity::find_by_id(*register.day) .one(db.inner()) .await .unwrap() .expect("There's no trip on this date (yet)"); if !(day.open_registration || user.is_cox) { return Redirect::to("/"); } 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 { routes![register] }