karbe/src/app/api
Ubuntu ea0e606735
All checks were successful
CI / test (pull_request) Successful in 2m45s
feat(ce): Sprint K — public badge + invites CE_MEMBER + tests
Public badge sur fiche carbet :
- carbet-public.ts charge les OrganizationCarbetMembership (org
  approuvée uniquement) + expose `organizations: {id,name,slug}[]`.
- /carbets/[slug] affiche « Géré par le CE <name> » sous le header
  si au moins 1 org liée.

Invites CE_MEMBER :
- Migration 20260603300000_org_invite_token : OrgInviteToken
  (tokenHash, organizationId, email?, createdByUserId, expiresAt,
  usedAt). Cascade sur Organization. Index expiresAt + organizationId.
- src/lib/ce-invites.ts : createOrgInviteToken (TTL 14j),
  listOrgInviteTokens, getOrgInviteByToken (validité + expiry),
  markOrgInviteConsumed, revokeOrgInviteToken. Token = 24 bytes
  base64url, hash sha256.
- /espace-ce/membres : liste membres (CE_MANAGER + CE_MEMBER actifs)
  + form de génération de lien (email optionnel = lock email côté
  signup) + liste des invitations avec statut actif/consommé/expiré +
  bouton révoquer.
- /espace-ce/membres/actions.ts : createInviteAction +
  revokeInviteAction. Audit log scope=ce.invite.
- API /api/signup étendue : zod accepte inviteToken, branche dédiée
  qui crée User CE_MEMBER + organizationId du token + marquage
  usedAt. Vérif email match si email fourni dans le token.
- /inscription?invite=TOKEN : récupère l'invite, pré-affiche org name,
  lock email si fourni, masque les fieldsets type de compte (forcé
  CE_MEMBER).

CTA marketing :
- /pour-comites-entreprise : section CTA « Créer mon espace CE » sous
  le rendu content-pages, conditionnée par plugin ce-management.

Tests vitest (tests/lib/ce-access.test.ts) :
- canManageCarbet : admin always, owner direct, CE_MANAGER via org
  match, refus si autre org / pas d'org / TOURIST / pas de membership.
- 9 tests, mocks next-auth + @/auth + @/lib/authorization pour éviter
  next/server (incompatible vitest sans setup).
- Total tests projet : 62/62 ✓.

Dashboard /espace-ce : lien vers /espace-ce/membres en bas.

Migration prod appliquée.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-03 00:03:03 +00:00
..
admin fix(admin): PATCH content-pages respecte ?lang= (sinon écrasait FR) 2026-06-01 00:51:19 +00:00
auth/[...nextauth] feat(auth): add multi-role NextAuth with role guards 2026-05-29 10:46:54 +00:00
bookings feat(hardening): rate limit (signup/reset/bookings) + tâches cron + backup PostgreSQL nocturne 2026-06-01 20:16:57 +00:00
carbets/[carbetId] feat(ce): Sprint I — CRUD carbets côté CE 2026-06-02 23:34:17 +00:00
cron/run/[task] feat(hardening): rate limit (signup/reset/bookings) + tâches cron + backup PostgreSQL nocturne 2026-06-01 20:16:57 +00:00
favorites feat: « Au fil de l'eau » — Reels mobile + uploader pro + favoris 2026-06-02 00:27:16 +00:00
health feat(p2): vitest + 27 tests + /api/health enrichi + /api/metrics + workflow CI 2026-06-01 02:27:14 +00:00
me/export feat: reset password + page mon-compte (RGPD) + facettes recherche (prix max, équipements) 2026-06-01 10:16:37 +00:00
media feat: « Au fil de l'eau » — Reels mobile + uploader pro + favoris 2026-06-02 00:27:16 +00:00
metrics feat(p2): vitest + 27 tests + /api/health enrichi + /api/metrics + workflow CI 2026-06-01 02:27:14 +00:00
password feat(hardening): rate limit (signup/reset/bookings) + tâches cron + backup PostgreSQL nocturne 2026-06-01 20:16:57 +00:00
rental-media feat(ce): Sprint J — matériel rental côté CE 2026-06-02 23:47:57 +00:00
rentals feat(rental): Sprint E — emails + plugin toggle + tests 2026-06-02 08:49:39 +00:00
reviews/[reviewId]/response feat(reviews): avis & notes carbet (SYS-8) 2026-05-30 15:08:55 +00:00
signup feat(ce): Sprint K — public badge + invites CE_MEMBER + tests 2026-06-03 00:03:03 +00:00
stripe feat(rental): Sprint E — emails + plugin toggle + tests 2026-06-02 08:49:39 +00:00
uploads feat(ce): Sprint J — matériel rental côté CE 2026-06-02 23:47:57 +00:00