Files
EpicNext-Cms/src/lib/housekeeping-recent-work.ts
T
Simo 5574e601bb
CI / check (pull_request) Successful in 36s
CI / release (pull_request) Skipped
CI / deploy (pull_request) Skipped
feat(housekeeping): personalize command deck
2026-08-30 16:55:10 +02:00

46 lines
1.6 KiB
TypeScript

import "server-only";
import { desc, eq } from "drizzle-orm";
import type {
HousekeepingCapabilityContext,
HousekeepingResult,
} from "@/features/housekeeping/foundation/contracts";
import type { HousekeepingRecentItem } from "@/features/housekeeping/foundation/recent/recent-work";
import { createHousekeepingRecentWorkService } from "@/features/housekeeping/foundation/recent/recent-work";
import { createHousekeepingRegistry } from "@/features/housekeeping/foundation/registry";
import { HOUSEKEEPING_MANIFESTS } from "@/features/housekeeping/manifests";
import { AdminAuditLog, db } from "@/lib/db";
import { logAudit } from "@/lib/services/audit";
const recentWorkService = createHousekeepingRecentWorkService({
registry: createHousekeepingRegistry(HOUSEKEEPING_MANIFESTS),
async loadRows(userId, limit) {
return db
.select({
action: AdminAuditLog.action,
target: AdminAuditLog.target,
domain: AdminAuditLog.domain,
outcome: AdminAuditLog.outcome,
createdAt: AdminAuditLog.createdAt,
})
.from(AdminAuditLog)
.where(eq(AdminAuditLog.userId, userId))
.orderBy(desc(AdminAuditLog.id))
.limit(limit);
},
writeAudit: logAudit,
});
export async function loadHousekeepingRecentWork(
context: HousekeepingCapabilityContext,
): Promise<HousekeepingResult<readonly HousekeepingRecentItem[]>> {
return recentWorkService.load(context);
}
export async function recordHousekeepingRouteVisit(
routeId: string,
context: HousekeepingCapabilityContext,
): Promise<HousekeepingResult<HousekeepingRecentItem>> {
return recentWorkService.recordVisit(routeId, context);
}