forked from Ruderverein-Donau-Linz/rowt
Merge commit 'eeb7af4fc10b76f6d606c6290f86c6971a189ae6'
# Conflicts: # templates/index.html.tera
This commit is contained in:
commit
9303d5ce3d
@ -3,7 +3,7 @@
|
||||
|
||||
# Notes / Bugfixes
|
||||
- [ ] Allow cox to edit own trip
|
||||
- [ ] Nobody has registered yet -> deletable
|
||||
- [x] Nobody has registered yet -> deletable
|
||||
- [ ] Change max_people (to be settable to 0)
|
||||
- [ ] Change note
|
||||
|
||||
|
@ -50,7 +50,7 @@ WHERE day=?
|
||||
ret
|
||||
}
|
||||
|
||||
async fn get_all_rower_for_id(db: &SqlitePool, id: i64) -> Vec<Registration> {
|
||||
async fn get_all_rower_for_id(db: &SqlitePool, trip_id: i64) -> Vec<Registration> {
|
||||
sqlx::query_as!(
|
||||
Registration,
|
||||
"
|
||||
@ -58,7 +58,7 @@ SELECT
|
||||
(SELECT name FROM user WHERE user_trip.user_id = user.id) as name,
|
||||
(SELECT created_at FROM user WHERE user_trip.user_id = user.id) as registered_at
|
||||
FROM user_trip WHERE trip_details_id = (SELECT trip_details_id FROM trip WHERE id = ?)",
|
||||
id
|
||||
trip_id
|
||||
)
|
||||
.fetch_all(db)
|
||||
.await
|
||||
@ -112,7 +112,7 @@ FROM user_trip WHERE trip_details_id = (SELECT trip_details_id FROM trip WHERE i
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn delete(db: &SqlitePool, user_id: i64, planned_event_id: i64) {
|
||||
pub async fn delete_by_planned_event_id(db: &SqlitePool, user_id: i64, planned_event_id: i64) {
|
||||
let _ = sqlx::query!(
|
||||
"DELETE FROM trip WHERE cox_id = ? AND planned_event_id = ?",
|
||||
user_id,
|
||||
@ -122,9 +122,44 @@ FROM user_trip WHERE trip_details_id = (SELECT trip_details_id FROM trip WHERE i
|
||||
.await
|
||||
.is_ok();
|
||||
}
|
||||
|
||||
pub(crate) async fn delete(
|
||||
db: &SqlitePool,
|
||||
user_id: i64,
|
||||
trip_id: i64,
|
||||
) -> Result<(), TripDeleteError> {
|
||||
let registered_rower = Self::get_all_rower_for_id(db, trip_id).await;
|
||||
if registered_rower.len() > 0 {
|
||||
return Err(TripDeleteError::SomebodyAlreadyRegistered);
|
||||
}
|
||||
|
||||
let trip_cox = sqlx::query!("SELECT cox_id FROM trip WHERE id = ?", trip_id)
|
||||
.fetch_one(db)
|
||||
.await
|
||||
.unwrap(); //TODO: fixme
|
||||
if trip_cox.cox_id != user_id {
|
||||
return Err(TripDeleteError::NotYourTrip);
|
||||
}
|
||||
|
||||
sqlx::query!(
|
||||
"DELETE FROM trip WHERE cox_id = ? AND id = ?",
|
||||
user_id,
|
||||
trip_id
|
||||
)
|
||||
.execute(db)
|
||||
.await
|
||||
.unwrap(); //TODO: fixme
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
pub enum CoxHelpError {
|
||||
AlreadyRegisteredAsRower,
|
||||
AlreadyRegisteredAsCox,
|
||||
}
|
||||
|
||||
pub enum TripDeleteError {
|
||||
SomebodyAlreadyRegistered,
|
||||
NotYourTrip,
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ use rocket::{
|
||||
use sqlx::SqlitePool;
|
||||
|
||||
use crate::model::{
|
||||
trip::{CoxHelpError, Trip},
|
||||
trip::{CoxHelpError, Trip, TripDeleteError},
|
||||
tripdetails::TripDetails,
|
||||
user::CoxUser,
|
||||
};
|
||||
@ -53,15 +53,27 @@ async fn join(db: &State<SqlitePool>, planned_event_id: i64, cox: CoxUser) -> Fl
|
||||
}
|
||||
}
|
||||
|
||||
#[get("/remove/trip/<trip_id>")]
|
||||
async fn remove_trip(db: &State<SqlitePool>, trip_id: i64, cox: CoxUser) -> Flash<Redirect> {
|
||||
match Trip::delete(db, cox.id, trip_id).await {
|
||||
Ok(_) => Flash::success(Redirect::to("/"), "Erfolgreich abgemeldet!"),
|
||||
Err(TripDeleteError::SomebodyAlreadyRegistered) => Flash::error(
|
||||
Redirect::to("/"),
|
||||
"Ausfahrt kann nicht gelöscht werden, da bereits jemand registriert ist!",
|
||||
),
|
||||
Err(TripDeleteError::NotYourTrip) => {
|
||||
Flash::error(Redirect::to("/"), "Nicht deine Ausfahrt!")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[get("/remove/<planned_event_id>")]
|
||||
async fn remove(db: &State<SqlitePool>, planned_event_id: i64, cox: CoxUser) -> Flash<Redirect> {
|
||||
//TODO: Check if > 2 hrs to event
|
||||
|
||||
Trip::delete(db, cox.id, planned_event_id).await;
|
||||
Trip::delete_by_planned_event_id(db, cox.id, planned_event_id).await;
|
||||
|
||||
Flash::success(Redirect::to("/"), "Erfolgreich abgemeldet!")
|
||||
}
|
||||
|
||||
pub fn routes() -> Vec<Route> {
|
||||
routes![create, join, remove]
|
||||
routes![create, join, remove, remove_trip]
|
||||
}
|
||||
|
@ -175,6 +175,12 @@
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
Keine Ruderer angemeldet
|
||||
<div class="text-right mt-2">
|
||||
<a href="/cox/remove/trip/{{ trip.id }}" class="inline-block btn btn-alert">
|
||||
{% include "includes/delete-icon" %}
|
||||
Termin löschen
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@ -251,4 +257,4 @@
|
||||
</form>
|
||||
{# --- END Form Add Event --- #}
|
||||
|
||||
{% endblock content %}
|
||||
{% endblock content %}
|
||||
|
Loading…
x
Reference in New Issue
Block a user