story-research-zapwall/features/todo-remaining-analysis.md
Nicolas Cantu 3000872dbc refactoring
- **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.
2025-12-22 17:56:00 +01:00

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