import { EducationType } from "@/education/education.types"; import { DocumentBuilder } from "@nestjs/swagger"; import { RedocOptions } from "@juicyllama/nestjs-redoc"; import { education } from "@/education/education"; const formatEducation = (education: EducationType) => { const period = `${formatDate(education.startDate)} - ${ education.endDate ? formatDate(education.endDate) : "present" }`; const institute = education.url ? `${education.institute}` : education.institute; const description = education.description.split("\n").join("

"); return `

${institute}, ${education.city}
${education.level} - ${education.course}

${description}

`; }; const formatDate = (date: Date, locale: string | string[] = "en-GB"): string => { const dateFormatter = new Intl.DateTimeFormat(locale, { dateStyle: "long", }); const dateParts = dateFormatter.formatToParts(date).reduce>( (result, datePart: Intl.DateTimeFormatPart) => { if (datePart.type !== "literal") { result[datePart.type] = datePart.value; } return result; }, { day: "", month: "", year: "" } ); return `${dateParts.month} ${dateParts.year}`; }; export const addEducation = ( document: DocumentBuilder, count: number = 5, redocOptions: RedocOptions ): DocumentBuilder => { let educationTagGroup = redocOptions.tagGroups.find((tagGroup) => tagGroup.name === "Education"); if (!educationTagGroup) { educationTagGroup = { name: "Education", tags: ["Education"], }; redocOptions.tagGroups.push(educationTagGroup); } education.slice(0, count).forEach((education) => { educationTagGroup.tags.push(education.institute); document.addTag(education.institute, formatEducation(education)); }); return document; };