diff --git a/src/cvdocs/education.ts b/src/cvdocs/education.ts
index e8af285..0785003 100644
--- a/src/cvdocs/education.ts
+++ b/src/cvdocs/education.ts
@@ -1,7 +1,7 @@
import { EducationType } from "@/education/education.types";
import { DocumentBuilder } from "@nestjs/swagger";
import { RedocOptions } from "@juicyllama/nestjs-redoc";
-import { education } from "@/education/education";
+import { getEducationData } from "@/education/getEducationData";
const formatEducation = (education: EducationType) => {
const period = `${formatDate(education.startDate)} - ${
@@ -50,7 +50,7 @@ export const addEducation = (
redocOptions.tagGroups.push(educationTagGroup);
}
- education.slice(0, count).forEach((education) => {
+ getEducationData.slice(0, count).forEach((education) => {
educationTagGroup.tags.push(education.institute);
document.addTag(education.institute, formatEducation(education));
});
diff --git a/src/cvdocs/experience.ts b/src/cvdocs/experience.ts
index 2ab3396..0547655 100644
--- a/src/cvdocs/experience.ts
+++ b/src/cvdocs/experience.ts
@@ -1,7 +1,7 @@
import { ExperienceType } from "@/experiences/experiences.types";
import { DocumentBuilder } from "@nestjs/swagger";
import { RedocOptions } from "@juicyllama/nestjs-redoc";
-import { experiences } from "@/experiences/experiences";
+import { experiencesDataset } from "@/experiences/experiences.dataset";
const formatExperience = (experience: ExperienceType) => {
const workPeriod = `${formatDate(experience.startDate)} - ${
@@ -50,7 +50,7 @@ export const addExperiences = (
redocOptions.tagGroups.push(experienceTagGroup);
}
- experiences.slice(0, count).forEach((experience) => {
+ experiencesDataset.slice(0, count).forEach((experience) => {
experienceTagGroup.tags.push(experience.name);
document.addTag(experience.name, formatExperience(experience));
});
diff --git a/src/cvdocs/skills.ts b/src/cvdocs/skills.ts
index 93be08d..558cd15 100644
--- a/src/cvdocs/skills.ts
+++ b/src/cvdocs/skills.ts
@@ -1,6 +1,6 @@
import { DocumentBuilder } from "@nestjs/swagger";
import { RedocOptions } from "@juicyllama/nestjs-redoc";
-import { skills } from "@/skills/skills";
+import { skillsDataset } from "@/skills/skills.dataset";
export const addSkills = (
document: DocumentBuilder,
@@ -18,7 +18,7 @@ export const addSkills = (
}
const intro = "A short excerpt of my skills are";
- const skillList = skills
+ const skillList = skillsDataset
.slice(0, count)
.reduce((list, skill) => list.concat(`
${skill.name} ${skill.description}`), "");
diff --git a/src/education/education.dataset.ts b/src/education/education.dataset.ts
new file mode 100644
index 0000000..3465e0b
--- /dev/null
+++ b/src/education/education.dataset.ts
@@ -0,0 +1,50 @@
+import { EducationType } from "@/education/education.types";
+
+export default {
+ getData: (): EducationType[] =>
+ [
+ {
+ institute: "Hogeschool Utrecht",
+ city: "Utrecht",
+ url: "https://hu.nl",
+ course: "Mediatechnologie",
+ level: "HBO",
+ startDate: new Date(2010, 8),
+ endDate: new Date(2015, 9),
+ description: `My time at Hogeschool Utrecht was a period of academic and personal growth.
+While pursuing my Media Technology degree, I took a gap year to co-found and serve as treasurer of Sv. Ingenium, a university-affiliated student society. This experience sharpened my organizational, communication, and leadership skills, proving invaluable throughout my studies and beyond.
+Additionally, active participation in projects and presentations enhanced my presentation skills and public speaking confidence.`,
+ },
+ {
+ institute: "Mediacollege Amsterdam",
+ city: "Amsterdam",
+ url: "https://www.ma-web.nl/",
+ course: "Interactive Design & Media technology",
+ level: "MBO 4",
+ startDate: new Date(2006, 8),
+ endDate: new Date(2010, 5),
+ description: `My time at Mediacollege Amsterdam began with Interactive Design, but programming quickly captured my interest. ActionScript 2, now a relic of the past, marked my introduction to the world of programming, while PHP and JavaScript truly sparked my passion.
+With help of my teachers and a careful consideration of course, I transitioned towards Media Technology, paving the way for my future in software development.`,
+ },
+ {
+ institute: "Clusius college",
+ city: "Castricum",
+ url: "https://www.vonknh.nl/vmbo/castricum",
+ course: "General secondary education",
+ level: "VMBO - GL",
+ startDate: new Date(2002, 8),
+ endDate: new Date(2006, 5),
+ description: "",
+ },
+ {
+ institute: "Watermolen",
+ city: "Koog aan de zaan",
+ url: "https://www.obsdewatermolen.nl/",
+ course: "General primary education",
+ level: "Primary education",
+ startDate: new Date(1994, 8),
+ endDate: new Date(2002, 5),
+ description: "",
+ },
+ ] satisfies EducationType[],
+};
diff --git a/src/education/education.service.spec.ts b/src/education/education.service.spec.ts
index 499545c..2951adc 100644
--- a/src/education/education.service.spec.ts
+++ b/src/education/education.service.spec.ts
@@ -1,6 +1,6 @@
import { Test, TestingModule } from "@nestjs/testing";
import { EducationService } from "@/education/education.service";
-import { education } from "@/education/education";
+import educationDataset from "@/education/education.dataset";
describe("SkillsService", () => {
let service: EducationService;
@@ -10,29 +10,28 @@ describe("SkillsService", () => {
providers: [EducationService],
}).compile();
- education.splice(0);
-
- education.push({
- institute: "Oxford University",
- city: "Oxford",
- url: "https://www.ox.ac.uk/",
- course: "English",
- level: "Masters",
- startDate: new Date(2023, 0),
- endDate: new Date(2023, 1),
- description: "Got my english degree",
- });
-
- education.push({
- institute: "Massachusetts Institute of Technology",
- city: "Cambridge",
- url: "https://www.mit.edu/",
- course: "Neuroscience",
- level: "PHD",
- startDate: new Date(2023, 2),
- endDate: new Date(2023, 3),
- description: "Got my PHD in neuroscience",
- });
+ jest.spyOn(educationDataset, "getData").mockImplementation(() => [
+ {
+ institute: "Oxford University",
+ city: "Oxford",
+ url: "https://www.ox.ac.uk/",
+ course: "English",
+ level: "Masters",
+ startDate: new Date(2023, 0),
+ endDate: new Date(2023, 1),
+ description: "Got my english degree",
+ },
+ {
+ institute: "Massachusetts Institute of Technology",
+ city: "Cambridge",
+ url: "https://www.mit.edu/",
+ course: "Neuroscience",
+ level: "PHD",
+ startDate: new Date(2023, 2),
+ endDate: new Date(2023, 3),
+ description: "Got my PHD in neuroscience",
+ },
+ ]);
service = module.get(EducationService);
});
diff --git a/src/education/education.service.ts b/src/education/education.service.ts
index 89b6006..56bc0c3 100644
--- a/src/education/education.service.ts
+++ b/src/education/education.service.ts
@@ -1,13 +1,13 @@
import { Injectable } from "@nestjs/common";
import { EducationDto, EducationType } from "@/education/education.types";
-import { education } from "@/education/education";
+import educationDataset from "@/education/education.dataset";
@Injectable()
export class EducationService {
private readonly education: readonly EducationDto[];
constructor() {
- this.education = EducationDto.asDto(education).sort((educationA, educationB) =>
+ this.education = EducationDto.asDto(educationDataset.getData()).sort((educationA, educationB) =>
educationA.startDate < educationB.startDate ? 1 : -1
);
}
diff --git a/src/education/education.ts b/src/education/education.ts
deleted file mode 100644
index 911b7f7..0000000
--- a/src/education/education.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { EducationType } from "@/education/education.types";
-
-export const education: EducationType[] = [
- {
- institute: "Hogeschool Utrecht",
- city: "Utrecht",
- url: "https://hu.nl",
- course: "Mediatechnologie",
- level: "HBO",
- startDate: new Date(2010, 8),
- endDate: new Date(2015, 9),
- description: `My time at Hogeschool Utrecht was a period of academic and personal growth.
-While pursuing my Media Technology degree, I took a gap year to co-found and serve as treasurer of Sv. Ingenium, a university-affiliated student society. This experience sharpened my organizational, communication, and leadership skills, proving invaluable throughout my studies and beyond.
-Additionally, active participation in projects and presentations enhanced my presentation skills and public speaking confidence.`,
- },
- {
- institute: "Mediacollege Amsterdam",
- city: "Amsterdam",
- url: "https://www.ma-web.nl/",
- course: "Interactive Design & Media technology",
- level: "MBO 4",
- startDate: new Date(2006, 8),
- endDate: new Date(2010, 5),
- description: `My time at Mediacollege Amsterdam began with Interactive Design, but programming quickly captured my interest. ActionScript 2, now a relic of the past, marked my introduction to the world of programming, while PHP and JavaScript truly sparked my passion.
-With help of my teachers and a careful consideration of course, I transitioned towards Media Technology, paving the way for my future in software development.`,
- },
- {
- institute: "Clusius college",
- city: "Castricum",
- url: "https://www.vonknh.nl/vmbo/castricum",
- course: "General secondary education",
- level: "VMBO - GL",
- startDate: new Date(2002, 8),
- endDate: new Date(2006, 5),
- description: "",
- },
- {
- institute: "Watermolen",
- city: "Koog aan de zaan",
- url: "https://www.obsdewatermolen.nl/",
- course: "General primary education",
- level: "Primary education",
- startDate: new Date(1994, 8),
- endDate: new Date(2002, 5),
- description: "",
- },
-] satisfies EducationType[];
diff --git a/src/experiences/experiences.dataset.ts b/src/experiences/experiences.dataset.ts
new file mode 100644
index 0000000..e0a29d7
--- /dev/null
+++ b/src/experiences/experiences.dataset.ts
@@ -0,0 +1,116 @@
+import { ExperienceType } from "@/experiences/experiences.types";
+
+export default {
+ getData: () =>
+ [
+ {
+ name: "Saysimple / Just Internet Group",
+ city: "Haarlem",
+ url: "https://saysimple.com/",
+ jobTitle: "Senior Developer / DevOps",
+ startDate: new Date(2018, 9, 1),
+ endDate: null,
+ description: `My journey at Just Internet Group began in 2018 with Cocoon, a SaaS digital asset management (DAM) system. Here I implemented ElasticSearch & Kibana to effectively monitor asset uploads and downloads.
+In 2019, I transitioned to Saysimple, where I had the opportunity to contribute to the development of our Customer Communication Platform from the ground up. I participated in creating a microservice architecture using Docker and NodeJS, enabling modularity, scalability, and efficient resource allocation. Additionally, I am responsible for establishing and maintaining our CI/CD pipelines, the EKS cluster, and HAProxy load balancers, contributing to the overall system operation and efficient development processes.
+Furthermore, I am a member of the team that handles outages and maintenance during off-hours.
+`,
+ skills: [
+ {
+ category:
+ "AWS|Containerization|DevOps|Business Intelligence|Team Management|Problem-solving|Collaboration",
+ },
+ {
+ name: "NodeJs|Git|PHP",
+ },
+ ],
+ },
+ {
+ name: "Blackorange",
+ city: "Amsterdam",
+ url: "http://blackorange.nl/",
+ jobTitle: "Junior Developer / System Administrator",
+ startDate: new Date(2014, 9, 1),
+ endDate: new Date(2018, 8, 30),
+ description: `My internship at Blackorange transformed into a full-time role as a Junior Developer and System Administrator, where I actively contributed to the development and maintenance of various web projects.
+Notably, I lead to the migration from managed hosting to self-hosted infrastructure using Nginx and PHP-FPM, and I participated in the development of our in-house CMS system using PHP Laravel.`,
+ skills: [
+ {
+ name: "PHP|Git|Server|Communication|Problem-solving",
+ },
+ ],
+ },
+ {
+ name: "Mediacollege Amsterdam",
+ city: "Amsterdam",
+ url: "https://ma-web.nl",
+ jobTitle: "Internship / Teacher in training",
+ startDate: new Date(2013, 7, 1),
+ endDate: new Date(2014, 1, 31),
+ description: `My internship as a teacher-in-training at Mediacollege Amsterdam during my Education minor was an enriching experience. I guided students through the intricacies of PHP and JavaScript programming, fostering their comprehension of essential concepts. Alongside teaching, I provided individualized support, assisting students with coursework challenges and promoting their academic success. This internship honed my communication, problem-solving, and event organization skills, shaping my approach to effective and engaging teaching.`,
+ skills: [
+ {
+ name: "Communication|Problem-solving|Event Organization",
+ },
+ ],
+ },
+ {
+ name: "Werring Webdevelopment",
+ city: "Middenbeemster",
+ jobTitle: "ZZP",
+ startDate: new Date(2012, 9, 1),
+ endDate: new Date(2016, 11, 31),
+ description: `During my college years, I started as a freelancer as Werring Webdevelopment. I catered to the web development needs of small businesses, primarily building WordPress websites and assisting with domain registration and email setup.`,
+ skills: [
+ {
+ name: "PHP|Web",
+ },
+ ],
+ },
+ {
+ name: "Sv. Ingenium",
+ city: "Utrecht",
+ url: "http://ingeniumcabobianci.nl/",
+ jobTitle: "Treasurer",
+ startDate: new Date(2012, 8, 1),
+ endDate: new Date(2014, 7, 31),
+ description: `At Sv. Ingenium, a student society affiliated with Hogeschool Utrecht, I served as Treasurer during a period of significant transformation.
+In 2012, multiple smaller study societies merged at the request of the university to form Sv. Ingenium. During my tenure, I oversaw financial operations, ensuring the society's stability and growth. I also played a key role in organizing educational international trips to CERN (Switzerland) and Volvo (Sweden), among others.
+In late 2014, Sv. Ingenium merged with a larger society to become Ingenium Cabo Bianci.`,
+ skills: [
+ {
+ name: "Finances|Communication",
+ },
+ {
+ category: "Organization",
+ },
+ ],
+ },
+ {
+ name: "Chellomedia / Film1",
+ city: "Amsterdam",
+ url: "http://film1.nl/",
+ jobTitle: "Internship",
+ startDate: new Date(2008, 2, 1),
+ endDate: new Date(2008, 5, 30),
+ description: `My internship at Chellomedia/Film1 immersed me in the world of digital media and caffeine. Apart from crafting animated banners and modifying movie promotional websites with ActionScript 3, I discovered a hidden talent for serving coffee that kept the team energized and creatively fueled. `,
+ skills: [
+ {
+ name: "Teamwork|Communication",
+ },
+ ],
+ },
+ {
+ name: "Pressofoon B.V.",
+ city: "Heemskerk",
+ jobTitle: "Internship",
+ startDate: new Date(2007, 8, 1),
+ endDate: new Date(2009, 11, 31),
+ description: `My internship at Pressofoon B.V. was an opportunity to learn and contribute alongside experienced professionals. Guided by mentors, I applied my developing programming skills, crafting JavaScript, HTML, and PHP scripts for multiple websites. I also assisted in redesigning the company website, learning from the design team's expertise. Alongside these technical contributions, I observed and participated in a new product launch, gaining valuable insights into product marketing and customer engagement. Throughout my internship, I strived to be a team player, collaborating effectively to achieve common goals.`,
+ skills: [
+ {
+ name: "Teamwork|Communication",
+ },
+ ],
+ },
+ ] satisfies ExperienceType[],
+};
diff --git a/src/experiences/experiences.service.spec.ts b/src/experiences/experiences.service.spec.ts
index 5b82972..c6c1ab5 100644
--- a/src/experiences/experiences.service.spec.ts
+++ b/src/experiences/experiences.service.spec.ts
@@ -1,8 +1,8 @@
import { Test, TestingModule } from "@nestjs/testing";
import { ExperiencesService } from "./experiences.service";
import { SkillsService } from "@/skills/skills.service";
-import { experiences } from "@/experiences/experiences";
-import { skills } from "@/skills/skills";
+import experiencesDataset from "@/experiences/experiences.dataset";
+import skillsDataset from "@/skills/skills.dataset";
describe("ExperiencesService", () => {
let service: ExperiencesService;
@@ -12,53 +12,54 @@ describe("ExperiencesService", () => {
providers: [ExperiencesService, SkillsService],
}).compile();
- experiences.splice(0);
+ jest.spyOn(experiencesDataset, "getData").mockImplementation(() => [
+ {
+ name: "Employer A",
+ city: "City A",
+ url: "https://example.com/",
+ jobTitle: "Tester",
+ startDate: new Date(2023, 0),
+ endDate: new Date(2023, 1),
+ description: `Description of work`,
+ skills: [
+ {
+ category: "Testing",
+ },
+ ],
+ },
+ {
+ name: "Employer B",
+ city: "City B",
+ url: "https://example.com/",
+ jobTitle: "Developer",
+ startDate: new Date(2023, 1),
+ endDate: new Date(2023, 2),
+ description: `Description of work`,
+ skills: [
+ {
+ category: "Programming",
+ },
+ ],
+ },
+ ]);
- experiences.push({
- name: "Employer A",
- city: "City A",
- url: "https://example.com/",
- jobTitle: "Tester",
- startDate: new Date(2023, 0),
- endDate: new Date(2023, 1),
- description: `Description of work`,
- skills: [
- {
- category: "Testing",
- },
- ],
- });
- experiences.push({
- name: "Employer B",
- city: "City B",
- url: "https://example.com/",
- jobTitle: "Developer",
- startDate: new Date(2023, 1),
- endDate: new Date(2023, 2),
- description: `Description of work`,
- skills: [
- {
- category: "Programming",
- },
- ],
- });
-
- skills.splice(0);
- skills.push({
- name: "Writing tests",
- description: "Writing tests",
- category: "Testing",
- });
- skills.push({
- name: "TDD",
- description: "Test Driven Development",
- category: "Testing",
- });
- skills.push({
- name: "OOP",
- description: "Object Orientated Programming",
- category: "Programming style",
- });
+ jest.spyOn(skillsDataset, "getData").mockImplementation(() => [
+ {
+ name: "Writing tests",
+ description: "Writing tests",
+ category: "Testing",
+ },
+ {
+ name: "TDD",
+ description: "Test Driven Development",
+ category: "Testing",
+ },
+ {
+ name: "OOP",
+ description: "Object Orientated Programming",
+ category: "Programming style",
+ },
+ ]);
service = module.get(ExperiencesService);
});
diff --git a/src/experiences/experiences.service.ts b/src/experiences/experiences.service.ts
index d9add27..434eb9d 100644
--- a/src/experiences/experiences.service.ts
+++ b/src/experiences/experiences.service.ts
@@ -1,7 +1,7 @@
import { Injectable } from "@nestjs/common";
import { ExperienceDto, ExperienceType } from "@/experiences/experiences.types";
import { SkillsService } from "@/skills/skills.service";
-import { experiences } from "@/experiences/experiences";
+import experiencesDataset from "@/experiences/experiences.dataset";
import { SkillDto } from "@/skills/skills.types";
@Injectable()
@@ -9,8 +9,8 @@ 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
+ this.experiences = ExperienceDto.asDto(this.linkSkills(experiencesDataset.getData())).sort(
+ (experienceA, experienceB) => (experienceA.startDate < experienceB.startDate ? 1 : -1)
);
}
diff --git a/src/experiences/experiences.ts b/src/experiences/experiences.ts
deleted file mode 100644
index 8437a07..0000000
--- a/src/experiences/experiences.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-import { ExperienceType } from "@/experiences/experiences.types";
-
-export const experiences: ExperienceType[] = [
- {
- name: "Saysimple / Just Internet Group",
- city: "Haarlem",
- url: "https://saysimple.com/",
- jobTitle: "Senior Developer / DevOps",
- startDate: new Date(2018, 9, 1),
- endDate: null,
- description: `My journey at Just Internet Group began in 2018 with Cocoon, a SaaS digital asset management (DAM) system. Here I implemented ElasticSearch & Kibana to effectively monitor asset uploads and downloads.
-In 2019, I transitioned to Saysimple, where I had the opportunity to contribute to the development of our Customer Communication Platform from the ground up. I participated in creating a microservice architecture using Docker and NodeJS, enabling modularity, scalability, and efficient resource allocation. Additionally, I am responsible for establishing and maintaining our CI/CD pipelines, the EKS cluster, and HAProxy load balancers, contributing to the overall system operation and efficient development processes.
-Furthermore, I am a member of the team that handles outages and maintenance during off-hours.
-`,
- skills: [
- {
- category:
- "AWS|Containerization|DevOps|Business Intelligence|Team Management|Problem-solving|Collaboration",
- },
- {
- name: "NodeJs|Git|PHP",
- },
- ],
- },
- {
- name: "Blackorange",
- city: "Amsterdam",
- url: "http://blackorange.nl/",
- jobTitle: "Junior Developer / System Administrator",
- startDate: new Date(2014, 9, 1),
- endDate: new Date(2018, 8, 30),
- description: `My internship at Blackorange transformed into a full-time role as a Junior Developer and System Administrator, where I actively contributed to the development and maintenance of various web projects.
-Notably, I lead to the migration from managed hosting to self-hosted infrastructure using Nginx and PHP-FPM, and I participated in the development of our in-house CMS system using PHP Laravel.`,
- skills: [
- {
- name: "PHP|Git|Server|Communication|Problem-solving",
- },
- ],
- },
- {
- name: "Mediacollege Amsterdam",
- city: "Amsterdam",
- url: "https://ma-web.nl",
- jobTitle: "Internship / Teacher in training",
- startDate: new Date(2013, 7, 1),
- endDate: new Date(2014, 1, 31),
- description: `My internship as a teacher-in-training at Mediacollege Amsterdam during my Education minor was an enriching experience. I guided students through the intricacies of PHP and JavaScript programming, fostering their comprehension of essential concepts. Alongside teaching, I provided individualized support, assisting students with coursework challenges and promoting their academic success. This internship honed my communication, problem-solving, and event organization skills, shaping my approach to effective and engaging teaching.`,
- skills: [
- {
- name: "Communication|Problem-solving|Event Organization",
- },
- ],
- },
- {
- name: "Werring Webdevelopment",
- city: "Middenbeemster",
- jobTitle: "ZZP",
- startDate: new Date(2012, 9, 1),
- endDate: new Date(2016, 11, 31),
- description: `During my college years, I started as a freelancer as Werring Webdevelopment. I catered to the web development needs of small businesses, primarily building WordPress websites and assisting with domain registration and email setup.`,
- skills: [
- {
- name: "PHP|Web",
- },
- ],
- },
- {
- name: "Sv. Ingenium",
- city: "Utrecht",
- url: "http://ingeniumcabobianci.nl/",
- jobTitle: "Treasurer",
- startDate: new Date(2012, 8, 1),
- endDate: new Date(2014, 7, 31),
- description: `At Sv. Ingenium, a student society affiliated with Hogeschool Utrecht, I served as Treasurer during a period of significant transformation.
-In 2012, multiple smaller study societies merged at the request of the university to form Sv. Ingenium. During my tenure, I oversaw financial operations, ensuring the society's stability and growth. I also played a key role in organizing educational international trips to CERN (Switzerland) and Volvo (Sweden), among others.
-In late 2014, Sv. Ingenium merged with a larger society to become Ingenium Cabo Bianci.`,
- skills: [
- {
- name: "Finances|Communication",
- },
- {
- category: "Organization",
- },
- ],
- },
- {
- name: "Chellomedia / Film1",
- city: "Amsterdam",
- url: "http://film1.nl/",
- jobTitle: "Internship",
- startDate: new Date(2008, 2, 1),
- endDate: new Date(2008, 5, 30),
- description: `My internship at Chellomedia/Film1 immersed me in the world of digital media and caffeine. Apart from crafting animated banners and modifying movie promotional websites with ActionScript 3, I discovered a hidden talent for serving coffee that kept the team energized and creatively fueled. `,
- skills: [
- {
- name: "Teamwork|Communication",
- },
- ],
- },
- {
- name: "Pressofoon B.V.",
- city: "Heemskerk",
- jobTitle: "Internship",
- startDate: new Date(2007, 8, 1),
- endDate: new Date(2009, 11, 31),
- description: `My internship at Pressofoon B.V. was an opportunity to learn and contribute alongside experienced professionals. Guided by mentors, I applied my developing programming skills, crafting JavaScript, HTML, and PHP scripts for multiple websites. I also assisted in redesigning the company website, learning from the design team's expertise. Alongside these technical contributions, I observed and participated in a new product launch, gaining valuable insights into product marketing and customer engagement. Throughout my internship, I strived to be a team player, collaborating effectively to achieve common goals.`,
- skills: [
- {
- name: "Teamwork|Communication",
- },
- ],
- },
-] satisfies ExperienceType[];
diff --git a/src/skills/skills.dataset.ts b/src/skills/skills.dataset.ts
new file mode 100644
index 0000000..f358ab3
--- /dev/null
+++ b/src/skills/skills.dataset.ts
@@ -0,0 +1,122 @@
+import { SkillType } from "@/skills/skills.types";
+
+export default {
+ getData: () =>
+ [
+ {
+ name: "Git",
+ description:
+ "Efficiently manage Git repositories, handling pull/merge requests, and ensuring version control integrity.",
+ category: "Version control systems",
+ },
+ {
+ name: "NodeJs, TypeScript, and Javascript",
+ description: "Develop and maintain scalable microservices using NodeJs, TypeScript, and Javascript.",
+ category: "Programming languages",
+ },
+ {
+ name: "Docker",
+ description:
+ "Containerize and orchestrate microservices in local development environments using Docker.",
+ category: "Containerization",
+ },
+ {
+ name: "Kubernetes",
+ description: "Deploy and manage containerized microservices on AWS (EKS) using Kubernetes.",
+ category: "Containerization",
+ },
+ {
+ name: "EKS",
+ description: "Administer and optimize Elastic Kubernetes Service (EKS) on AWS.",
+ category: "AWS",
+ },
+ {
+ name: "API Gateway",
+ description: "Design, implement, and deploy cloud-based applications using API Gateway on AWS.",
+ category: "AWS",
+ },
+ {
+ name: "Lambda",
+ description: "Develop and deploy serverless cloud-based applications using Lambda on AWS.",
+ category: "AWS",
+ },
+ {
+ name: "CloudWatch",
+ description: "Monitor and analyze cloud-based applications using CloudWatch on AWS.",
+ category: "AWS",
+ },
+ {
+ name: "ElasticSearch, Logstash and Kibana (ELK Stack)",
+ description:
+ "Extract valuable insights and generate comprehensive statistics from SaaS platform data using the ELK Stack.",
+ category: "Business Intelligence",
+ },
+ {
+ name: "CI/CD pipelines",
+ description: "Automate testing, building, and deployment processes using CI/CD pipelines.",
+ category: "DevOps",
+ },
+ {
+ name: "Server Management",
+ description: "Configure, maintain, and troubleshoot hosting servers to ensure optimal performance.",
+ category: "DevOps",
+ },
+ {
+ name: "Webhosting",
+ description: "Provision and manage web hosting environments for websites and email services.",
+ category: "DevOps",
+ },
+ {
+ name: "Web development",
+ description: "Design and develop custom WordPress websites using industry best practices.",
+ category: "Web development",
+ },
+ {
+ name: "PHP",
+ description: "Build and maintain dynamic websites and applications using PHP Laravel framework.",
+ category: "Programming languages",
+ },
+ {
+ name: "One-on-ones",
+ description:
+ "Conduct regular one-on-one meetings with junior developers and interns to guide their professional growth.",
+ category: "Team Management",
+ },
+ {
+ name: "Scrum Master",
+ description:
+ "Facilitate Scrum meetings, manage sprint backlogs, refine user stories, and collaborate with the Product Owner.",
+ category: "Collaboration",
+ },
+ {
+ name: "Finances",
+ description:
+ "Oversee financial operations, manage budgets, and ensure financial compliance for a student organization.",
+ category: "Finance",
+ },
+ {
+ name: "Event Organization",
+ description:
+ "Plan, organize, and execute educational events for students, ensuring engaging and informative experiences.",
+ category: "Organization",
+ },
+ {
+ name: "Communication",
+ description:
+ "Effectively communicate ideas and information both verbally and in writing, adapting communication style to suit the audience and purpose.",
+ category: "Collaboration",
+ },
+ {
+ name: "Problem-solving",
+ description:
+ "Apply analytical and creative thinking to identify, analyze, and resolve complex technical challenges, considering multiple perspectives and potential solutions.",
+ category: "Problem-solving",
+ },
+ {
+ name: "Teamwork",
+ description:
+ "Collaborate effectively with team members in a Scrum environment, sharing knowledge, providing constructive feedback, and contributing to a positive and productive team dynamic.",
+ category: "Collaboration",
+ },
+ ] satisfies SkillType[],
+};
diff --git a/src/skills/skills.service.spec.ts b/src/skills/skills.service.spec.ts
index 4649df3..0cb82a6 100644
--- a/src/skills/skills.service.spec.ts
+++ b/src/skills/skills.service.spec.ts
@@ -1,6 +1,6 @@
import { Test, TestingModule } from "@nestjs/testing";
import { SkillsService } from "./skills.service";
-import { skills } from "@/skills/skills";
+import skillsDataset from "@/skills/skills.dataset";
describe("SkillsService", () => {
let service: SkillsService;
@@ -10,22 +10,24 @@ describe("SkillsService", () => {
providers: [SkillsService],
}).compile();
- skills.splice(0);
- skills.push({
- name: "Writing tests",
- description: "Writing tests",
- category: "Testing",
- });
- skills.push({
- name: "TDD",
- description: "Test Driven Development",
- category: "Testing",
- });
- skills.push({
- name: "OOP",
- description: "Object Orientated Programming",
- category: "Programming style",
- });
+ jest.spyOn(skillsDataset, "getData").mockImplementation(() => [
+ {
+ name: "Writing tests",
+ description: "Writing tests",
+ category: "Testing",
+ },
+ {
+ name: "TDD",
+ description: "Test Driven Development",
+ category: "Testing",
+ },
+ {
+ name: "OOP",
+ description: "Object Orientated Programming",
+ category: "Programming style",
+ },
+ ]);
+
service = module.get(SkillsService);
});
diff --git a/src/skills/skills.service.ts b/src/skills/skills.service.ts
index 0b71144..ef1407e 100644
--- a/src/skills/skills.service.ts
+++ b/src/skills/skills.service.ts
@@ -1,13 +1,15 @@
import { Injectable } from "@nestjs/common";
import { SkillDto, SkillType } from "@/skills/skills.types";
-import { skills } from "@/skills/skills";
+import skillsDataset from "@/skills/skills.dataset";
@Injectable()
export class SkillsService {
private readonly skills: readonly SkillDto[];
constructor() {
- this.skills = SkillDto.asDto(skills).sort((skillA, skillB) => (skillA.category > skillB.category ? 1 : -1));
+ this.skills = SkillDto.asDto(skillsDataset.getData()).sort((skillA, skillB) =>
+ skillA.category > skillB.category ? 1 : -1
+ );
}
getMany(filter?: Partial) {
diff --git a/src/skills/skills.ts b/src/skills/skills.ts
deleted file mode 100644
index 84579d2..0000000
--- a/src/skills/skills.ts
+++ /dev/null
@@ -1,118 +0,0 @@
-import { SkillType } from "@/skills/skills.types";
-
-export const skills: SkillType[] = [
- {
- name: "Git",
- description:
- "Efficiently manage Git repositories, handling pull/merge requests, and ensuring version control integrity.",
- category: "Version control systems",
- },
- {
- name: "NodeJs, TypeScript, and Javascript",
- description: "Develop and maintain scalable microservices using NodeJs, TypeScript, and Javascript.",
- category: "Programming languages",
- },
- {
- name: "Docker",
- description: "Containerize and orchestrate microservices in local development environments using Docker.",
- category: "Containerization",
- },
- {
- name: "Kubernetes",
- description: "Deploy and manage containerized microservices on AWS (EKS) using Kubernetes.",
- category: "Containerization",
- },
- {
- name: "EKS",
- description: "Administer and optimize Elastic Kubernetes Service (EKS) on AWS.",
- category: "AWS",
- },
- {
- name: "API Gateway",
- description: "Design, implement, and deploy cloud-based applications using API Gateway on AWS.",
- category: "AWS",
- },
- {
- name: "Lambda",
- description: "Develop and deploy serverless cloud-based applications using Lambda on AWS.",
- category: "AWS",
- },
- {
- name: "CloudWatch",
- description: "Monitor and analyze cloud-based applications using CloudWatch on AWS.",
- category: "AWS",
- },
- {
- name: "ElasticSearch, Logstash and Kibana (ELK Stack)",
- description:
- "Extract valuable insights and generate comprehensive statistics from SaaS platform data using the ELK Stack.",
- category: "Business Intelligence",
- },
- {
- name: "CI/CD pipelines",
- description: "Automate testing, building, and deployment processes using CI/CD pipelines.",
- category: "DevOps",
- },
- {
- name: "Server Management",
- description: "Configure, maintain, and troubleshoot hosting servers to ensure optimal performance.",
- category: "DevOps",
- },
- {
- name: "Webhosting",
- description: "Provision and manage web hosting environments for websites and email services.",
- category: "DevOps",
- },
- {
- name: "Web development",
- description: "Design and develop custom WordPress websites using industry best practices.",
- category: "Web development",
- },
- {
- name: "PHP",
- description: "Build and maintain dynamic websites and applications using PHP Laravel framework.",
- category: "Programming languages",
- },
- {
- name: "One-on-ones",
- description:
- "Conduct regular one-on-one meetings with junior developers and interns to guide their professional growth.",
- category: "Team Management",
- },
- {
- name: "Scrum Master",
- description:
- "Facilitate Scrum meetings, manage sprint backlogs, refine user stories, and collaborate with the Product Owner.",
- category: "Collaboration",
- },
- {
- name: "Finances",
- description:
- "Oversee financial operations, manage budgets, and ensure financial compliance for a student organization.",
- category: "Finance",
- },
- {
- name: "Event Organization",
- description:
- "Plan, organize, and execute educational events for students, ensuring engaging and informative experiences.",
- category: "Organization",
- },
- {
- name: "Communication",
- description:
- "Effectively communicate ideas and information both verbally and in writing, adapting communication style to suit the audience and purpose.",
- category: "Collaboration",
- },
- {
- name: "Problem-solving",
- description:
- "Apply analytical and creative thinking to identify, analyze, and resolve complex technical challenges, considering multiple perspectives and potential solutions.",
- category: "Problem-solving",
- },
- {
- name: "Teamwork",
- description:
- "Collaborate effectively with team members in a Scrum environment, sharing knowledge, providing constructive feedback, and contributing to a positive and productive team dynamic.",
- category: "Collaboration",
- },
-] satisfies SkillType[];