get keywords from api to avoid duplication, optimize some code

This commit is contained in:
2024-06-20 18:57:37 +02:00
parent 819881f9d9
commit 9ecb2d6769
5 changed files with 101 additions and 157 deletions

View File

@@ -1,71 +0,0 @@
export const KEYWORDS = {
BACKEND: [
'node.js',
'nestjs',
'nest.js',
'go',
'.net',
'asp.net',
'java',
'express',
'django',
'laravel',
'php',
],
LANGUAGES: [
'typescript',
'javascript',
'python',
'java',
'c#',
'c++',
'c',
'php',
'ruby',
'go',
'kotlin',
'swift',
'objective-c',
],
ORM: ['typeorm', 'prisma', 'sequelize', 'drizzle'],
get FRONTEND() {
return [
...this.FRONTEND_FRAMEWORK,
...this.STYLES,
...this.STATE_MANAGEMENT,
...this.TESTING,
'fsd',
]
},
FRONTEND_FRAMEWORK: [
'html',
'nuxt',
'react',
'remix',
'angular',
'vue',
'jquery',
'svelte',
'nextjs',
'next.js',
],
STYLES: ['css', 'sass', 'tailwind', 'styled-components', 'material ui', 'mui', 'bootstrap'],
STATE_MANAGEMENT: [
'redux',
'rtk',
'redux toolkit',
'redux toolkit query',
'effector',
'react-query',
'mobx',
],
DATABASES: ['mysql', 'postgres', 'mongodb', 'redis', 'cassandra', 'sqlite', 'firebase'],
DEVOPS: ['docker', 'kubernetes', 'jenkins', 'ansible', 'terraform'],
TESTING: ['jest', 'mocha', 'cypress', 'selenium', 'playwright', 'jasmine', 'puppeteer', 'vitest'],
MOBILE: ['react native', 'flutter', 'swift', 'kotlin', 'xamarin', 'objective-c'],
TOOLS: ['webpack', 'vite', 'graphql', 'rest', 'storybook'],
} as const
export const ALL_KEYWORDS = [...new Set(Object.values(KEYWORDS).flat().sort())]
export type Keyword = (typeof ALL_KEYWORDS)[number]

View File

@@ -1,7 +1,7 @@
import { Vacancies, VacancyData } from '~/services/vacancies/vacancies.types'
import { KeywordsResponse, Vacancies, VacancyData } from '~/services/vacancies/vacancies.types'
export class VacanciesService {
baseUrl = 'https://vacancies-trends-api.andrii.es'
baseUrl = process.env.VACANCIES_API_URL ?? 'https://vacancies-trends-api.andrii.es'
async getAll(): Promise<Vacancies> {
return await fetch(`${this.baseUrl}/vacancies`).then(res => res.json())
@@ -13,13 +13,21 @@ export class VacanciesService {
.then(this.formatDateOnData)
}
formatDateOnData(data: VacancyData): VacancyData {
return data.map(item => {
async getKeywords(): Promise<KeywordsResponse> {
return await fetch(`${this.baseUrl}/vacancies/keywords`).then(res => res.json())
}
private formatDateOnData(data: VacancyData): VacancyData {
const mapped = data.data.map(item => {
return {
...item,
date: new Date(item.date).toLocaleDateString('ru'),
}
})
return {
...data,
data: mapped,
}
}
}

View File

@@ -8,4 +8,13 @@ export interface VacancyDataEntry {
vacancies: number
}
export type VacancyData = Array<{ date: string; [key: string]: string | number }>
export type VacancyData = {
categories: string[]
data: Array<{ date: string; [key: string]: string | number }>
}
export type KeywordsResponse = {
allKeywords: string[]
keywords: Record<string, string[]>
presets: Record<string, string[]>
}