feat(admin): espace « Utilisateurs » pour créer des comptes #144

Merged
kyuno merged 3 commits from feat/admin-user-accounts into main 2026-09-10 21:48:31 +02:00
Owner

Contexte

Aujourd'hui un compte utilisateur (UserProfile) ne peut être créé que par
l'inscription self-service (POST /auth/signup / page /signup). Aucun moyen pour
un opérateur de provisionner un compte à la main (comptes de test, dépannage,
pré-inscription).

Cette PR ajoute une section Utilisateurs à l'espace admin.

Contenu

packages/shared

  • adminCreateUserSchema (prénom / nom / email — pas de champ mot de passe)
  • vues AdminUserListItemView et AdminUserCreatedView

apps/api — module admin-users, monté sous /admin/api/users, derrière requireAdmin :

  • GET /admin/api/users — liste des comptes, plus récent d'abord, plafonnée à 200, householdName résolu côté serveur
  • POST /admin/api/users — création à la main. Le serveur génère un mot de passe temporaire aléatoire (randomInt, charset sans caractères ambigus — même approche que generateInviteCode) et le renvoie une seule fois dans la réponse. Le compte démarre sans foyer, comme une inscription normale.
  • 409 EMAIL_ALREADY_IN_USE sur email déjà pris (code existant réutilisé)
  • évènement admin.user_created (fire-and-forget, actorType: "system") pour distinguer les comptes provisionnés à la main dans le dashboard
  • test Mocha admin-users.test.ts (401 sans session, création + login bout-en-bout avec le mot de passe renvoyé, 409, 400, tri + householdName)

apps/web — page /admin/utilisateurs (entrée de nav + route) :

  • tableau des comptes (créé le / nom / email / foyer)
  • Dialog de création en deux temps : formulaire, puis écran d'affichage unique du mot de passe temporaire avec bouton « Copier » et avertissement « il ne sera plus affiché »
  • validation cliente via adminCreateUserSchema, erreurs API traduites via ErrorMessageService
  • helpers purs dans users.ts, styles colocalisés users-page.scss
  • spec Cypress admin-users.cy.ts (API mockée) : liste, création + révélation du mot de passe, erreur email déjà utilisé

Pas de migration Prisma, pas de nouvelle variable d'environnement, pas de nouveau ErrorCode.

Vérification

  • pnpm --filter @batch-cooking/shared build && pnpm --filter api build + tsc -b web : OK
  • biome check apps packages : OK
  • Cypress admin-users.cy.ts (+ admin-layout / admin-dashboard en non-régression) : 8/8 vert
  • Test API Mocha : non exécuté localement (pas de Postgres de test sur cette machine, cf. dev-environment-gotchas) — à valider en CI
  • Captures d'écran (liste / formulaire / révélation du mot de passe) ci-dessous

🤖 Generated with Claude Code

## Contexte Aujourd'hui un compte utilisateur (`UserProfile`) ne peut être créé que par l'inscription self-service (`POST /auth/signup` / page `/signup`). Aucun moyen pour un opérateur de provisionner un compte à la main (comptes de test, dépannage, pré-inscription). Cette PR ajoute une section **Utilisateurs** à l'espace admin. ## Contenu **`packages/shared`** - `adminCreateUserSchema` (prénom / nom / email — **pas** de champ mot de passe) - vues `AdminUserListItemView` et `AdminUserCreatedView` **`apps/api`** — module `admin-users`, monté sous `/admin/api/users`, derrière `requireAdmin` : - `GET /admin/api/users` — liste des comptes, plus récent d'abord, plafonnée à 200, `householdName` résolu côté serveur - `POST /admin/api/users` — création à la main. Le serveur **génère un mot de passe temporaire aléatoire** (`randomInt`, charset sans caractères ambigus — même approche que `generateInviteCode`) et le renvoie **une seule fois** dans la réponse. Le compte démarre **sans foyer**, comme une inscription normale. - `409 EMAIL_ALREADY_IN_USE` sur email déjà pris (code existant réutilisé) - évènement `admin.user_created` (fire-and-forget, `actorType: "system"`) pour distinguer les comptes provisionnés à la main dans le dashboard - test Mocha `admin-users.test.ts` (401 sans session, création + login bout-en-bout avec le mot de passe renvoyé, 409, 400, tri + `householdName`) **`apps/web`** — page `/admin/utilisateurs` (entrée de nav + route) : - tableau des comptes (créé le / nom / email / foyer) - `Dialog` de création en deux temps : formulaire, puis écran d'affichage unique du mot de passe temporaire avec bouton « Copier » et avertissement « il ne sera plus affiché » - validation cliente via `adminCreateUserSchema`, erreurs API traduites via `ErrorMessageService` - helpers purs dans `users.ts`, styles colocalisés `users-page.scss` - spec Cypress `admin-users.cy.ts` (API mockée) : liste, création + révélation du mot de passe, erreur email déjà utilisé Pas de migration Prisma, pas de nouvelle variable d'environnement, pas de nouveau `ErrorCode`. ## Vérification - `pnpm --filter @batch-cooking/shared build && pnpm --filter api build` + `tsc -b` web : OK - `biome check apps packages` : OK - Cypress `admin-users.cy.ts` (+ `admin-layout` / `admin-dashboard` en non-régression) : 8/8 vert - Test API Mocha : **non exécuté localement** (pas de Postgres de test sur cette machine, cf. `dev-environment-gotchas`) — à valider en CI - Captures d'écran (liste / formulaire / révélation du mot de passe) ci-dessous 🤖 Generated with [Claude Code](https://claude.com/claude-code)
kyuno added 3 commits 2026-09-10 21:00:00 +02:00
`adminCreateUserSchema` (prénom/nom/email, sans mot de passe — généré
côté serveur) + les vues `AdminUserListItemView` / `AdminUserCreatedView`
consommées par `POST`/`GET /admin/api/users`.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
`GET /admin/api/users` (liste, plus récent d'abord, plafonnée à 200) et
`POST /admin/api/users` (création à la main), tous deux derrière
`requireAdmin`. La création génère un mot de passe temporaire aléatoire
(`randomInt`, charset sans caractères ambigus, comme `generateInviteCode`)
renvoyé une seule fois ; le compte démarre sans foyer, comme une
inscription self-service. Évènement `admin.user_created` (fire-and-forget)
pour distinguer les comptes provisionnés à la main dans le dashboard.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
feat(admin): page « Utilisateurs » pour créer des comptes
All checks were successful
CI / lint (push) Successful in 3m10s
CI / build (push) Successful in 3m16s
CI / intent-service-test (push) Successful in 5m35s
CI / e2e (push) Successful in 11m32s
CI / test (push) Successful in 19m46s
CI / build-android (push) Has been skipped
9e847e15a1
Nouvelle section `/admin/utilisateurs` (nav + route) : tableau des comptes
(date, nom, email, foyer) et un `Dialog` de création en deux temps —
formulaire prénom/nom/email, puis affichage unique du mot de passe
temporaire généré, avec bouton « Copier ». Validation cliente via
`adminCreateUserSchema`, erreurs API traduites (`EMAIL_ALREADY_IN_USE`
déjà mappé). Spec Cypress `admin-users.cy.ts` (API mockée).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
kyuno merged commit 5a915a6cee into main 2026-09-10 21:48:31 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: kyuno/batchCooking#144
No description provided.