Badges : permettre d'agrandir le badge proportionnellement à l'image

Le format déduit de l'image importée (300 dpi supposés, étape
précédente) donne un badge minuscule pour une image à résolution web —
ajout d'un contrôle « largeur du badge (mm) » dans l'écran de
personnalisation : la hauteur suit proportionnellement (ratio de
l'image). PUT /editions/{id}/badges/template/size écrase la taille
déduite de l'image ; la réimporter la recalcule à nouveau.

Vérifié : pytest (250 passés), ruff, tsc --noEmit, eslint, vite build,
smoke — tous verts.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
AdamThomas
2026-09-20 20:51:01 +02:00
co-authored by Claude Sonnet 5
parent bc165757ca
commit 55c5d539a8
11 changed files with 174 additions and 0 deletions
+16
View File
@@ -13,6 +13,7 @@ import type {
BadgeFieldRead,
BadgeFieldsSet,
BadgeGenerateRequest,
BadgeSizeUpdate,
BadgeTemplateRead,
DayPartCreate,
DayPartRead,
@@ -1401,6 +1402,21 @@ export function createMockApi(): PlanningApi {
state.badgeTemplate.fields = fields;
return delay(fields);
},
setSize: (_edition, body: BadgeSizeUpdate) => {
if (body.badge_width_mm <= 0 || body.badge_height_mm <= 0) {
throw new ApiError(422, 'badge.invalid_size');
}
state.badgeTemplate.frontImageWidthMm = body.badge_width_mm;
state.badgeTemplate.frontImageHeightMm = body.badge_height_mm;
return delay<BadgeTemplateRead>({
edition_id: state.edition.id,
has_front_image: state.badgeTemplate.frontImage !== null,
has_back_image: state.badgeTemplate.backImage !== null,
badge_width_mm: body.badge_width_mm,
badge_height_mm: body.badge_height_mm,
fields: state.badgeTemplate.fields,
});
},
generate: (_edition, body: BadgeGenerateRequest) => {
if (state.badgeTemplate.fields.length === 0) {
throw new ApiError(422, 'badge.no_fields');