t-paliad-025 — Phase 1: backend rename.
Migrations 018+019 rewritten from scratch with English table/column
names throughout. Since v2 schema (018/019) has never been applied to
youpc prod DB, this is a clean replacement — not an ALTER RENAME chain.
Pre-existing German tables (parteien, fristen, termine, dokumente,
akten_events, notizen) are renamed inline in 018 via ALTER TABLE … RENAME
TO alongside the akte_id → project_id column rewrite.
Renames applied:
projekte → projects
projekt_teams → project_teams
projekt_events → project_events (via akten_events → project_events)
fristen → deadlines
termine → appointments
parteien → parties
notizen → notes
dezernate → departments
dezernat_mitglieder → department_members
dokumente → documents
can_see_projekt → can_see_project
notiz_is_visible → note_is_visible
akte_id / frist_id / termin_id / akten_event_id → project_id /
deadline_id / appointment_id / project_event_id
termin_type → appointment_type
Go types + services renamed:
Projekt / ProjektService / ProjektEvent / ProjektTeamMember
Frist / FristService / FristWithProjekt
Termin / TerminService / TerminWithProjekt / TerminType
Notiz / NotizService / ChecklistInstanceWithProjekt
Dezernat / DezernatService / DezernatMitglied
Partei / Parteien / ParteienService
Files renamed (git mv):
internal/services/{projekt,frist,termin,notiz,dezernat,parteien}_service.go
→ {project,deadline,appointment,note,department,party}_service.go
internal/handlers/{projekte,fristen,fristen_pages,termine,termine_pages,
notizen,dezernate,akten_pages,gerichte,glossar,checklisten}.go
→ {projects,deadlines,deadlines_pages,appointments,appointments_pages,
notes,departments,projects_pages,courts,glossary,checklists}.go
internal/checklisten/ → internal/checklists/
internal/db/migrations/018_projekte_v2.* → 018_projects_v2.*
internal/db/migrations/019_seed_dezernate_from_user_text.*
→ 019_seed_departments_from_user_text.*
User-facing i18n strings (DE/EN labels) stay untouched. Product names
Fristenrechner / Kostenrechner / Gebührentabellen stay German.
Build + vet + tests clean.
32 lines
1.1 KiB
SQL
32 lines
1.1 KiB
SQL
-- Best-effort migration of the paliad.users.dezernat free-text field into
|
|
-- proper paliad.departments + paliad.department_members rows.
|
|
--
|
|
-- For every distinct non-empty users.dezernat value, create a Department in
|
|
-- the creator's primary office (first user we see with that name wins).
|
|
-- Every user whose free-text matches the Department name becomes a member.
|
|
-- The free-text column stays as-is (forward compatibility for users who
|
|
-- haven't been linked); a later cleanup can drop it once all rows have
|
|
-- a proper department_members row.
|
|
|
|
INSERT INTO paliad.departments (id, name, lead_user_id, office, created_at, updated_at)
|
|
SELECT gen_random_uuid(),
|
|
btrim(u.dezernat),
|
|
NULL,
|
|
MIN(u.office),
|
|
now(),
|
|
now()
|
|
FROM paliad.users u
|
|
WHERE u.dezernat IS NOT NULL
|
|
AND btrim(u.dezernat) <> ''
|
|
GROUP BY btrim(u.dezernat)
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
INSERT INTO paliad.department_members (department_id, user_id, created_at)
|
|
SELECT d.id, u.id, now()
|
|
FROM paliad.users u
|
|
JOIN paliad.departments d
|
|
ON d.name = btrim(u.dezernat)
|
|
WHERE u.dezernat IS NOT NULL
|
|
AND btrim(u.dezernat) <> ''
|
|
ON CONFLICT DO NOTHING;
|