Something went wrong. Try again.
because I got bored of customising my CV for every job
Something went wrong. Try again.
1.6 kB · 58 lines
TypeScript
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859import { 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<string, ApplicationStatusRelation | null>;
constructor(readonly prisma: PrismaService) { this.loader = new DataLoader<string, ApplicationStatusRelation | null>( 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<string, ApplicationStatusRelation>(); 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<ApplicationStatusRelation | null> { 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)); }}