33800 Docs

← Retour

Proposition : Migration complète vers StorageService

Date : 29/12/2024 Projet : QwikPress Statut : EN ATTENTE VALIDATION


CONTEXTE

Le framework a DEUX problèmes critiques :

Problème 1 : Ancien API deprecated

Problème 2 : Contournement du StorageService

Certains fichiers (ex: admin/config/general/index.tsx) :


FICHIERS À MIGRER (37)

Composants admin (3)

src/components/admin/dynamic-inputs-editor/index.tsx
src/components/admin/page-data-selector/index.tsx
src/components/site/button-renderer/index.tsx

Config (19)

src/routes/admin/config/authentication/index.tsx
src/routes/admin/config/button-types/[buttonTypeKey]/edit/index.tsx
src/routes/admin/config/button-types/index.tsx
src/routes/admin/config/button-types/new/index.tsx
src/routes/admin/config/colors/[colorKey]/edit/index.tsx
src/routes/admin/config/colors/index.tsx
src/routes/admin/config/colors/new/index.tsx
src/routes/admin/config/footer/company-info/index.tsx
src/routes/admin/config/footer/copyright/index.tsx
src/routes/admin/config/footer/link-groups/[groupId]/index.tsx
src/routes/admin/config/footer/link-groups/index.tsx
src/routes/admin/config/footer/social/index.tsx
src/routes/admin/config/general/index.tsx
src/routes/admin/config/navigation/index.tsx
src/routes/admin/config/navigation/[navigationItemId]/edit/index.tsx
src/routes/admin/config/navigation/new/index.tsx
src/routes/admin/config/seo/analytics/index.tsx
src/routes/admin/config/seo/meta/index.tsx
src/routes/admin/config/seo/referencing/index.tsx

Pages admin (11)

src/routes/admin/index.tsx
src/routes/admin/modules/common/[moduleId]/edit/fields/[fieldName]/[index]/edit/index.tsx
src/routes/admin/modules/[moduleType]/layout.tsx
src/routes/admin/(pages)/newPage/index.tsx
src/routes/admin/(pages)/page/[pageId]/content/index.tsx
src/routes/admin/(pages)/page/[pageId]/layout.tsx
src/routes/admin/(pages)/page/[pageId]/modules/add/index.tsx
src/routes/admin/(pages)/page/[pageId]/modules/[moduleId]/edit/fields/[fieldName]/add/index.tsx
src/routes/admin/(pages)/page/[pageId]/modules/[moduleId]/edit/fields/[fieldName]/[index]/edit/index.tsx
src/routes/admin/(pages)/page/[pageId]/modules/[moduleId]/edit/index.tsx
src/routes/admin/(pages)/page/[pageId]/modules/[moduleId]/inputs/[inputId]/edit/index.tsx

SEO/Settings (3)

src/routes/admin/(pages)/page/[pageId]/seo/index.tsx
src/routes/admin/(pages)/page/[pageId]/settings/index.tsx
src/routes/admin/(pages)/page/[pageId]/subpages/index.tsx

Pages (1)

src/routes/admin/(pages)/pages/index.tsx

PATTERN DE MIGRATION

AVANT (problématique)

import { getDataService } from '../../../../services/data';

export const useConfigData = routeLoader$(async () => {
  const dataService = getDataService();  // ❌ DEPRECATED
  const config = await dataService.loadConfig();
  return { config };
});

export const updateConfigServer = server$(async (data) => {
  // ❌ CONTOURNEMENT - Écriture directe
  const { writeFile } = await import('fs/promises');
  await writeFile(configPath, JSON.stringify(data));
});

APRÈS (correct)

import { getStorage } from '../../../../services/storage';

export const useConfigData = routeLoader$(async ({ sharedMap }) => {
  const storage = getStorage(sharedMap);
  if (!storage) {
    return { config: null, error: 'Storage not initialized' };
  }
  const config = await storage.getConfig();
  return { config };
});

export const updateConfigServer = server$(async function(data) {
  const storage = getStorage(this.sharedMap);
  if (!storage) {
    return { success: false, error: 'Storage not initialized' };
  }
  // ✅ Utilise le service (compatible file + Supabase)
  return storage.saveConfig(data);
});

PLAN D'EXÉCUTION

Phase 1 : Préparation (10 min)

  1. Cloner le repo sur vscode.local
  2. Créer une branche fix/storage-migration
  3. Vérifier que les tests passent avant

Phase 2 : Migration fichiers config (45 min)

Phase 3 : Migration pages admin (30 min)

Phase 4 : Migration composants (15 min)

Phase 5 : Nettoyage (10 min)

  1. Supprimer src/services/data/ (ancien système)
  2. Mettre à jour les imports dans storage/index.ts
  3. Tests finaux

Phase 6 : Commit & Push

  1. Commit avec message descriptif
  2. Push vers GitLab
  3. Tester sur dev-portainer

RISQUES

Risque Mitigation
Casse fonctionnalité Tests après chaque fichier
Import circulaire Vérifier les dépendances
Mode file cassé Tester en local d'abord

VALIDATION REQUISE


Attente de ta validation avant de commencer.