Skip to content

feat: galerie publique des personnages (#58)#115

Merged
pierrick-fonquerne merged 2 commits intodevelopfrom
58-galerie-des-personnages
Feb 16, 2026
Merged

feat: galerie publique des personnages (#58)#115
pierrick-fonquerne merged 2 commits intodevelopfrom
58-galerie-des-personnages

Conversation

@pierrick-fonquerne
Copy link
Copy Markdown
Owner

Summary

  • Ajout d'un endpoint GET /api/characters (anonyme) paginé avec filtres (genre, auteur, tri)
  • Ajout de la page /galerie avec grille responsive, filtres debounced et pagination
  • Extraction des types frontend dans un dossier types/ dédié (SRP)

Backend

  • PagedResponse<T> générique et GalleryCharacterResponse DTO
  • Projection Select pour éviter de charger PasswordHash en mémoire
  • EF.Functions.ILike pour la recherche case-insensitive PostgreSQL
  • Sanitization des wildcards LIKE (%, _, \)
  • Validation : page (1–1000), pageSize (1–50), sortBy allowlist

Frontend

  • GalleryPage avec useDebounce (300ms) sur la recherche auteur
  • GalleryCard avec React.memo, date relative via Intl.RelativeTimeFormat
  • Protection race condition via request ID ref
  • Types extraits : character-requests.ts, character-responses.ts, gallery.ts, common.ts

Test plan

  • Backend : 170 unit tests + 80 integration tests passing
  • Frontend : 445 tests passing (dont galerie, debounce, formatRelativeDate)
  • TypeScript : 0 erreurs
  • Lint : clean

…tion (#58)

- Add GET /api/characters (AllowAnonymous) with gender, author, sort, pagination
- Add PagedResponse<T> generic DTO and GalleryCharacterResponse DTO
- Use Select projection to avoid loading sensitive user data (PasswordHash)
- Use EF.Functions.ILike for case-insensitive PostgreSQL search
- Sanitize LIKE patterns to prevent wildcard injection
- Validate page bounds (1–1000), clamp pageSize (1–50), allowlist sortBy
- Add 8 unit tests and 4 integration tests for gallery
…traction (#58)

- Add GalleryPage at /galerie with gender, author (debounced), sort filters
- Add GalleryCard component with React.memo and relative date display
- Add useDebounce generic hook and formatRelativeDate utility
- Add getGallery service calling GET /api/characters with query params
- Extract types into dedicated types/ directory (SRP: requests, responses, gallery, common)
- Migrate all consumers to import types from types/ instead of characterService
- Add race condition protection with request ID ref pattern
- Sanitize LIKE patterns for author search
- Add 445 passing tests including gallery, debounce and formatRelativeDate
@vercel
Copy link
Copy Markdown

vercel bot commented Feb 16, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
fantasyrealm-character-manager Ready Ready Preview, Comment Feb 16, 2026 6:51pm

@pierrick-fonquerne pierrick-fonquerne self-assigned this Feb 16, 2026
@pierrick-fonquerne pierrick-fonquerne merged commit 7268ee7 into develop Feb 16, 2026
6 checks passed
@pierrick-fonquerne pierrick-fonquerne deleted the 58-galerie-des-personnages branch February 16, 2026 18:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant