Skip to content

[FE-U-01] Feature slice user : Store Zustand, API TanStack Query, SocialGate HOC + hook, types complets #418

Description

@K0lux

section: Feature User — Foundation | prio: P0 | est: 4h

Pourquoi

Le store user est séparé du store auth. SocialGate est le composant central qui protège toutes les fonctionnalités sociales sans dupliquer la logique.

Acceptance Criteria

  • Zustand store useUserStore : profile, contacts, roles, isProfileComplete (username_set && ACTIVE), isSocialReady (isProfileComplete && !isDeleted), requiresPhoneCompletion — JAMAIS de token ici
  • Schemas Zod : UsernameSchema (^[a-z0-9_-]{3,30}$), UpdateProfileSchema, ActivateSellerSchema, ActivateServiceProviderSchema
  • Queries TanStack : useMyProfile, usePublicProfile(username) (staleTime: 5min), useMyRoles, useContacts(status, pagination), useUsernameAvailability(username) (debounce 400ms, enabled quand >= 3 chars)
  • Mutations TanStack : useSetUsername, useUpdateProfile, useActivateRole, useDeactivateRole, useSendContactRequest, useAcceptContact, useRefuseContact, useBlockContact, useUpdateAlias, useAvatarUpload, useSoftDeleteUser
  • SocialGate hook useSocialGate : retourne {isSocialReady, requiresUsername, openGate(feature)} — si !isSocialReady : déclenche modal "Définissez votre pseudo pour accéder à {feature}" avec bouton → /profile/username
  • SocialGateGuard HOC wrappant tout composant nécessitant un profil social
  • Tous les types TypeScript inférés depuis Zod + types API

Fichiers

src/features/user/
├── model/user.store.ts + user.types.ts + user.schemas.ts
├── api/user.api.ts + user.queries.ts
├── lib/useSocialGate.ts + SocialGateGuard.tsx
└── index.ts

Scale

SocialGate centralisé = zéro duplication de logique dans tous les composants marketplace.

Metadata

Metadata

Assignees

No one assigned

    Labels

    frontendFrontend React/TypeScript

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions