auditing
This commit is contained in:
@@ -10,6 +10,7 @@ import type {
|
||||
ProjectSummaryDto,
|
||||
} from "@mrp/shared";
|
||||
|
||||
import { logAuditEvent } from "../../lib/audit.js";
|
||||
import { prisma } from "../../lib/prisma.js";
|
||||
|
||||
const projectModel = (prisma as any).project;
|
||||
@@ -356,7 +357,7 @@ export async function getProjectById(projectId: string) {
|
||||
return project ? mapProjectDetail(project as ProjectRecord) : null;
|
||||
}
|
||||
|
||||
export async function createProject(payload: ProjectInput) {
|
||||
export async function createProject(payload: ProjectInput, actorId?: string | null) {
|
||||
const validated = await validateProjectInput(payload);
|
||||
if (!validated.ok) {
|
||||
return { ok: false as const, reason: validated.reason };
|
||||
@@ -383,10 +384,25 @@ export async function createProject(payload: ProjectInput) {
|
||||
});
|
||||
|
||||
const project = await getProjectById(created.id);
|
||||
if (project) {
|
||||
await logAuditEvent({
|
||||
actorId,
|
||||
entityType: "project",
|
||||
entityId: created.id,
|
||||
action: "created",
|
||||
summary: `Created project ${project.projectNumber}.`,
|
||||
metadata: {
|
||||
projectNumber: project.projectNumber,
|
||||
customerId: project.customerId,
|
||||
status: project.status,
|
||||
priority: project.priority,
|
||||
},
|
||||
});
|
||||
}
|
||||
return project ? { ok: true as const, project } : { ok: false as const, reason: "Unable to load saved project." };
|
||||
}
|
||||
|
||||
export async function updateProject(projectId: string, payload: ProjectInput) {
|
||||
export async function updateProject(projectId: string, payload: ProjectInput, actorId?: string | null) {
|
||||
const existing = await projectModel.findUnique({
|
||||
where: { id: projectId },
|
||||
select: { id: true },
|
||||
@@ -421,5 +437,20 @@ export async function updateProject(projectId: string, payload: ProjectInput) {
|
||||
});
|
||||
|
||||
const project = await getProjectById(projectId);
|
||||
if (project) {
|
||||
await logAuditEvent({
|
||||
actorId,
|
||||
entityType: "project",
|
||||
entityId: projectId,
|
||||
action: "updated",
|
||||
summary: `Updated project ${project.projectNumber}.`,
|
||||
metadata: {
|
||||
projectNumber: project.projectNumber,
|
||||
customerId: project.customerId,
|
||||
status: project.status,
|
||||
priority: project.priority,
|
||||
},
|
||||
});
|
||||
}
|
||||
return project ? { ok: true as const, project } : { ok: false as const, reason: "Unable to load saved project." };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user