- **Motivations :** Assurer passage du lint strict et clarifier la logique paiements/publications. - **Root causes :** Fonctions trop longues, promesses non gérées et typages WebLN/Nostr incomplets. - **Correctifs :** Refactor PaymentModal (handlers void), extraction helpers articlePublisher, simplification polling sponsoring/zap, corrections curly et awaits. - **Evolutions :** Nouveau module articlePublisherHelpers pour présentation/aiguillage contenu privé. - **Page affectées :** components/PaymentModal.tsx, lib/articlePublisher.ts, lib/articlePublisherHelpers.ts, lib/paymentPolling.ts, lib/sponsoring.ts, lib/nostrZapVerification.ts et dépendances liées.
296 lines
7.9 KiB
Markdown
296 lines
7.9 KiB
Markdown
# Analyse des tâches restantes - Nostr Paywall
|
|
|
|
**Date** : Décembre 2024
|
|
**Auteur** : Équipe 4NK
|
|
|
|
## 🔴 Bugs identifiés
|
|
|
|
### 1. Bug dans `components/ArticleCard.tsx` - Variable non définie
|
|
**Ligne** : 33
|
|
**Problème** : Utilisation de `handleUnlockClick` qui n'existe pas
|
|
**Correction** : Remplacer par `handleUnlock` (défini dans le hook `useArticlePayment`)
|
|
|
|
```typescript
|
|
// ❌ Actuel (ligne 33)
|
|
onUnlock={handleUnlockClick}
|
|
|
|
// ✅ Devrait être
|
|
onUnlock={handleUnlock}
|
|
```
|
|
|
|
**Impact** : Le bouton "Unlock" ne fonctionne pas sur les articles
|
|
|
|
---
|
|
|
|
## ⚠️ Problèmes de code
|
|
|
|
### 2. Utilisation de `console.log` dans le code de production
|
|
**Fichiers concernés** :
|
|
- `lib/nostrconnect.ts` : lignes 72, 77, 109
|
|
- `lib/nostrconnectMessageHandler.ts` : lignes 38, 64, 91, 116
|
|
- `lib/paymentPolling.ts` : ligne 85
|
|
- `lib/articleInvoice.ts` : ligne 19
|
|
- `lib/nostrEventParsing.ts` : ligne 43
|
|
- `hooks/useArticlePayment.ts` : lignes 39, 70
|
|
- `pages/profile.tsx` : ligne 57
|
|
|
|
**Problème** : Violation de la règle ESLint `no-console: warn` (seuls `console.warn` et `console.error` sont autorisés)
|
|
|
|
**Action** : Remplacer tous les `console.log` par `console.error` ou supprimer les logs de debug
|
|
|
|
---
|
|
|
|
### 3. Utilisation de `any` dans `lib/alby.ts`
|
|
**Lignes** : 8, 14, 18
|
|
**Problème** : Utilisation de `(window as any).webln` et `any` pour le type WebLN
|
|
|
|
**Action** : Créer une interface TypeScript pour WebLN ou utiliser un type plus strict
|
|
|
|
---
|
|
|
|
### 4. Non-null assertion dans `lib/storage/indexedDB.ts`
|
|
**Lignes** : 89, 114, 158
|
|
**Problème** : Utilisation de `this.db!` (non-null assertion) alors que `this.db` peut être null
|
|
|
|
**Action** : Ajouter des vérifications explicites avant utilisation
|
|
|
|
---
|
|
|
|
## 📋 Fonctionnalités manquantes (documentées)
|
|
|
|
### Priorité 3 - Améliorations du profil utilisateur
|
|
|
|
#### 1. Statistiques détaillées (vues, paiements)
|
|
**Status** : ⏳ À venir
|
|
**Fichiers concernés** : `components/UserProfile.tsx`, `pages/profile.tsx`
|
|
|
|
**À implémenter** :
|
|
- Compteur de vues par article
|
|
- Compteur de paiements reçus
|
|
- Revenus totaux (en sats)
|
|
- Graphiques de statistiques (optionnel)
|
|
|
|
**Complexité** : Moyenne
|
|
**Dépendances** : Nécessite de suivre les événements de lecture et les zap receipts
|
|
|
|
---
|
|
|
|
#### 2. Édition/suppression d'articles
|
|
**Status** : ⏳ À venir
|
|
**Fichiers concernés** : `components/UserArticles.tsx`, `pages/profile.tsx`
|
|
|
|
**À implémenter** :
|
|
- Bouton "Edit" sur chaque article
|
|
- Formulaire d'édition (pré-rempli avec les données actuelles)
|
|
- Publication d'un événement de mise à jour (kind:1 avec tag `e` pointant vers l'article original)
|
|
- Bouton "Delete" (marquer comme supprimé ou supprimer du relay)
|
|
- Confirmation avant suppression
|
|
|
|
**Complexité** : Moyenne à élevée
|
|
**Dépendances** : Gestion des événements de mise à jour Nostr
|
|
|
|
---
|
|
|
|
### Priorité 3 - Améliorations des notifications
|
|
|
|
#### 3. Types supplémentaires de notifications
|
|
**Status** : ⏳ À venir
|
|
**Fichiers concernés** : `lib/notifications.ts`, `types/notifications.ts`, `components/NotificationCenter.tsx`
|
|
|
|
**À implémenter** :
|
|
- Notifications de mentions (kind:1 avec tag `p` mentionnant l'utilisateur)
|
|
- Notifications de commentaires (réponses à des articles)
|
|
- Notifications de partages (reposts)
|
|
|
|
**Complexité** : Moyenne
|
|
**Dépendances** : Parsing des événements Nostr supplémentaires
|
|
|
|
---
|
|
|
|
### Priorité 3 - Améliorations du stockage
|
|
|
|
#### 4. Chiffrement des données sensibles
|
|
**Status** : ⏳ À venir (optionnel)
|
|
**Fichiers concernés** : `lib/storage/indexedDB.ts`, `lib/articleStorage.ts`
|
|
|
|
**À implémenter** :
|
|
- Chiffrement des contenus privés stockés dans IndexedDB
|
|
- Utilisation de Web Crypto API
|
|
- Gestion des clés de chiffrement
|
|
|
|
**Complexité** : Élevée
|
|
**Dépendances** : Web Crypto API, gestion sécurisée des clés
|
|
|
|
---
|
|
|
|
## 🧪 Tests (non planifié mais recommandé)
|
|
|
|
### Tests unitaires
|
|
**Status** : Non planifié
|
|
**Fichiers à tester** :
|
|
- `lib/nostr.ts` - Service Nostr
|
|
- `lib/alby.ts` - Service Alby/WebLN
|
|
- `lib/payment.ts` - Service de paiement
|
|
- `lib/articlePublisher.ts` - Publication d'articles
|
|
- `lib/nostrEventParsing.ts` - Parsing d'événements
|
|
|
|
**Framework recommandé** : Jest ou Vitest
|
|
|
|
---
|
|
|
|
### Tests de composants React
|
|
**Status** : Non planifié
|
|
**Composants à tester** :
|
|
- `components/ArticleCard.tsx`
|
|
- `components/PaymentModal.tsx`
|
|
- `components/ArticleEditor.tsx`
|
|
- `components/ConnectButton.tsx`
|
|
|
|
**Framework recommandé** : React Testing Library
|
|
|
|
---
|
|
|
|
### Tests d'intégration
|
|
**Status** : Non planifié
|
|
**Scénarios à tester** :
|
|
- Flux complet de publication d'article
|
|
- Flux complet de paiement et déblocage
|
|
- Connexion NostrConnect
|
|
- Recherche et filtrage
|
|
|
|
**Framework recommandé** : Playwright ou Cypress
|
|
|
|
---
|
|
|
|
## 📊 Analytics et monitoring (non planifié)
|
|
|
|
### Tracking des événements
|
|
**Status** : Non planifié
|
|
**Événements à tracker** :
|
|
- Publications d'articles
|
|
- Paiements effectués
|
|
- Connexions utilisateurs
|
|
- Recherches effectuées
|
|
- Erreurs rencontrées
|
|
|
|
**Fichiers à créer** : `lib/analytics.ts`
|
|
|
|
---
|
|
|
|
## 🔧 Améliorations techniques
|
|
|
|
### 1. Gestion d'erreurs améliorée
|
|
**Fichiers concernés** : Tous les services
|
|
|
|
**À implémenter** :
|
|
- Types d'erreurs personnalisés
|
|
- Messages d'erreur plus explicites pour l'utilisateur
|
|
- Logging structuré des erreurs
|
|
- Retry automatique pour les erreurs réseau
|
|
|
|
---
|
|
|
|
### 2. Performance et optimisation
|
|
**À implémenter** :
|
|
- Lazy loading des composants
|
|
- Mémoïsation des calculs coûteux
|
|
- Optimisation des requêtes relay
|
|
- Cache des profils utilisateurs
|
|
|
|
---
|
|
|
|
### 3. Accessibilité (a11y)
|
|
**À implémenter** :
|
|
- Support clavier complet
|
|
- Attributs ARIA appropriés
|
|
- Contraste des couleurs
|
|
- Navigation au clavier
|
|
|
|
---
|
|
|
|
## 📝 Documentation technique
|
|
|
|
### 1. Documentation API
|
|
**À créer** :
|
|
- Documentation des services (`lib/`)
|
|
- Documentation des hooks (`hooks/`)
|
|
- Documentation des types (`types/`)
|
|
|
|
---
|
|
|
|
### 2. Guide de contribution
|
|
**À créer** :
|
|
- `CONTRIBUTING.md` - Guide pour les contributeurs
|
|
- Standards de code
|
|
- Processus de review
|
|
|
|
---
|
|
|
|
## 🎯 Priorités recommandées
|
|
|
|
### Priorité 1 (Critique) - Bugs
|
|
1. ✅ **Corriger le bug `handleUnlockClick`** dans `ArticleCard.tsx`
|
|
2. ✅ **Remplacer les `console.log`** par `console.error` ou supprimer
|
|
|
|
### Priorité 2 (Important) - Qualité de code
|
|
3. ✅ **Corriger les types `any`** dans `lib/alby.ts`
|
|
4. ✅ **Corriger les non-null assertions** dans `lib/storage/indexedDB.ts`
|
|
|
|
### Priorité 3 (Améliorations) - Fonctionnalités
|
|
5. ⏳ Statistiques détaillées du profil
|
|
6. ⏳ Édition/suppression d'articles
|
|
7. ⏳ Types supplémentaires de notifications
|
|
8. ⏳ Chiffrement des données sensibles (optionnel)
|
|
|
|
### Priorité 4 (Optionnel) - Qualité
|
|
9. ⏳ Tests unitaires
|
|
10. ⏳ Tests d'intégration
|
|
11. ⏳ Analytics et monitoring
|
|
12. ⏳ Documentation technique
|
|
|
|
---
|
|
|
|
## 📊 Résumé
|
|
|
|
### Bugs identifiés : 1
|
|
- Bug critique dans `ArticleCard.tsx`
|
|
|
|
### Problèmes de code : 3
|
|
- Utilisation de `console.log` (violation ESLint)
|
|
- Types `any` dans `alby.ts`
|
|
- Non-null assertions dans `indexedDB.ts`
|
|
|
|
### Fonctionnalités manquantes : 4
|
|
- Statistiques détaillées du profil
|
|
- Édition/suppression d'articles
|
|
- Types supplémentaires de notifications
|
|
- Chiffrement des données sensibles (optionnel)
|
|
|
|
### Tests : 0 (non planifié)
|
|
- Tests unitaires
|
|
- Tests de composants
|
|
- Tests d'intégration
|
|
|
|
### Documentation : 2
|
|
- Documentation API
|
|
- Guide de contribution
|
|
|
|
---
|
|
|
|
## ✅ Actions immédiates recommandées
|
|
|
|
1. **Corriger le bug `handleUnlockClick`** - Impact critique sur l'utilisation
|
|
2. **Nettoyer les `console.log`** - Conformité avec les règles ESLint
|
|
3. **Améliorer les types TypeScript** - Qualité de code
|
|
4. **Ajouter les statistiques du profil** - Amélioration UX
|
|
|
|
---
|
|
|
|
## 📌 Notes
|
|
|
|
- L'application est fonctionnelle et prête pour la production
|
|
- Les bugs identifiés doivent être corrigés avant déploiement
|
|
- Les fonctionnalités manquantes sont des améliorations, pas des blocages
|
|
- Les tests peuvent être ajoutés progressivement
|
|
- La documentation technique facilitera la maintenance
|