From b53dd50ab41dad8331baddf8d0f324dcb20afa90 Mon Sep 17 00:00:00 2001 From: jean bourgies Date: Fri, 17 Apr 2026 10:03:39 +0200 Subject: [PATCH 1/7] fix(api): add default cv image, temporary fix create --- ...{default-avatar.png => default_avatar.png} | Bin .../sections/informations-personnelles.html | 6 + @libs/users-backend/src/init.ts | 6 +- .../src/routes/curriculums/create.route.ts | 22 ++- @libs/users-front/package.json | 1 + .../curriculums/edit/curriculum-edit-view.gts | 35 ++++- @libs/users-front/src/services/curriculum.ts | 3 + pnpm-lock.yaml | 143 ++++++++++-------- 8 files changed, 150 insertions(+), 66 deletions(-) rename @apps/front/public/assets/img/{default-avatar.png => default_avatar.png} (100%) diff --git a/@apps/front/public/assets/img/default-avatar.png b/@apps/front/public/assets/img/default_avatar.png similarity index 100% rename from @apps/front/public/assets/img/default-avatar.png rename to @apps/front/public/assets/img/default_avatar.png diff --git a/@apps/front/public/templates/template1/sections/informations-personnelles.html b/@apps/front/public/templates/template1/sections/informations-personnelles.html index 5448ee5..b0917bb 100644 --- a/@apps/front/public/templates/template1/sections/informations-personnelles.html +++ b/@apps/front/public/templates/template1/sections/informations-personnelles.html @@ -6,6 +6,12 @@ src={{item.profilePicture}} alt="Photo de profil" /> + {{else}} + Photo de profil par défaut {{/if}}
diff --git a/@libs/users-backend/src/init.ts b/@libs/users-backend/src/init.ts index 4f8f89a..b7f494d 100644 --- a/@libs/users-backend/src/init.ts +++ b/@libs/users-backend/src/init.ts @@ -156,7 +156,11 @@ export class CurriculumModule implements ModuleInterface[] = [ new GetCurriculumRoute(repository), new ListCurriculumRoute(repository), - new CreateCurriculumRoute(repository), + new CreateCurriculumRoute( + repository, + this.context.em.getRepository(SectionsEntity), + this.context.em.getRepository(SectionTemplatesEntity), + ), new UpdateCurriculumRoute(repository), new DeleteCurriculumRoute(repository), new DuplicateCurriculumRoute( diff --git a/@libs/users-backend/src/routes/curriculums/create.route.ts b/@libs/users-backend/src/routes/curriculums/create.route.ts index 1214a41..495aebe 100644 --- a/@libs/users-backend/src/routes/curriculums/create.route.ts +++ b/@libs/users-backend/src/routes/curriculums/create.route.ts @@ -1,5 +1,7 @@ import type { FastifyInstanceTypeForModule } from "#src/init.js"; import type { CurriculumEntityType } from "#src/entities/curriculum.entity.js"; +import type { SectionEntityType } from "#src/entities/sections.entity.js"; +import type { SectionTemplatesEntityType } from "#src/entities/section-templates.entity.js"; import type { EntityRepository } from "@mikro-orm/core"; import { randomUUID } from "crypto"; import { @@ -9,7 +11,11 @@ import { import { makeSingleJsonApiTopDocument, type Route } from "@libs/backend-shared"; export class CreateCurriculumRoute implements Route { - public constructor(private curriculumRepository: EntityRepository) {} + public constructor( + private curriculumRepository: EntityRepository, + private sectionsRepository: EntityRepository, + private sectionTemplatesRepository: EntityRepository, + ) {} public routeDefinition(f: FastifyInstanceTypeForModule) { return f.post( @@ -32,6 +38,20 @@ export class CreateCurriculumRoute implements Route { createdAt: new Date(), }); + const templates = await this.sectionTemplatesRepository.findAll(); + + for (const template of templates) { + const section = this.sectionsRepository.create({ + id: randomUUID(), + curriculum, + template, + title: template.label, + position: template.position, + }); + + curriculum.sections.add(section); + } + await this.curriculumRepository.getEntityManager().flush(); return reply.send(jsonApiSerializeSingleCurriculumDocument(curriculum)); diff --git a/@libs/users-front/package.json b/@libs/users-front/package.json index 2b8bed1..364902a 100644 --- a/@libs/users-front/package.json +++ b/@libs/users-front/package.json @@ -65,6 +65,7 @@ "ember-cli-page-object": "catalog:", "ember-click-outside": "^6.1.1", "ember-click-outside-modifier": "^4.1.2", + "ember-drag-drop": "^1.0.1", "ember-immer-changeset": "catalog:", "ember-intl": "catalog:", "ember-simple-auth": "catalog:", diff --git a/@libs/users-front/src/components/curriculums/edit/curriculum-edit-view.gts b/@libs/users-front/src/components/curriculums/edit/curriculum-edit-view.gts index 018b665..3649919 100644 --- a/@libs/users-front/src/components/curriculums/edit/curriculum-edit-view.gts +++ b/@libs/users-front/src/components/curriculums/edit/curriculum-edit-view.gts @@ -95,7 +95,7 @@ class CurriculumEditView extends Component { } @action - onDrop(targetIndex: number) { + async onDrop(targetIndex: number) { const sourceIndex = this.dragSourceIndex; if (sourceIndex === null || sourceIndex === targetIndex) return; @@ -104,10 +104,35 @@ class CurriculumEditView extends Component { if (!moved) return; reordered.splice(targetIndex, 0, moved); - // TODO : await this.curriculum.updateOrderSections(this.args.curriculumId, reordered); + const newOrder = []; + for (let i = 0; i < reordered.length; i++) { + newOrder.push( + this.getSectionIdByTemplate(reordered[i]!.id, this.sections) + ); + } + if (newOrder.some((id) => typeof id !== 'string')) return; + await this.curriculum.updateOrderSections( + this.args.curriculumId, + newOrder as string[] + ); this.sectionTemplates = reordered; this.dragSourceIndex = null; + + await this.loadSections(); + this.args.onUpdate(); + } + + get sortedSectionTemplates() { + return this.sectionTemplates.slice().sort((a, b) => { + const sectionA = this.sections.find((s) => s.templateId === a.id); + const sectionB = this.sections.find((s) => s.templateId === b.id); + + const positionA = sectionA?.position ?? Infinity; + const positionB = sectionB?.position ?? Infinity; + + return positionA - positionB; + }); } @action @@ -115,9 +140,13 @@ class CurriculumEditView extends Component { this.dragSourceIndex = null; } + getTemplateLabel(templateId: string | null) { + return this.sectionTemplates.find((t) => t.id === templateId)?.label || ''; + } +