import { EducationType } from "@/education/education.types"; import { DocumentBuilder } from "@nestjs/swagger"; import { RedocOptions } from "@juicyllama/nestjs-redoc"; import educationDataset from "@/education/education.dataset"; 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: [], }; redocOptions.tagGroups.push(educationTagGroup); } educationDataset .getData() .slice(0, count) .forEach((education) => { educationTagGroup.tags.push(education.institute); document.addTag(education.institute, formatEducation(education)); }); educationTagGroup.tags.push("Education"); document.addTag("Education", "For my complete education, take a look at the GetEducation API endpoint."); return document; };