1
0
Fork 0
polaris-task-force/src/utils/event-log/emit.ts
Z8MB1E a8854034d3 feat(events): Add assignment transfer event types and emit functions
Add event logging constants for assignment transfer events:
- AssignmentTransferRequest: Request initiated by user
- AssignmentTransferApprove: Leader approved transfer
- AssignmentTransferReject: Leader rejected transfer with reason
- AssignmentTransferAppeal: User appealed a rejection
- AssignmentTransferResolve: Final resolution by superuser
- AssignmentTransferComplete: Transfer completed successfully
- AssignmentTransferCancel: Transfer cancelled

Add assignment-transfers to GameEventLogs TARGET_COLLECTIONS

Add emitGameEvent support for all transfer event types in src/utils/event-log/emit.ts

This provides audit trail and notification support for the transfer workflow.
2026-08-31 23:40:08 -04:00

71 lines
1.8 KiB
TypeScript

import type { EventType } from "./eventTypes";
import { broadcast } from "@/lib/realtime/bus";
interface GameEventInput {
type: EventType;
message: string;
actor?: number;
structure?: number;
targetCollection?:
| "users"
| "missions"
| "maps"
| "campaigns"
| "factions"
| "technologies"
| "assets"
| "resources"
| "structures"
| "vehicles"
| "game-structures"
| "game-vehicles"
| "game-npcs"
| "shipments"
| "bank-accounts"
| "bank-transactions"
| "ledger-entries"
| "locker-storages"
| "loadouts"
| "market-listings"
| "market-negotiations"
| "evaluations"
| "tickets"
| "game-servers"
| "assignment-transfers";
targetId?: number;
data?: Record<string, unknown>;
}
export async function emitGameEvent(
payload: Awaited<ReturnType<typeof import("payload").getPayload>>,
event: GameEventInput,
) {
try {
await payload.create({
collection: "game-event-logs",
data: {
system: true,
timestamp: new Date().toISOString(),
type: event.type,
actor: event.actor,
message: event.message,
data: event.data,
targetCollection: event.targetCollection,
targetId: event.targetId,
structure: event.structure,
},
depth: 0,
// Bins and tests run without an authenticated user; create access on
// game-event-logs requires one, so system events would be silently dropped.
overrideAccess: true,
});
broadcast("game-event", {
type: event.type,
actor: event.actor ?? null,
targetCollection: event.targetCollection ?? null,
targetId: event.targetId ?? null,
});
} catch (err) {
console.error("[EventLog] Failed to emit event:", err);
}
}