diff --git a/src/model/planned_event.rs b/src/model/planned_event.rs index 3364a34..6c3f643 100644 --- a/src/model/planned_event.rs +++ b/src/model/planned_event.rs @@ -159,6 +159,34 @@ FROM user_trip WHERE trip_details_id = (SELECT trip_details_id FROM planned_even .unwrap(); //Okay, as TripDetails can only be created with proper DB backing } + //TODO: create unit test + pub async fn update( + &self, + db: &SqlitePool, + planned_amount_cox: i32, + max_people: i32, + notes: Option, + ) { + sqlx::query!( + "UPDATE planned_event SET planned_amount_cox = ? WHERE id = ?", + planned_amount_cox, + self.id + ) + .execute(db) + .await + .unwrap(); //Okay, as planned_event can only be created with proper DB backing + + sqlx::query!( + "UPDATE trip_details SET max_people = ?, notes = ? WHERE id = ?", + planned_amount_cox, + notes, + self.trip_details_id + ) + .execute(db) + .await + .unwrap(); //Okay, as planned_event can only be created with proper DB backing + } + pub async fn delete(&self, db: &SqlitePool) { sqlx::query!("DELETE FROM planned_event WHERE id = ?", self.id) .execute(db) diff --git a/src/rest/admin/planned_event.rs b/src/rest/admin/planned_event.rs index a5750df..12e1f17 100644 --- a/src/rest/admin/planned_event.rs +++ b/src/rest/admin/planned_event.rs @@ -1,6 +1,6 @@ use rocket::{ form::Form, - get, post, + get, post, put, response::{Flash, Redirect}, routes, FromForm, Route, State, }; @@ -49,6 +49,37 @@ async fn create( Flash::success(Redirect::to("/"), "Successfully planned the event") } +//TODO: add constraints (e.g. planned_amount_cox > 0) +#[derive(FromForm)] +struct UpdatePlannedEventForm { + id: i64, + planned_amount_cox: i32, + max_people: i32, + notes: Option, +} + +#[put("/planned-event", data = "")] +async fn update( + db: &State, + data: Form, + _admin: AdminUser, +) -> Flash { + match PlannedEvent::find_by_id(db, data.id).await { + Some(planned_event) => { + planned_event + .update( + db, + data.planned_amount_cox, + data.max_people, + data.notes.clone(), + ) + .await; + Flash::success(Redirect::to("/"), "Successfully edited the event") + } + None => Flash::error(Redirect::to("/"), "Planned event id not found"), + } +} + #[get("/planned-event//delete")] async fn delete(db: &State, id: i64, _admin: AdminUser) -> Flash { match PlannedEvent::find_by_id(db, id).await { @@ -61,5 +92,5 @@ async fn delete(db: &State, id: i64, _admin: AdminUser) -> Flash Vec { - routes![create, delete] + routes![create, delete, update] } diff --git a/templates/index.html.tera b/templates/index.html.tera index 5eea2ce..4ef5601 100644 --- a/templates/index.html.tera +++ b/templates/index.html.tera @@ -120,8 +120,24 @@
Gäste sind erlaubt
{% endif %} - {# --- START Delete Btn --- #} {% if loggedin_user.is_admin %} + + {# --- START Edit Form --- #} +
+

Ausfahrt bearbeiten

+
+ + + {{ macros::input(label='Anzahl Ruderer', name='max_people', type='number', required=true, value=planned_event.max_people, min='0') }} + {{ macros::input(label='Anzahl Steuerleute', name='planned_amount_cox', type='number', value=planned_event.planned_amount_cox, required=true, min='0') }} + {{ macros::input(label='Anmerkungen', name='notes', type='input', value=planned_event.notes) }} + + +
+
+ {# --- END Edit Form --- #} + + {# --- START Delete Btn --- #}