import { PrismaService } from "@cv/core"; import { Injectable, Scope } from "@nestjs/common"; import DataLoader from "dataloader"; import type { ApplicationStatusRelation } from "./application.entity"; @Injectable({ scope: Scope.REQUEST }) export class ApplicationStatusDataLoaderService { private loader: DataLoader; constructor(readonly prisma: PrismaService) { this.loader = new DataLoader( async (ids: readonly string[]) => { const statuses = await prisma.applicationStatus.findMany({ where: { id: { in: [...ids] }, }, select: { id: true, name: true, description: true, createdAt: true, updatedAt: true, }, }); const statusMap = new Map(); for (const { id, name, description, createdAt, updatedAt, } of statuses) { statusMap.set(id, { id, name, description, createdAt, updatedAt, }); } return ids.map((id) => statusMap.get(id) ?? null); }, ); } async load(key: string): Promise { return this.loader.load(key); } async loadMany( keys: readonly string[], ): Promise<(ApplicationStatusRelation | null)[]> { const results = await this.loader.loadMany(keys); return results.map((result) => (result instanceof Error ? null : result)); } }