Refine workspaces and event publishing; harden uploads and email delivery
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { auditEvents, type Database } from "@album/database";
|
||||
import { auditEvents, user, guests, type Database } from "@album/database";
|
||||
import { and, eq } from "drizzle-orm";
|
||||
import { getDb } from "@album/database";
|
||||
|
||||
export async function writeAudit(
|
||||
@@ -11,8 +12,17 @@ export async function writeAudit(
|
||||
subjectId: string;
|
||||
metadata?: Record<string, string | number | boolean | null>;
|
||||
},
|
||||
db: Database = getDb(),
|
||||
db: Pick<Database, "insert" | "select"> = getDb(),
|
||||
) {
|
||||
const [actor] = input.actorUserId ? await db.select({ name: user.name }).from(user).where(eq(user.id, input.actorUserId)).limit(1) : [];
|
||||
let subjectLabel = `${input.subjectType} ${input.subjectId}`;
|
||||
if (input.subjectType === "user") {
|
||||
const [subject] = await db.select({ name: user.name }).from(user).where(eq(user.id, input.subjectId)).limit(1);
|
||||
if (subject) subjectLabel = subject.name;
|
||||
} else if (input.subjectType === "guest" && input.eventId) {
|
||||
const [subject] = await db.select({ name: guests.displayName }).from(guests).where(and(eq(guests.eventId, input.eventId), eq(guests.id, input.subjectId))).limit(1);
|
||||
if (subject) subjectLabel = subject.name ?? "Anonymous guest";
|
||||
}
|
||||
await db.insert(auditEvents).values({
|
||||
groupId: input.groupId ?? null,
|
||||
eventId: input.eventId ?? null,
|
||||
@@ -20,6 +30,6 @@ export async function writeAudit(
|
||||
action: input.action,
|
||||
subjectType: input.subjectType,
|
||||
subjectId: input.subjectId,
|
||||
metadata: input.metadata ?? {},
|
||||
metadata: { ...input.metadata, subjectLabel, actorName: actor?.name ?? "System" },
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user