because I got bored of customising my CV for every job
at main 38 lines 1.2 kB view raw
1import type { BaseMapper } from "@cv/system"; 2import { Injectable } from "@nestjs/common"; 3import type { Prisma } from "@prisma/client"; 4import { CredentialsMapper } from "./credentials.mapper"; 5import { User, UserRole } from "./user.entity"; 6 7type PrismaUserWithCredentials = Prisma.UserGetPayload<{ 8 include: { credentials: true }; 9}>; 10 11@Injectable() 12export class UserMapper implements BaseMapper<PrismaUserWithCredentials, User> { 13 constructor(private readonly credentialsMapper: CredentialsMapper) {} 14 15 toDomain(prismaUser: null): null; 16 toDomain(prismaUser: PrismaUserWithCredentials): User; 17 toDomain(prismaUser: PrismaUserWithCredentials | null): User | null; 18 toDomain(prismaUser: PrismaUserWithCredentials | null): User | null { 19 if (prismaUser === null) { 20 return null; 21 } 22 const credentials = prismaUser.credentials 23 ? this.credentialsMapper.toDomain(prismaUser.credentials) 24 : null; 25 return new User( 26 prismaUser.id, 27 prismaUser.name, 28 prismaUser.createdAt, 29 prismaUser.updatedAt, 30 credentials, 31 prismaUser.role as UserRole, 32 ); 33 } 34 35 mapToDomain(prismaUsers: PrismaUserWithCredentials[]): User[] { 36 return prismaUsers.map((user) => this.toDomain(user)); 37 } 38}