because I got bored of customising my CV for every job
1import type { BaseMapper } from "@cv/system";
2import { Injectable } from "@nestjs/common";
3import type { Prisma } from "@prisma/client";
4
5type PrismaUserFile = Prisma.UserFileGetPayload<object>;
6
7import { UserFile } from "./user-file.entity";
8
9@Injectable()
10export class UserFileMapper implements BaseMapper<PrismaUserFile, UserFile> {
11 toDomain(prisma: null): null;
12 toDomain(prisma: PrismaUserFile): UserFile;
13 toDomain(prisma: PrismaUserFile | null): UserFile | null;
14 toDomain(prisma: PrismaUserFile | null): UserFile | null {
15 if (!prisma) return null;
16
17 return new UserFile(
18 prisma.id,
19 prisma.profileId,
20 prisma.fingerprint,
21 prisma.fileName,
22 prisma.mimeType,
23 prisma.sizeBytes,
24 prisma.source,
25 prisma.status,
26 prisma.statusMessage,
27 prisma.resultJson,
28 prisma.error,
29 prisma.createdAt,
30 prisma.updatedAt,
31 );
32 }
33
34 mapToDomain(items: PrismaUserFile[]): UserFile[] {
35 return items
36 .map((item) => this.toDomain(item))
37 .filter((item): item is UserFile => item !== null);
38 }
39}