import { Injectable } from "@nestjs/common"; import { ExperienceDto, ExperienceType } from "@/experiences/experiences.types"; import { SkillsService } from "@/skills/skills.service"; import { experiences } from "@/experiences/experiences"; import { SkillDto } from "@/skills/skills.types"; @Injectable() export class ExperiencesService { private readonly experiences: ReadonlyArray; constructor( private readonly skillsService: SkillsService ) { this.experiences = ExperienceDto.asDto(this.linkSkills(experiences)) .sort((experienceA, experienceB) => experienceA.startDate > experienceB.startDate ? 1 : -1); } getMany(filter?: Partial>) { const filtersValues = Object.entries(filter ?? {}).map(([key, filterValue]) => ([key, new RegExp(filterValue, "i")])) as [keyof Omit, RegExp][]; if (!filter || filtersValues.length === 0) { return this.experiences; } return this.experiences.filter((experience) => filtersValues.every(([key, filterValue]) => filterValue.test(experience[key]))); } private linkSkills(experiences: ExperienceType[]): Array }> { return experiences.map((experience) => { return { ...experience, skills: experience.skills.map(partialSkill => this.skillsService.getMany(partialSkill)).flat() } }) } }