diff --git a/src/admin/team/mod.rs b/src/admin/team/mod.rs index 242de07..15aa2b4 100644 --- a/src/admin/team/mod.rs +++ b/src/admin/team/mod.rs @@ -117,23 +117,23 @@ impl Team { .ok() } - async fn create(db: &SqlitePool, name: &str, route: &Route) -> Result<(), CreateError> { + async fn create(db: &SqlitePool, name: &str, route: &Route) -> Result { // get next station id which has the lowest amount of teams to have in the first place // assigned let Some(station) = route.get_next_first_station(db).await else { return Err(CreateError::NoStationForRoute); }; - sqlx::query!( - "INSERT INTO team(name, route_id, first_station_id) VALUES (?, ?, ?)", + let result = sqlx::query!( + "INSERT INTO team(name, route_id, first_station_id) VALUES (?, ?, ?) RETURNING id", name, route.id, station.id ) - .execute(db) + .fetch_one(db) .await .map_err(|e| CreateError::DuplicateName(e.to_string()))?; - Ok(()) + Ok(result.id.unwrap()) } async fn update_name(&self, db: &SqlitePool, name: &str) { diff --git a/src/admin/team/web.rs b/src/admin/team/web.rs index 0821044..606fe9a 100644 --- a/src/admin/team/web.rs +++ b/src/admin/team/web.rs @@ -39,22 +39,33 @@ async fn create( return Redirect::to("/admin/team"); }; - match Team::create(&db, &form.name, &route).await { - Ok(()) => succ!(session, "Team '{}' erfolgreich erstellt!", form.name), - Err(CreateError::DuplicateName(e)) => err!( + let id = match Team::create(&db, &form.name, &route).await { + Ok(id) => { + succ!(session, "Team '{}' erfolgreich erstellt!", form.name); + id + } + Err(CreateError::DuplicateName(e)) => { + err!( session, "Team '{}' konnte _NICHT_ erstellt werden, da es bereits ein Team mit diesem Namen gibt ({e})!", form.name - ), - Err(CreateError::NoStationForRoute) => err!( + ); + + return Redirect::to("/admin/team"); + } + Err(CreateError::NoStationForRoute) => { + err!( session, "Team '{}' konnte _NICHT_ erstellt werden, da in der angegebenen Route '{}' noch keine Stationen vorkommen", form.name, route.name - ), - } + ); - Redirect::to("/admin/team") + return Redirect::to("/admin/team"); + } + }; + + Redirect::to(&format!("/admin/team/{}", id)) } async fn delete(