package web import ( "fmt" "net/http" ) func (s *Server) handleHealth(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") fmt.Fprint(w, `{"ok":true}`) } type indexData struct { Title string Nav navData OffeneAntraege int ZeigePosteingang bool OffenerPosteingang int } // handleIndex ist die Startseite nach der Anmeldung — ein kurzer // Überblick statt reiner Navigations-Duplikate (die Links stehen // eh schon in der Seitenleiste): eigene offene Anträge, und für die // Fachebene zusätzlich die Zahl offener Fälle im Posteingang. Bewusst // ohne die Wiedervorlage-Zahl hier — deren Berechnung vergleicht jeden // aktiven Genehmigungs-Snapshot gegen den aktuellen Katalogstand // (siehe handleWiedervorlageListe) und wäre für eine Startseite, die // bei jedem Login geladen wird, zu teuer. func (s *Server) handleIndex(w http.ResponseWriter, r *http.Request) { user := currentUser(r) nav := navFor(r) data := indexData{Title: "Start", Nav: nav} if !nav.IsBetreiber { eigene, err := s.store.ListAntraegeForUser(r.Context(), user.ID) if err == nil { for _, a := range eigene { if a.Status == "eingereicht" { data.OffeneAntraege++ } } } } if nav.IsFachebene { data.ZeigePosteingang = true alle, err := s.store.ListAntraegeForAccount(r.Context(), user.AccountID) if err == nil { for _, a := range alle { if a.Status == "eingereicht" { data.OffenerPosteingang++ } } } } if err := s.templates.ExecuteTemplate(w, "index", data); err != nil { http.Error(w, "Seite konnte nicht gerendert werden", http.StatusInternalServerError) } }