refactor(rename): handler functions, routes, legacy 301 redirects

Second rename pass closing the backend cleanup:

* handler functions (handleListProjekte, handleCreateFrist, …) renamed
  to English equivalents so every symbol in the handler package matches
  the URL/entity it serves.
* services.FristStatusFilter + filter constants renamed to
  DeadlineStatusFilter / DeadlineFilterOverdue etc.
* services.TerminListFilter / TerminCalDAVPusher / TerminSummaryCounts
  renamed to AppointmentListFilter / AppointmentCalDAVPusher /
  AppointmentSummaryCounts.
* GlossarTerm/GlossarSuggestion/glossarTerms → Glossary*.
* CourtsFeedback/CourtsResponse (formerly Gerichte*).
* handlers.Services.{Projekt,Parteien,Frist,Termin,Notiz,Dezernat} →
  {Project,Party,Deadline,Appointment,Note,Department}; dbServices
  struct + consumers likewise.
* email templates: {{.FristURL}} → {{.DeadlineURL}}, {{.FristenURL}} →
  {{.DeadlinesURL}}.
* links.go category IDs: gerichte → courts.
* cmd/server/main.go local vars: projektSvc/terminSvc/dezernatSvc →
  projectSvc/appointmentSvc/departmentSvc.

Routes:
* removed all /api/akten alias routes (API clients use /api/projects now).
* removed /api/akten/*/deadlines, /*/notes, /*/parties, /*/appointments,
  /*/checklists, /*/events, /*/summary alias variants.
* new internal/handlers/redirects.go registers 301 Moved Permanently
  redirects for every legacy German GET path: /akten, /projekte, /fristen,
  /termine, /notizen, /einstellungen, /checklisten, /dezernate, /parteien,
  /gerichte, /glossar. Sub-paths + query strings are preserved so old
  bookmarks keep working.

Kept in German (product names, per task spec):
* /tools/fristenrechner, /tools/kostenrechner, /tools/gebuehrentabellen
* FristenrechnerService / KostenrechnerService types
* User.Dezernat + paliad.users.dezernat free-text legacy column (separate
  from the new paliad.departments entity).

go build / vet / test clean.
This commit is contained in:
m
2026-04-20 17:40:55 +02:00
parent 3faec6c526
commit 49c6bc75ca
28 changed files with 314 additions and 295 deletions

View File

@@ -17,17 +17,17 @@ import (
type dbServices struct {
projects *services.ProjectService
team *services.TeamService
dezernat *services.DepartmentService
parties *services.PartyService
deadline *services.DeadlineService
appointment *services.AppointmentService
department *services.DepartmentService
parties *services.PartyService
deadline *services.DeadlineService
appointment *services.AppointmentService
caldav *services.CalDAVService
rules *services.DeadlineRuleService
calc *services.DeadlineCalculator
users *services.UserService
fristenrechner *services.FristenrechnerService
dashboard *services.DashboardService
note *services.NoteService
note *services.NoteService
checklistInst *services.ChecklistInstanceService
mail *services.MailService
invite *services.InviteService
@@ -75,7 +75,7 @@ func writeServiceError(w http.ResponseWriter, err error) {
// GET /api/projects — list visible projects.
// Query params: ?type=case&status=active&parent_id=<uuid>&parent_null=1&search=foo
func handleListProjekte(w http.ResponseWriter, r *http.Request) {
func handleListProjects(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}
@@ -112,7 +112,7 @@ func handleListProjekte(w http.ResponseWriter, r *http.Request) {
// ({aktenzeichen, owning_office, court_ref}) for the frontend transition.
// aktenzeichen → reference, court_ref → case_number, owning_office is dropped
// (no longer part of the visibility model). Type defaults to 'case'.
func handleCreateProjekt(w http.ResponseWriter, r *http.Request) {
func handleCreateProject(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}
@@ -181,7 +181,7 @@ func handleCreateProjekt(w http.ResponseWriter, r *http.Request) {
}
// GET /api/projects/{id}
func handleGetProjekt(w http.ResponseWriter, r *http.Request) {
func handleGetProject(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}
@@ -203,7 +203,7 @@ func handleGetProjekt(w http.ResponseWriter, r *http.Request) {
}
// GET /api/projects/{id}/children — direct children.
func handleListProjektChildren(w http.ResponseWriter, r *http.Request) {
func handleListProjectChildren(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}
@@ -225,7 +225,7 @@ func handleListProjektChildren(w http.ResponseWriter, r *http.Request) {
}
// GET /api/projects/{id}/tree — full subtree depth-first (path-ordered).
func handleGetProjektTree(w http.ResponseWriter, r *http.Request) {
func handleGetProjectTree(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}
@@ -247,7 +247,7 @@ func handleGetProjektTree(w http.ResponseWriter, r *http.Request) {
}
// GET /api/projects/{id}/ancestors — ancestor chain for breadcrumbs.
func handleListProjektAncestors(w http.ResponseWriter, r *http.Request) {
func handleListProjectAncestors(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}
@@ -269,7 +269,7 @@ func handleListProjektAncestors(w http.ResponseWriter, r *http.Request) {
}
// PATCH /api/projects/{id}
func handleUpdateProjekt(w http.ResponseWriter, r *http.Request) {
func handleUpdateProject(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}
@@ -296,7 +296,7 @@ func handleUpdateProjekt(w http.ResponseWriter, r *http.Request) {
}
// DELETE /api/projects/{id}
func handleDeleteProjekt(w http.ResponseWriter, r *http.Request) {
func handleDeleteProject(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}
@@ -358,7 +358,7 @@ func handleListProjectEvents(w http.ResponseWriter, r *http.Request) {
}
// GET /api/projects/{id}/parties
func handleListParteien(w http.ResponseWriter, r *http.Request) {
func handleListParties(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}
@@ -380,7 +380,7 @@ func handleListParteien(w http.ResponseWriter, r *http.Request) {
}
// POST /api/projects/{id}/parties
func handleCreatePartei(w http.ResponseWriter, r *http.Request) {
func handleCreateParty(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}
@@ -407,7 +407,7 @@ func handleCreatePartei(w http.ResponseWriter, r *http.Request) {
}
// DELETE /api/parties/{id}
func handleDeletePartei(w http.ResponseWriter, r *http.Request) {
func handleDeleteParty(w http.ResponseWriter, r *http.Request) {
if !requireDB(w) {
return
}