mirror of
https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
synced 2025-10-29 09:05:30 +00:00
Better Akteure Logik
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
"github.com/Theodor-Springmann-Stiftung/kgpz_web/helpers/logging"
|
||||
@@ -26,7 +27,7 @@ func GetAgents(kgpz *xmlmodels.Library) fiber.Handler {
|
||||
return c.SendStatus(fiber.StatusNotFound)
|
||||
}
|
||||
return c.Render(
|
||||
"/autoren/",
|
||||
"/akteure/autoren/",
|
||||
fiber.Map{"model": agents},
|
||||
)
|
||||
}
|
||||
@@ -34,26 +35,52 @@ func GetAgents(kgpz *xmlmodels.Library) fiber.Handler {
|
||||
// Handle special "anonym" route
|
||||
if a == "anonym" {
|
||||
anonymAgent := viewmodels.AnonymView(kgpz)
|
||||
|
||||
// Build available letters list (same logic as AgentsView)
|
||||
av := make(map[string]bool)
|
||||
for _, agent := range kgpz.Agents.Array {
|
||||
av[strings.ToUpper(agent.ID[:1])] = true
|
||||
}
|
||||
availableLetters := make([]string, 0, len(av))
|
||||
for letter := range av {
|
||||
availableLetters = append(availableLetters, letter)
|
||||
}
|
||||
slices.Sort(availableLetters)
|
||||
|
||||
return c.Render(
|
||||
"/akteure/",
|
||||
"/akteure/anonym/",
|
||||
fiber.Map{"model": &viewmodels.AgentsListView{
|
||||
Search: "anonym",
|
||||
AvailableLetters: []string{},
|
||||
AvailableLetters: availableLetters,
|
||||
Agents: map[string]xmlmodels.Agent{"anonym": *anonymAgent},
|
||||
Sorted: []string{"anonym"},
|
||||
}},
|
||||
)
|
||||
}
|
||||
|
||||
// Handle normal letter/id lookup
|
||||
agents := viewmodels.AgentsView(a, kgpz)
|
||||
if len(agents.Agents) == 0 {
|
||||
logging.Error(nil, "No agents found for letter or id: "+a)
|
||||
return c.SendStatus(fiber.StatusNotFound)
|
||||
// Handle single letter (letter view) vs individual person ID (person view)
|
||||
if len(a) == 1 {
|
||||
// Letter view - show all people starting with this letter
|
||||
agents := viewmodels.AgentsView(a, kgpz)
|
||||
if len(agents.Agents) == 0 {
|
||||
logging.Error(nil, "No agents found for letter: "+a)
|
||||
return c.SendStatus(fiber.StatusNotFound)
|
||||
}
|
||||
return c.Render(
|
||||
"/akteure/letter/",
|
||||
fiber.Map{"model": agents},
|
||||
)
|
||||
} else {
|
||||
// Individual person view - show specific person
|
||||
agents := viewmodels.AgentsView(a, kgpz)
|
||||
if len(agents.Agents) == 0 {
|
||||
logging.Error(nil, "No agents found for id: "+a)
|
||||
return c.SendStatus(fiber.StatusNotFound)
|
||||
}
|
||||
return c.Render(
|
||||
"/akteure/person/",
|
||||
fiber.Map{"model": agents},
|
||||
)
|
||||
}
|
||||
return c.Render(
|
||||
"/akteure/",
|
||||
fiber.Map{"model": agents},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user