group teams by routes, sort by last inserted; Fixes #36
All checks were successful
CI/CD Pipeline / test (push) Successful in 4m10s
CI/CD Pipeline / deploy (push) Successful in 2m39s

This commit is contained in:
Philipp Hofer 2025-04-14 14:13:31 +02:00
parent 944d4d8d19
commit f55ce1829d
2 changed files with 47 additions and 42 deletions

View File

@ -87,7 +87,7 @@ impl Team {
pub(crate) async fn all_with_route(db: &SqlitePool, route: &Route) -> Vec<Self> { pub(crate) async fn all_with_route(db: &SqlitePool, route: &Route) -> Vec<Self> {
sqlx::query_as!( sqlx::query_as!(
Team, Team,
"select id, name, notes, amount_people, first_station_id, route_id from team where route_id = ?;", "SELECT id, name, notes, amount_people, first_station_id, route_id FROM team WHERE route_id = ?;",
route.id route.id
) )
.fetch_all(db) .fetch_all(db)

View File

@ -528,24 +528,34 @@ async fn index(State(db): State<Arc<SqlitePool>>, session: Session) -> Markup {
a href="/admin/route" { "Route" } a href="/admin/route" { "Route" }
" sie zugewiesen sind." " sie zugewiesen sind."
} }
ol { article {
@for team in &teams{ h2 { "Neues Team" }
li { @if routes.is_empty() {
a href=(format!("/admin/team/{}", team.id)){ article class="error" {
(team.name) (PreEscaped("Bevor du ein Team erstellen kannst, musst du zumindest eine Route erstellen, die das Team gehen kann &rarr; "))
} a role="button" href="/admin/route" {
a href=(format!("/admin/team/{}/delete", team.id)) "Team erstellen"
onclick="return confirm('Bist du sicher, dass das Team gelöscht werden soll? Das kann _NICHT_ mehr rückgängig gemacht werden.');" { }
"🗑️"
}
} }
} } @else {
} form action="/admin/team" method="post" {
@if teams.is_empty() { @if routes.len() == 1 {
article class="warning" { fieldset role="group" {
"Es gibt noch keine Teams. " input type="text" name="name" placeholder="Teamnamen" required;
@if !routes.is_empty() { input type="hidden" name="route_id" value=(routes[0].id) ;
"Das kannst du hier ändern ⤵️" input type="submit" value="Neues Team";
}
} @else {
input type="text" name="name" placeholder="Teamnamen" required;
select name="route_id" aria-label="Route auswählen" required {
@for route in &routes {
option value=(route.id) {
(route.name)
}
}
}
input type="submit" value="Neues Team";
}
} }
} }
} }
@ -554,32 +564,27 @@ async fn index(State(db): State<Arc<SqlitePool>>, session: Session) -> Markup {
"Hab ich eine Gruppe verloren? 😳" "Hab ich eine Gruppe verloren? 😳"
} }
} }
h2 { "Neues Team" } @for route in &routes {
@if routes.is_empty() { h2 { (route.name) }
article class="error" { ol {
(PreEscaped("Bevor du ein Team erstellen kannst, musst du zumindest eine Route erstellen, die das Team gehen kann &rarr; ")) @for team in &route.teams(&db).await{
a role="button" href="/admin/route" { li {
"Team erstellen" a href=(format!("/admin/team/{}", team.id)){
(team.name)
}
a href=(format!("/admin/team/{}/delete", team.id))
onclick="return confirm('Bist du sicher, dass das Team gelöscht werden soll? Das kann _NICHT_ mehr rückgängig gemacht werden.');" {
"🗑️"
}
}
} }
} }
} @else { }
form action="/admin/team" method="post" { @if teams.is_empty() {
@if routes.len() == 1 { article class="warning" {
fieldset role="group" { "Es gibt noch keine Teams. "
input type="text" name="name" placeholder="Teamnamen" required; @if !routes.is_empty() {
input type="hidden" name="route_id" value=(routes[0].id) ; "Das kannst du hier ändern ⤵️"
input type="submit" value="Neues Team";
}
} @else {
input type="text" name="name" placeholder="Teamnamen" required;
select name="route_id" aria-label="Route auswählen" required {
@for route in &routes {
option value=(route.id) {
(route.name)
}
}
}
input type="submit" value="Neues Team";
} }
} }
} }