feat: add cv benchmark workflow and admin visibility

This commit is contained in:
2026-04-01 12:25:45 +02:00
parent 0551a525a8
commit 0d65835857
16 changed files with 832 additions and 95 deletions
+44
View File
@@ -44,6 +44,7 @@ export type StructuredCvJob = {
export type StructuredCvEducation = {
qualification?: string;
qualificationLevel?: string;
institution?: string;
location?: string;
start?: string;
@@ -51,6 +52,24 @@ export type StructuredCvEducation = {
details: string[];
};
export type StructuredCvCertification = {
name?: string;
issuer?: string;
location?: string;
date?: string;
details: string[];
};
export type StructuredCvProject = {
name?: string;
role?: string;
location?: string;
start?: string;
end?: string;
bullets: string[];
skills: string[];
};
export type StructuredCvLanguage = {
name?: string;
level?: string;
@@ -69,6 +88,8 @@ export type StructuredCvProfile = {
summary: string[];
jobs: StructuredCvJob[];
education: StructuredCvEducation[];
certifications: StructuredCvCertification[];
projects: StructuredCvProject[];
skills: string[];
languages: StructuredCvLanguage[];
interests: string[];
@@ -95,6 +116,8 @@ export function emptyStructuredCv(): StructuredCvProfile {
summary: [],
jobs: [],
education: [],
certifications: [],
projects: [],
skills: [],
languages: [],
interests: [],
@@ -214,6 +237,7 @@ export function normalizeStructuredCv(value: unknown): StructuredCvProfile {
education: Array.isArray(source.education)
? source.education.map((education: any) => ({
qualification: normalizeString(education?.qualification),
qualificationLevel: normalizeString(education?.qualificationLevel),
institution: normalizeString(education?.institution),
location: normalizeString(education?.location),
start: normalizeString(education?.start),
@@ -221,6 +245,26 @@ export function normalizeStructuredCv(value: unknown): StructuredCvProfile {
details: normalizeList(education?.details),
}))
: [],
certifications: Array.isArray(source.certifications)
? source.certifications.map((certification: any) => ({
name: normalizeString(certification?.name),
issuer: normalizeString(certification?.issuer),
location: normalizeString(certification?.location),
date: normalizeString(certification?.date),
details: normalizeList(certification?.details),
}))
: [],
projects: Array.isArray(source.projects)
? source.projects.map((project: any) => ({
name: normalizeString(project?.name),
role: normalizeString(project?.role),
location: normalizeString(project?.location),
start: normalizeString(project?.start),
end: normalizeString(project?.end),
bullets: normalizeList(project?.bullets),
skills: normalizeList(project?.skills),
}))
: [],
skills: normalizeList(source.skills),
languages: Array.isArray(source.languages)
? source.languages.map((language: any) => ({