Files
teatea-pension/app/api/elders/route.ts

62 lines
1.6 KiB
TypeScript

import { randomUUID } from "node:crypto";
import type { Elder } from "@/modules/elders/types";
import { validateElderInput } from "@/modules/elders/types";
import { jsonFailure, jsonSuccess, readJsonBody } from "@/modules/core/server/api";
import { recordAuditLog } from "@/modules/core/server/audit";
import { requirePermission } from "@/modules/core/server/auth";
import { readData, updateData } from "@/modules/core/server/store";
export async function GET(): Promise<Response> {
const auth = await requirePermission("elder:read", {
action: "elder.list",
targetType: "elder",
});
if (!auth.success) {
return auth.response;
}
const data = await readData();
return jsonSuccess("老人档案已加载", { elders: data.elders });
}
export async function POST(request: Request): Promise<Response> {
const auth = await requirePermission("elder:create", {
action: "elder.create",
targetType: "elder",
});
if (!auth.success) {
return auth.response;
}
const input = validateElderInput(await readJsonBody(request));
if (!input.success) {
return jsonFailure(input.reason);
}
const now = new Date().toISOString();
const elder: Elder = {
...input.data,
id: randomUUID(),
createdAt: now,
updatedAt: now,
};
await updateData((data) => {
data.elders = [elder, ...data.elders];
});
await recordAuditLog({
actor: auth.context.account,
action: "elder.create",
targetType: "elder",
targetId: elder.id,
result: "success",
reason: `新增老人档案:${elder.name}`,
});
return jsonSuccess("老人档案已创建", { elder }, 201);
}