return data with get functions
This commit is contained in:
parent
1c533394b1
commit
532909d0d4
15 changed files with 394 additions and 380 deletions
|
|
@ -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));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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(`<li><strong>${skill.name}</strong> ${skill.description}</li>`), "");
|
||||
|
||||
|
|
|
|||
50
src/education/education.dataset.ts
Normal file
50
src/education/education.dataset.ts
Normal file
|
|
@ -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[],
|
||||
};
|
||||
|
|
@ -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>(EducationService);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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[];
|
||||
116
src/experiences/experiences.dataset.ts
Normal file
116
src/experiences/experiences.dataset.ts
Normal file
|
|
@ -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[],
|
||||
};
|
||||
|
|
@ -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>(ExperiencesService);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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[];
|
||||
122
src/skills/skills.dataset.ts
Normal file
122
src/skills/skills.dataset.ts
Normal file
|
|
@ -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[],
|
||||
};
|
||||
|
|
@ -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>(SkillsService);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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<SkillType>) {
|
||||
|
|
|
|||
|
|
@ -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[];
|
||||
Loading…
Reference in a new issue