Downtime catalog

This commit is contained in:
Marcelo
2026-05-06 00:36:48 +00:00
parent 0491237bad
commit bfc1673d89
42 changed files with 8035 additions and 1093 deletions

View File

@@ -1,12 +1,8 @@
import { NextResponse } from "next/server";
import { prisma } from "@/lib/prisma";
import { requireSession } from "@/lib/auth/requireSession";
import {
flattenReasonCatalog,
loadFallbackReasonCatalog,
normalizeReasonCatalog,
type ReasonCatalogKind,
} from "@/lib/reasonCatalog";
import { flattenReasonCatalog, normalizeReasonCatalog, type ReasonCatalogKind } from "@/lib/reasonCatalog";
import { effectiveReasonCatalogForOrg, loadReasonCatalogFromDb } from "@/lib/reasonCatalogDb";
function asKind(value: string | null): ReasonCatalogKind | null {
const kind = String(value ?? "").toLowerCase();
@@ -26,20 +22,30 @@ export async function GET(req: Request) {
const orgSettings = await prisma.orgSettings.findUnique({
where: { orgId: session.orgId },
select: { defaultsJson: true },
select: { defaultsJson: true, version: true },
});
const defaultsJson =
orgSettings?.defaultsJson && typeof orgSettings.defaultsJson === "object" && !Array.isArray(orgSettings.defaultsJson)
? (orgSettings.defaultsJson as Record<string, unknown>)
const version = orgSettings?.version ?? 1;
const defaultsJson = orgSettings?.defaultsJson ?? null;
const fromDb = await loadReasonCatalogFromDb(session.orgId, version);
const catalog = await effectiveReasonCatalogForOrg(session.orgId, defaultsJson, version);
const defs =
defaultsJson && typeof defaultsJson === "object" && !Array.isArray(defaultsJson)
? (defaultsJson as Record<string, unknown>)
: {};
const settingsCatalog = normalizeReasonCatalog(defaultsJson.reasonCatalog ?? defaultsJson.reasonCatalogData);
const fallbackCatalog = await loadFallbackReasonCatalog();
const catalog = settingsCatalog ?? fallbackCatalog;
const rows = flattenReasonCatalog(catalog, kind);
const legacyJson = normalizeReasonCatalog(defs.reasonCatalog ?? defs.reasonCatalogData);
let source: "db" | "legacy" | "fallback";
if (fromDb) source = "db";
else if (legacyJson) source = "legacy";
else source = "fallback";
const rows = flattenReasonCatalog(catalog, kind, { activeOnly: true });
return NextResponse.json({
ok: true,
source: settingsCatalog ? "settings" : "fallback",
source,
kind,
catalogVersion: catalog.version,
categories: catalog[kind],