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

7.9 KiB

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)

// ❌ 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

  1. Corriger les types any dans lib/alby.ts
  2. Corriger les non-null assertions dans lib/storage/indexedDB.ts

Priorité 3 (Améliorations) - Fonctionnalités

  1. Statistiques détaillées du profil
  2. Édition/suppression d'articles
  3. Types supplémentaires de notifications
  4. Chiffrement des données sensibles (optionnel)

Priorité 4 (Optionnel) - Qualité

  1. Tests unitaires
  2. Tests d'intégration
  3. Analytics et monitoring
  4. 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