"use server"; import { revalidatePath } from "next/cache"; import { currentUserId } from "@/lib/auth/session"; import { runMutation, type ActionResult } from "@/lib/db/rpc"; /** * Eine Organisationseinheit unter einer bestehenden anlegen. * * Bewusst die einzige Änderung an der Struktur, die es aus der Anwendung * heraus gibt. Umbenennen, verschieben und schliessen fehlen nicht aus * Zeitmangel: org_units.parent_id trägt kein Datum, ein Verschieben änderte * damit auch jede Auswertung auf einen vergangenen Stichtag. Siehe Migration * 20260929120000. */ const ORG_PFADE = ["/orgchart", "/positions", "/"]; export async function createOrgUnit(payload: { parent_id: string; org_number: string; name: string; unit_type: "Bereich" | "Abteilung" | "Team"; valid_from: string; /** Leer lassen heisst: die Einheit entsteht ohne Leitung. */ leitung_taetigkeit?: string; }): Promise { const result = await runMutation(await currentUserId(), "create_org_unit", payload); if (!result.success) return result; // Die Einheit taucht in drei Ansichten auf, und in allen dreien wäre sie // sonst erst nach dem nächsten harten Neuladen zu sehen. for (const path of ORG_PFADE) revalidatePath(path); return result; } /** * Eine Organisationseinheit entfernen. * * Geht nur, solange nichts darunter hängt und nie etwas hing. Alles andere * weist die Datenbankfunktion mit dem Grund ab — ein Schliessen zum Stichtag * gibt es nicht, weil org_units nirgends gegen den Stichtag gelesen wird. */ export async function deleteOrgUnit(orgUnitId: string): Promise { const result = await runMutation(await currentUserId(), "delete_org_unit", { org_unit_id: orgUnitId }); if (!result.success) return result; for (const path of ORG_PFADE) revalidatePath(path); return result; }