46 lines
1.6 KiB
TypeScript
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);
|
|
}
|