return data with get functions

This commit is contained in:
Thom Werring 2023-10-24 08:10:19 +02:00
parent 1c533394b1
commit 532909d0d4
15 changed files with 394 additions and 380 deletions

View file

@ -1,7 +1,7 @@
import { EducationType } from "@/education/education.types"; import { EducationType } from "@/education/education.types";
import { DocumentBuilder } from "@nestjs/swagger"; import { DocumentBuilder } from "@nestjs/swagger";
import { RedocOptions } from "@juicyllama/nestjs-redoc"; import { RedocOptions } from "@juicyllama/nestjs-redoc";
import { education } from "@/education/education"; import { getEducationData } from "@/education/getEducationData";
const formatEducation = (education: EducationType) => { const formatEducation = (education: EducationType) => {
const period = `${formatDate(education.startDate)} - ${ const period = `${formatDate(education.startDate)} - ${
@ -50,7 +50,7 @@ export const addEducation = (
redocOptions.tagGroups.push(educationTagGroup); redocOptions.tagGroups.push(educationTagGroup);
} }
education.slice(0, count).forEach((education) => { getEducationData.slice(0, count).forEach((education) => {
educationTagGroup.tags.push(education.institute); educationTagGroup.tags.push(education.institute);
document.addTag(education.institute, formatEducation(education)); document.addTag(education.institute, formatEducation(education));
}); });

View file

@ -1,7 +1,7 @@
import { ExperienceType } from "@/experiences/experiences.types"; import { ExperienceType } from "@/experiences/experiences.types";
import { DocumentBuilder } from "@nestjs/swagger"; import { DocumentBuilder } from "@nestjs/swagger";
import { RedocOptions } from "@juicyllama/nestjs-redoc"; import { RedocOptions } from "@juicyllama/nestjs-redoc";
import { experiences } from "@/experiences/experiences"; import { experiencesDataset } from "@/experiences/experiences.dataset";
const formatExperience = (experience: ExperienceType) => { const formatExperience = (experience: ExperienceType) => {
const workPeriod = `${formatDate(experience.startDate)} - ${ const workPeriod = `${formatDate(experience.startDate)} - ${
@ -50,7 +50,7 @@ export const addExperiences = (
redocOptions.tagGroups.push(experienceTagGroup); redocOptions.tagGroups.push(experienceTagGroup);
} }
experiences.slice(0, count).forEach((experience) => { experiencesDataset.slice(0, count).forEach((experience) => {
experienceTagGroup.tags.push(experience.name); experienceTagGroup.tags.push(experience.name);
document.addTag(experience.name, formatExperience(experience)); document.addTag(experience.name, formatExperience(experience));
}); });

View file

@ -1,6 +1,6 @@
import { DocumentBuilder } from "@nestjs/swagger"; import { DocumentBuilder } from "@nestjs/swagger";
import { RedocOptions } from "@juicyllama/nestjs-redoc"; import { RedocOptions } from "@juicyllama/nestjs-redoc";
import { skills } from "@/skills/skills"; import { skillsDataset } from "@/skills/skills.dataset";
export const addSkills = ( export const addSkills = (
document: DocumentBuilder, document: DocumentBuilder,
@ -18,7 +18,7 @@ export const addSkills = (
} }
const intro = "A short excerpt of my skills are"; const intro = "A short excerpt of my skills are";
const skillList = skills const skillList = skillsDataset
.slice(0, count) .slice(0, count)
.reduce((list, skill) => list.concat(`<li><strong>${skill.name}</strong> ${skill.description}</li>`), ""); .reduce((list, skill) => list.concat(`<li><strong>${skill.name}</strong> ${skill.description}</li>`), "");

View 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[],
};

View file

@ -1,6 +1,6 @@
import { Test, TestingModule } from "@nestjs/testing"; import { Test, TestingModule } from "@nestjs/testing";
import { EducationService } from "@/education/education.service"; import { EducationService } from "@/education/education.service";
import { education } from "@/education/education"; import educationDataset from "@/education/education.dataset";
describe("SkillsService", () => { describe("SkillsService", () => {
let service: EducationService; let service: EducationService;
@ -10,29 +10,28 @@ describe("SkillsService", () => {
providers: [EducationService], providers: [EducationService],
}).compile(); }).compile();
education.splice(0); jest.spyOn(educationDataset, "getData").mockImplementation(() => [
{
education.push({ institute: "Oxford University",
institute: "Oxford University", city: "Oxford",
city: "Oxford", url: "https://www.ox.ac.uk/",
url: "https://www.ox.ac.uk/", course: "English",
course: "English", level: "Masters",
level: "Masters", startDate: new Date(2023, 0),
startDate: new Date(2023, 0), endDate: new Date(2023, 1),
endDate: new Date(2023, 1), description: "Got my english degree",
description: "Got my english degree", },
}); {
institute: "Massachusetts Institute of Technology",
education.push({ city: "Cambridge",
institute: "Massachusetts Institute of Technology", url: "https://www.mit.edu/",
city: "Cambridge", course: "Neuroscience",
url: "https://www.mit.edu/", level: "PHD",
course: "Neuroscience", startDate: new Date(2023, 2),
level: "PHD", endDate: new Date(2023, 3),
startDate: new Date(2023, 2), description: "Got my PHD in neuroscience",
endDate: new Date(2023, 3), },
description: "Got my PHD in neuroscience", ]);
});
service = module.get<EducationService>(EducationService); service = module.get<EducationService>(EducationService);
}); });

View file

@ -1,13 +1,13 @@
import { Injectable } from "@nestjs/common"; import { Injectable } from "@nestjs/common";
import { EducationDto, EducationType } from "@/education/education.types"; import { EducationDto, EducationType } from "@/education/education.types";
import { education } from "@/education/education"; import educationDataset from "@/education/education.dataset";
@Injectable() @Injectable()
export class EducationService { export class EducationService {
private readonly education: readonly EducationDto[]; private readonly education: readonly EducationDto[];
constructor() { constructor() {
this.education = EducationDto.asDto(education).sort((educationA, educationB) => this.education = EducationDto.asDto(educationDataset.getData()).sort((educationA, educationB) =>
educationA.startDate < educationB.startDate ? 1 : -1 educationA.startDate < educationB.startDate ? 1 : -1
); );
} }

View file

@ -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[];

View 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[],
};

View file

@ -1,8 +1,8 @@
import { Test, TestingModule } from "@nestjs/testing"; import { Test, TestingModule } from "@nestjs/testing";
import { ExperiencesService } from "./experiences.service"; import { ExperiencesService } from "./experiences.service";
import { SkillsService } from "@/skills/skills.service"; import { SkillsService } from "@/skills/skills.service";
import { experiences } from "@/experiences/experiences"; import experiencesDataset from "@/experiences/experiences.dataset";
import { skills } from "@/skills/skills"; import skillsDataset from "@/skills/skills.dataset";
describe("ExperiencesService", () => { describe("ExperiencesService", () => {
let service: ExperiencesService; let service: ExperiencesService;
@ -12,53 +12,54 @@ describe("ExperiencesService", () => {
providers: [ExperiencesService, SkillsService], providers: [ExperiencesService, SkillsService],
}).compile(); }).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({ jest.spyOn(skillsDataset, "getData").mockImplementation(() => [
name: "Employer A", {
city: "City A", name: "Writing tests",
url: "https://example.com/", description: "Writing tests",
jobTitle: "Tester", category: "Testing",
startDate: new Date(2023, 0), },
endDate: new Date(2023, 1), {
description: `Description of work`, name: "TDD",
skills: [ description: "Test Driven Development",
{ category: "Testing",
category: "Testing", },
}, {
], name: "OOP",
}); description: "Object Orientated Programming",
experiences.push({ category: "Programming style",
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",
});
service = module.get<ExperiencesService>(ExperiencesService); service = module.get<ExperiencesService>(ExperiencesService);
}); });

View file

@ -1,7 +1,7 @@
import { Injectable } from "@nestjs/common"; import { Injectable } from "@nestjs/common";
import { ExperienceDto, ExperienceType } from "@/experiences/experiences.types"; import { ExperienceDto, ExperienceType } from "@/experiences/experiences.types";
import { SkillsService } from "@/skills/skills.service"; import { SkillsService } from "@/skills/skills.service";
import { experiences } from "@/experiences/experiences"; import experiencesDataset from "@/experiences/experiences.dataset";
import { SkillDto } from "@/skills/skills.types"; import { SkillDto } from "@/skills/skills.types";
@Injectable() @Injectable()
@ -9,8 +9,8 @@ export class ExperiencesService {
private readonly experiences: readonly ExperienceDto[]; private readonly experiences: readonly ExperienceDto[];
constructor(private readonly skillsService: SkillsService) { constructor(private readonly skillsService: SkillsService) {
this.experiences = ExperienceDto.asDto(this.linkSkills(experiences)).sort((experienceA, experienceB) => this.experiences = ExperienceDto.asDto(this.linkSkills(experiencesDataset.getData())).sort(
experienceA.startDate < experienceB.startDate ? 1 : -1 (experienceA, experienceB) => (experienceA.startDate < experienceB.startDate ? 1 : -1)
); );
} }

View file

@ -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[];

View 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[],
};

View file

@ -1,6 +1,6 @@
import { Test, TestingModule } from "@nestjs/testing"; import { Test, TestingModule } from "@nestjs/testing";
import { SkillsService } from "./skills.service"; import { SkillsService } from "./skills.service";
import { skills } from "@/skills/skills"; import skillsDataset from "@/skills/skills.dataset";
describe("SkillsService", () => { describe("SkillsService", () => {
let service: SkillsService; let service: SkillsService;
@ -10,22 +10,24 @@ describe("SkillsService", () => {
providers: [SkillsService], providers: [SkillsService],
}).compile(); }).compile();
skills.splice(0); jest.spyOn(skillsDataset, "getData").mockImplementation(() => [
skills.push({ {
name: "Writing tests", name: "Writing tests",
description: "Writing tests", description: "Writing tests",
category: "Testing", category: "Testing",
}); },
skills.push({ {
name: "TDD", name: "TDD",
description: "Test Driven Development", description: "Test Driven Development",
category: "Testing", category: "Testing",
}); },
skills.push({ {
name: "OOP", name: "OOP",
description: "Object Orientated Programming", description: "Object Orientated Programming",
category: "Programming style", category: "Programming style",
}); },
]);
service = module.get<SkillsService>(SkillsService); service = module.get<SkillsService>(SkillsService);
}); });

View file

@ -1,13 +1,15 @@
import { Injectable } from "@nestjs/common"; import { Injectable } from "@nestjs/common";
import { SkillDto, SkillType } from "@/skills/skills.types"; import { SkillDto, SkillType } from "@/skills/skills.types";
import { skills } from "@/skills/skills"; import skillsDataset from "@/skills/skills.dataset";
@Injectable() @Injectable()
export class SkillsService { export class SkillsService {
private readonly skills: readonly SkillDto[]; private readonly skills: readonly SkillDto[];
constructor() { 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>) { getMany(filter?: Partial<SkillType>) {

View file

@ -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[];