143 lines
5.2 KiB
Markdown
143 lines
5.2 KiB
Markdown
# Story 7.3: Implémenter le programme de parrainage
|
|
|
|
Status: review
|
|
|
|
## Story
|
|
|
|
As a utilisateur,
|
|
I want inviter des amis et gagner des récompenses,
|
|
So que je peux bénéficier d'avantages en partageant l'application.
|
|
|
|
## Acceptance Criteria
|
|
|
|
**Given** je suis connecté
|
|
**When** j'accède à la section Parrainage
|
|
**Then** je vois mon lien de parrainage unique
|
|
**And** je vois combien d'amis j'ai invités
|
|
**And** je vois mes récompenses disponibles
|
|
|
|
**Given** 3 de mes amis s'inscrivent via mon lien
|
|
**When** le 3ème ami s'inscrit
|
|
**Then** je reçois 1 mois premium GRATUIT
|
|
**And** une notification de succès est affichée
|
|
**And** mon statut premium est activé automatiquement
|
|
|
|
## Tasks / Subtasks
|
|
|
|
- [x] Créer la page de parrainage (AC: #1)
|
|
- [x] Créer `src/app/(dashboard)/parrainage/page.tsx`
|
|
- [x] Afficher le lien de parrainage unique
|
|
- [x] Afficher le nombre d'amis invités
|
|
- [x] Afficher les récompenses disponibles
|
|
- [x] Utiliser shadcn/ui components
|
|
|
|
- [x] Créer le système de parrainage (AC: #1, #2)
|
|
- [x] Créer la table `referrals` dans Drizzle
|
|
- [x] Ajouter colonnes: id, referrer_id, referred_id, status, created_at
|
|
- [x] Créer la table `rewards` dans Drizzle
|
|
- [x] Ajouter colonnes: id, user_id, reward_type, value, used
|
|
- [x] Générer et appliquer les migrations
|
|
|
|
- [x] Créer le lien de parrainage unique (AC: #1)
|
|
- [x] Créer `src/services/referralService.ts`
|
|
- [x] Générer un code de parrainage unique par utilisateur
|
|
- [x] Créer l'URL de parrainage: `https://chartbastan.com/signup?ref=CODE`
|
|
- [x] Stocker le code dans la base de données
|
|
- [x] Valider que le code est unique
|
|
|
|
- [x] Implémenter le tracking des parrainages (AC: #1, #2)
|
|
- [x] Créer l'endpoint `POST /api/v1/referrals/track`
|
|
- [x] Tracker les inscriptions avec le code de parrainage
|
|
- [x] Stocker la relation referrer/referred dans `referrals`
|
|
- [x] Compter le nombre d'amis invités
|
|
- [x] Gérer les erreurs de tracking
|
|
|
|
- [x] Créer le composant de lien de parrainage (AC: #1)
|
|
- [x] Créer `src/components/referral/ReferralLink.tsx`
|
|
- [x] Afficher le lien de parrainage avec bouton "Copier"
|
|
- [x] Ajouter bouton "Partager" (Twitter, Facebook, WhatsApp)
|
|
- [x] Afficher le nombre d'amis invités
|
|
- [x] Utiliser shadcn/ui components
|
|
|
|
- [x] Créer le système de récompenses (AC: #2)
|
|
- [x] Créer `src/services/rewardService.ts`
|
|
- [x] Vérifier si l'utilisateur a invité 3 amis
|
|
- [x] Activer 1 mois premium automatiquement
|
|
- [x] Envoyer une notification de succès
|
|
- [x] Créer l'endpoint `POST /api/v1/rewards/check`
|
|
|
|
- [x] Créer le composant de récompenses (AC: #1)
|
|
- [x] Créer `src/components/referral/RewardsList.tsx`
|
|
- [x] Afficher les récompenses disponibles
|
|
- [x] Afficher les récompenses utilisées
|
|
- [x] Afficher le nombre d'amis invités / 3 pour premium
|
|
- [x] Utiliser shadcn/ui components
|
|
|
|
- [x] Tester le programme de parrainage (Tous AC)
|
|
- [x] Tester la génération du lien de parrainage
|
|
- [x] Tester le tracking des parrainages
|
|
- [x] Tester l'activation de premium après 3 amis
|
|
- [x] Tester les notifications de succès
|
|
- [x] Vérifier la comptabilité avec les limites de prédictions
|
|
|
|
## Dev Notes
|
|
|
|
### Stack Technique
|
|
- **Database:** Drizzle + SQLite
|
|
- **State:** Zustand
|
|
- **UI:** shadcn/ui + Tailwind CSS
|
|
|
|
### File Structure
|
|
```
|
|
src/
|
|
├── app/
|
|
│ └── (dashboard)/
|
|
│ └── parrainage/page.tsx
|
|
├── components/
|
|
│ └── referral/
|
|
│ ├── ReferralLink.tsx
|
|
│ └── RewardsList.tsx
|
|
└── services/
|
|
├── referralService.ts
|
|
└── rewardService.ts
|
|
```
|
|
|
|
### References
|
|
- [Source: _bmad-output/planning-artifacts/epics.md#Story-7.3]
|
|
|
|
## Dev Agent Record
|
|
|
|
### Agent Model Used
|
|
GLM-4.7
|
|
|
|
### Completion Notes List
|
|
- Programme de parrainage implémenté avec succès
|
|
- Tables Drizzle créées: referrals et rewards avec colonne referralCode dans users
|
|
- Migrations générées et appliquées (0005 et 0006)
|
|
- Service referralService.ts complet avec génération de codes uniques, tracking, statistiques
|
|
- Service rewardService.ts complet avec vérification et activation automatique de premium
|
|
- API endpoints créés: /api/v1/referrals/referral-code, /api/v1/referrals/track, /api/v1/rewards/check
|
|
- Modification de /api/auth/register pour supporter les codes de parrainage
|
|
- Composants frontend ReferralLink.tsx et RewardsList.tsx avec interface complète
|
|
- Page de parrainage /src/app/(dashboard)/parrainage/page.tsx
|
|
- Tests créés et passants pour les services et APIs
|
|
- Linting vérifié, aucune erreur
|
|
- Tous les critères d'acceptation satisfaits
|
|
|
|
### File List
|
|
- `src/db/schema.ts`
|
|
- `drizzle/migrations/0005_tough_sinister_six.sql`
|
|
- `drizzle/migrations/0006_friendly_the_spike.sql`
|
|
- `src/services/referralService.ts`
|
|
- `src/services/rewardService.ts`
|
|
- `src/app/api/auth/register/route.ts`
|
|
- `src/app/api/v1/referrals/referral-code/route.ts`
|
|
- `src/app/api/v1/referrals/track/route.ts`
|
|
- `src/app/api/v1/rewards/check/route.ts`
|
|
- `src/components/referral/referralLink.tsx`
|
|
- `src/components/referral/rewardsList.tsx`
|
|
- `src/app/(dashboard)/parrainage/page.tsx`
|
|
- `src/tests/services/referralService.test.ts`
|
|
- `src/tests/services/rewardService.test.ts`
|
|
- `src/tests/api/referralApi.test.ts`
|