feat(tags): gestion des tags dans le formulaire carte (max 3, suggestions, normalisation)

- schéma zod : tags normalisés (trim + minuscules + dédupe), 3 max par carte
- couche générique : findTags (MySQL + Mongo), service tags()
- API GET /api/tags + cardsApi.tags() pour les suggestions
- formulaire : saisie + ajout (Entrée/bouton), suggestions des tags existants,
  chips supprimables, compteur n/3, blocage au-delà de 3
- tests : schémas, repositories, service, route, api-client, formulaire
This commit is contained in:
devcodetools committed 2026-09-22 10:18:13 +02:00
1 parent 31283ada26
commit 67569e2d16
18 files changed
+334 -8

No files matched your search

+6
View File
@@ -74,6 +74,12 @@ describe('cardsApi', () => {
expectRequest('GET', '/api/themes')
})
it('tags() appelle GET /api/tags', async () => {
fetchMock.mockResolvedValue(jsonResponse(['scope', 'fonction']))
await expect(cardsApi.tags()).resolves.toEqual(['scope', 'fonction'])
expectRequest('GET', '/api/tags')
})
it('lève ApiClientError avec le message de l API sur une erreur 404', async () => {
fetchMock.mockResolvedValue(
jsonResponse({ error: 'NotFoundError', message: 'Carte inconnue' }, 404),