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: readonly ExperienceDto[]; 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 Array<[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(), }; }); } }