feat(progression): page /progression + section Dashboard Premium — patterns, exercices long terme, indice de préparation (Sprint 3.6c)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
a752029c19
commit
a60c298605
18 changed files with 1005 additions and 7 deletions
31
src/features/progression/hooks/usePatterns.ts
Normal file
31
src/features/progression/hooks/usePatterns.ts
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
/**
|
||||
* Hook TanStack Query — analyse des patterns (Premium).
|
||||
*
|
||||
* Clé `['users', 'patterns']` partagée entre `/progression` et la section
|
||||
* dashboard Premium — un seul appel backend pour les deux affichages.
|
||||
*
|
||||
* `staleTime: 60 s` — l'analyse ne change que quand une nouvelle production est
|
||||
* corrigée ; 60 s évite les rafraîchissements inutiles.
|
||||
*
|
||||
* `enabled` : ne lance la requête QUE si l'utilisateur a la feature. Évite un
|
||||
* 403 parasite pour Free/Standard (la route backend refuse avec
|
||||
* PLAN_INSUFFICIENT — on court-circuite côté client).
|
||||
*
|
||||
* Règle H : aucune logique métier ici — wrap pur autour de `getPatterns`.
|
||||
* Règle D : le check feature utilise `hasAccess`, jamais `plan === 'premium'`.
|
||||
*/
|
||||
|
||||
import { useQuery } from '@tanstack/react-query'
|
||||
import { getPatterns } from '@/entities/patterns/api'
|
||||
import { hasAccess, type Plan } from '@/entities/user/lib'
|
||||
|
||||
export function usePatterns(plan: Plan | undefined) {
|
||||
const enabled = plan !== undefined && hasAccess(plan, 'pattern_analysis')
|
||||
|
||||
return useQuery({
|
||||
queryKey: ['users', 'patterns'] as const,
|
||||
queryFn: getPatterns,
|
||||
staleTime: 60 * 1000,
|
||||
enabled,
|
||||
})
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue