33800 Docs

← Retour

Proposition : Refacto complète QwikPress - Version Template

Date : 28/12/2025 Status : EN ATTENTE VALIDATION Priorité : Haute


Contexte

Deux versions du projet existent avec des différences importantes :

L'objectif est de créer une version template générique prête à l'emploi.


Problèmes identifiés

1. Différences architecturales GitHub/GitLab

Fichier GitHub GitLab
plugin@auth.ts Existe (87 lignes) N'existe pas
plugin@data.ts Existe (43 lignes) N'existe pas
services/auth.ts N'existe pas Existe (169 lignes, 5+ try/catch)
api/auth/login Version plugin Version service

Décision : Adopter l'architecture GitHub (plugins Qwik)

2. Références hardcodées "Rhinov"

src/services/connectors-admin.ts:219:  'User-Agent': 'Rhinov-AutoSite-Test/1.0'
src/routes/admin/context-binding/demo/index.tsx:338: title: 'Démo Context Binding - Admin Rhinov'
src/routes/admin/config/backup/index.tsx:14-15: 'rhinov', 'backup' / 'rhinov', 'data'
src/types/connectors.ts:3: Architecture des connecteurs pour Rhinov Auto-Site
src/types/context-binding.ts:167,219: example: 'Rhinov'
+ exemples dans les types de modules

Décision : Remplacer par variables d'environnement / config

3. Try/catch excessifs

Total : 342 try/catch dans le code source.

Selon les règles Qwik (CLAUDE.md) :

AUCUN try/catch dans routeAction$ ou server$ Qwik a ses propres mécanismes d'erreur

Décision : Supprimer les try/catch inutiles, centraliser la gestion d'erreurs

4. Modules spécifiques clients

src/modules/
├── jordan-*      # 5 modules (client Jordan)
├── wil-*         # 5 modules (client Wil)
├── romain-*      # 4 modules (client Romain)
├── nova-*        # 2 modules (client Nova)
├── lp-*          # 5 modules (landing pages spécifiques)
└── génériques    # hero, cta, testimonials, etc.

Décision :


Plan de refacto

Phase 1 : Fusion architecture (GitHub → GitLab)

  1. Copier les plugins :

    • src/routes/plugin@auth.ts
    • src/routes/plugin@data.ts
  2. Supprimer l'ancien service :

    • src/services/auth.ts
  3. Mettre à jour les imports :

    • api/auth/login/index.ts : utiliser sharedMap
    • Routes admin : utiliser sharedMap.get('isAdmin')
  4. Synchroniser les différences :

    • middleware/logging.ts
    • plugins/connectors-plugin.ts
    • plugins/connectors.ts
    • routes/admin/config/authentication/index.tsx

Phase 2 : Généralisation (bye bye Rhinov)

  1. Créer variables d'environnement :

    APP_NAME=QwikPress
    APP_USER_AGENT=QwikPress/1.0
    DATA_DIR=data
    BACKUP_DIR=backup
  2. Remplacer les hardcodes :

    // Avant
    'User-Agent': 'Rhinov-AutoSite-Test/1.0'
    // Après
    'User-Agent': process.env.APP_USER_AGENT || 'QwikPress/1.0'
  3. Nettoyer les chemins :

    // Avant
    join(process.cwd(), 'rhinov', 'backup')
    // Après
    join(process.cwd(), process.env.DATA_DIR || 'data', 'backup')
  4. Mettre à jour CLAUDE.md :

    • Renommer "Rhinov Auto-Site" → "QwikPress"

Phase 3 : Nettoyage try/catch

  1. Identifier les catégories :

    • server$ / routeAction$ : SUPPRIMER tous les try/catch
    • Services I/O (filesystem, fetch) : GARDER ou centraliser
    • Parsing JSON : Centraliser dans un helper
  2. Créer un error handler global :

    // src/utils/error-handler.ts
    export function handleError(error: unknown, context: string): never {
      console.error(`[${context}]`, error);
      throw error; // Laisse Qwik gérer
    }
  3. Nettoyer fichier par fichier (priorité aux routes et server$)

Phase 4 : Nettoyage modules (optionnel)

Option A - Version light :

Option B - Version complète :

Phase 5 : Documentation et template

  1. README.md complet :

    • Installation
    • Configuration
    • Création de modules
    • Déploiement
  2. Données de démo :

    • data/config.json générique
    • data/pages/ avec pages d'exemple
    • Supprimer les données Rhinov
  3. Scripts de setup :

    ./scripts/init.sh my-site-name
    # Crée la structure, configure les variables

Fichiers à modifier/créer

Nouveaux fichiers

Fichiers à supprimer

Fichiers à modifier


Estimation

Phase Effort
Phase 1 : Fusion plugins ~1h
Phase 2 : Généralisation ~2h
Phase 3 : Try/catch ~3-4h
Phase 4 : Modules ~1h (option A)
Phase 5 : Documentation ~1h
Total ~8-9h

Questions avant de commencer

  1. Modules spécifiques : Option A (supprimer) ou B (renommer) ?
  2. Destination : On fait ça sur GitLab et on sync vers GitHub après ?
  3. Ordre des phases : On commence par quelle phase ?

Validation


Pour valider : "OK pour la refacto" ou "modifie [point]"