t-paliad-025 Phase 3 — frontend rename pass:
File renames (git mv, preserving history):
frontend/src/
akten.tsx → projects.tsx
akten-neu.tsx → projects-new.tsx
akten-detail.tsx → projects-detail.tsx
fristen.tsx → deadlines.tsx
fristen-neu.tsx → deadlines-new.tsx
fristen-detail.tsx → deadlines-detail.tsx
fristen-kalender.tsx → deadlines-calendar.tsx
termine.tsx → appointments.tsx
termine-neu.tsx → appointments-new.tsx
termine-detail.tsx → appointments-detail.tsx
termine-kalender.tsx → appointments-calendar.tsx
einstellungen.tsx → settings.tsx
checklisten*.tsx → checklists*.tsx
gerichte.tsx → courts.tsx
glossar.tsx → glossary.tsx
frontend/src/client/ — same renames, plus notizen.ts → notes.ts.
Render exports renamed (renderAkten → renderProjects, renderFristen →
renderDeadlines, …). build.ts rewired to new names.
Client-side changes:
* fetch() API paths: /api/projekte → /api/projects, /api/fristen →
/api/deadlines, /api/termine → /api/appointments, /api/notizen →
/api/notes, /api/gerichte → /api/courts, /api/glossar → /api/glossary,
/api/dezernate → /api/departments, /api/parteien → /api/parties,
/api/checklisten → /api/checklists. Legacy /api/akten aliases removed.
* Navigation href/template strings: /akten → /projects, /fristen →
/deadlines, /termine → /appointments, /einstellungen → /settings,
/notizen → /notes, /checklisten → /checklists, /gerichte → /courts,
/glossar → /glossary. Nested paths /neu → /new, /verlauf → /events,
/kinder → /children, /kalender → /calendar, /dokumente → /documents.
* Interface names in client TS: Frist → Deadline, Termin → Appointment,
Notiz → Note, Partei → Party, Akte → Project, ProjektMini → ProjectMini,
Dezernat → Department, DezernatMitglied → DepartmentMember.
* JSON wire-format keys follow backend: projekt_id → project_id, akte_id
→ project_id, frist_id → deadline_id, termin_id → appointment_id,
akten_event_id → project_event_id, dezernat_id → department_id,
termin_type → appointment_type.
Go handlers (projects_pages.go, deadlines_pages.go, appointments_pages.go,
checklists.go, courts.go, glossary.go) serve the correctly-named HTML
files from dist/.
Kept German (user-facing i18n + product names):
* i18n keys/strings (src/client/i18n.ts) — DE labels and their keys
* Product names: fristenrechner, kostenrechner, gebuehrentabellen
Build verified: go build / vet / test clean; bun run build clean;
dist/ contains all 26 English-named HTML pages.
118 lines
5.6 KiB
TypeScript
118 lines
5.6 KiB
TypeScript
import { mkdir, cp, rm } from "fs/promises";
|
|
import { join } from "path";
|
|
import { renderIndex } from "./src/index";
|
|
import { renderLogin } from "./src/login";
|
|
import { renderKostenrechner } from "./src/kostenrechner";
|
|
import { renderFristenrechner } from "./src/fristenrechner";
|
|
import { renderDownloads } from "./src/downloads";
|
|
import { renderLinks } from "./src/links";
|
|
import { renderGlossary } from "./src/glossary";
|
|
import { renderGebuehrentabellen } from "./src/gebuehrentabellen";
|
|
import { renderChecklists } from "./src/checklists";
|
|
import { renderChecklistsDetail } from "./src/checklists-detail";
|
|
import { renderChecklistsInstance } from "./src/checklists-instance";
|
|
import { renderCourts } from "./src/courts";
|
|
import { renderProjects } from "./src/projects";
|
|
import { renderProjectsNew } from "./src/projects-new";
|
|
import { renderProjectsDetail } from "./src/projects-detail";
|
|
import { renderDeadlines } from "./src/deadlines";
|
|
import { renderDeadlinesNew } from "./src/deadlines-new";
|
|
import { renderDeadlinesDetail } from "./src/deadlines-detail";
|
|
import { renderDeadlinesCalendar } from "./src/deadlines-calendar";
|
|
import { renderAppointments } from "./src/appointments";
|
|
import { renderAppointmentsNew } from "./src/appointments-new";
|
|
import { renderAppointmentsDetail } from "./src/appointments-detail";
|
|
import { renderAppointmentsCalendar } from "./src/appointments-calendar";
|
|
import { renderSettings } from "./src/settings";
|
|
import { renderDashboard } from "./src/dashboard";
|
|
import { renderOnboarding } from "./src/onboarding";
|
|
|
|
const DIST = join(import.meta.dir, "dist");
|
|
|
|
async function build() {
|
|
// Clean dist/
|
|
await rm(DIST, { recursive: true, force: true });
|
|
await mkdir(join(DIST, "assets"), { recursive: true });
|
|
|
|
// Bundle client-side JS
|
|
const result = await Bun.build({
|
|
entrypoints: [
|
|
join(import.meta.dir, "src/client/index.ts"),
|
|
join(import.meta.dir, "src/client/login.ts"),
|
|
join(import.meta.dir, "src/client/kostenrechner.ts"),
|
|
join(import.meta.dir, "src/client/fristenrechner.ts"),
|
|
join(import.meta.dir, "src/client/downloads.ts"),
|
|
join(import.meta.dir, "src/client/links.ts"),
|
|
join(import.meta.dir, "src/client/glossary.ts"),
|
|
join(import.meta.dir, "src/client/gebuehrentabellen.ts"),
|
|
join(import.meta.dir, "src/client/checklists.ts"),
|
|
join(import.meta.dir, "src/client/checklists-detail.ts"),
|
|
join(import.meta.dir, "src/client/checklists-instance.ts"),
|
|
join(import.meta.dir, "src/client/courts.ts"),
|
|
join(import.meta.dir, "src/client/projects.ts"),
|
|
join(import.meta.dir, "src/client/projects-new.ts"),
|
|
join(import.meta.dir, "src/client/projects-detail.ts"),
|
|
join(import.meta.dir, "src/client/deadlines.ts"),
|
|
join(import.meta.dir, "src/client/deadlines-new.ts"),
|
|
join(import.meta.dir, "src/client/deadlines-detail.ts"),
|
|
join(import.meta.dir, "src/client/deadlines-calendar.ts"),
|
|
join(import.meta.dir, "src/client/appointments.ts"),
|
|
join(import.meta.dir, "src/client/appointments-new.ts"),
|
|
join(import.meta.dir, "src/client/appointments-detail.ts"),
|
|
join(import.meta.dir, "src/client/appointments-calendar.ts"),
|
|
join(import.meta.dir, "src/client/settings.ts"),
|
|
join(import.meta.dir, "src/client/dashboard.ts"),
|
|
join(import.meta.dir, "src/client/onboarding.ts"),
|
|
],
|
|
outdir: join(DIST, "assets"),
|
|
naming: "[name].js",
|
|
minify: true,
|
|
});
|
|
|
|
if (!result.success) {
|
|
console.error("JS build failed:");
|
|
for (const log of result.logs) {
|
|
console.error(log);
|
|
}
|
|
process.exit(1);
|
|
}
|
|
|
|
// Copy CSS
|
|
await cp(
|
|
join(import.meta.dir, "src/styles/global.css"),
|
|
join(DIST, "assets/global.css"),
|
|
);
|
|
|
|
// Render HTML pages
|
|
await Bun.write(join(DIST, "index.html"), renderIndex());
|
|
await Bun.write(join(DIST, "login.html"), renderLogin("login.js"));
|
|
await Bun.write(join(DIST, "kostenrechner.html"), renderKostenrechner());
|
|
await Bun.write(join(DIST, "fristenrechner.html"), renderFristenrechner());
|
|
await Bun.write(join(DIST, "downloads.html"), renderDownloads());
|
|
await Bun.write(join(DIST, "links.html"), renderLinks());
|
|
await Bun.write(join(DIST, "glossary.html"), renderGlossary());
|
|
await Bun.write(join(DIST, "gebuehrentabellen.html"), renderGebuehrentabellen());
|
|
await Bun.write(join(DIST, "checklists.html"), renderChecklists());
|
|
await Bun.write(join(DIST, "checklists-detail.html"), renderChecklistsDetail());
|
|
await Bun.write(join(DIST, "checklists-instance.html"), renderChecklistsInstance());
|
|
await Bun.write(join(DIST, "courts.html"), renderCourts());
|
|
await Bun.write(join(DIST, "projects.html"), renderProjects());
|
|
await Bun.write(join(DIST, "projects-new.html"), renderProjectsNew());
|
|
await Bun.write(join(DIST, "projects-detail.html"), renderProjectsDetail());
|
|
await Bun.write(join(DIST, "deadlines.html"), renderDeadlines());
|
|
await Bun.write(join(DIST, "deadlines-new.html"), renderDeadlinesNew());
|
|
await Bun.write(join(DIST, "deadlines-detail.html"), renderDeadlinesDetail());
|
|
await Bun.write(join(DIST, "deadlines-calendar.html"), renderDeadlinesCalendar());
|
|
await Bun.write(join(DIST, "appointments.html"), renderAppointments());
|
|
await Bun.write(join(DIST, "appointments-new.html"), renderAppointmentsNew());
|
|
await Bun.write(join(DIST, "appointments-detail.html"), renderAppointmentsDetail());
|
|
await Bun.write(join(DIST, "appointments-calendar.html"), renderAppointmentsCalendar());
|
|
await Bun.write(join(DIST, "settings.html"), renderSettings());
|
|
await Bun.write(join(DIST, "dashboard.html"), renderDashboard());
|
|
await Bun.write(join(DIST, "onboarding.html"), renderOnboarding());
|
|
|
|
console.log("Build complete \u2192 dist/");
|
|
}
|
|
|
|
build();
|