Something went wrong. Try again.
because I got bored of customising my CV for every job
Something went wrong. Try again.
2.2 kB · 83 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384import { Injectable } from "@nestjs/common";import type { Prisma } from "@prisma/client";import { cvMapper } from "@/modules/cv-template/cv.mapper";import { VacancyMapper } from "@/modules/vacancies/vacancy.mapper";import { Application, type ApplicationStatusRelation,} from "./application.entity";
type PrismaApplicationWithRelations = Prisma.ApplicationGetPayload<{ include: { user: true; status: true; vacancy: { include: { company: true; role: true; level: true; jobType: true; skills: true; }; }; cv: { include: { template: true; }; }; };}>;
@Injectable()export class ApplicationMapper { constructor(private readonly vacancyMapper: VacancyMapper) {}
toDomain( prismaApplication: PrismaApplicationWithRelations | null, ): Application | null { if (!prismaApplication) { return null; }
const status: ApplicationStatusRelation = { id: prismaApplication.status.id, name: prismaApplication.status.name, description: prismaApplication.status.description, createdAt: prismaApplication.status.createdAt, updatedAt: prismaApplication.status.updatedAt, };
const vacancy = this.vacancyMapper.toDomain(prismaApplication.vacancy); if (!vacancy) { throw new Error("Vacancy is required for Application"); }
const cv = prismaApplication.cv ? cvMapper.toDomain(prismaApplication.cv) : null;
return new Application( prismaApplication.id, prismaApplication.userId, prismaApplication.profileId, vacancy, prismaApplication.statusId, status, prismaApplication.appliedAt, prismaApplication.createdAt, prismaApplication.updatedAt, cv, prismaApplication.coverLetter ?? undefined, ); }
mapToDomainWithRelations( prismaApplications: PrismaApplicationWithRelations[], ): Application[] { return prismaApplications .map((application) => this.toDomain(application)) .filter( (application): application is Application => application !== null, ); }}