feat(ce): Sprint K — public badge + invites CE_MEMBER + tests #85
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/ce-sprint-k"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Sprint K — Visibilité publique + invitations CE_MEMBER + tests
Finalisation du module CE management (Sprints G→J déjà mergés). Marketplace CE end-to-end : public badge sur la fiche carbet, invitations CE_MEMBER auto-affiliantes, tests vitest, CTA marketing.
Public badge sur fiche carbet
carbet-public.tscharge lesOrganizationCarbetMembership(filtre orgapproved=trueuniquement) + exposeorganizations: {id,name,slug}[]/carbets/[slug]affiche « Géré par le CE » sous le header si au moins 1 org liéeInvites CE_MEMBER
20260603300000_org_invite_token(appliquée prod) :OrgInviteToken { tokenHash, organizationId, email?, createdByUserId, expiresAt, usedAt }. Cascade sur Organization.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/api/signupétendue : zod accepteinviteToken, branche dédiée qui crée User CE_MEMBER + organizationId du token + marquageusedAt. Vérif email match si email fourni dans le token/inscription?invite=TOKEN: 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 plugince-management.Tests vitest
tests/lib/ce-access.test.ts(9 cas) :Mocks
next-auth/@/auth/@/lib/authorizationpour éviter next/server (incompatible vitest sans setup).Total : 62/62 tests ✓ (53 précédents + 9 nouveaux). Lint + typecheck + build ✓.
Test plan
/inscription?invite=TOKEN→ form pré-rempli, email locké, fieldsets masquésOrgInviteToken.usedAtupdated🤖 Generated with Claude Code
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>