Skip to content

feat(v0.9.3): module settings system + noArchive wizard fix#11

Merged
AlexArtaud-Dev merged 1 commit into
masterfrom
feature/v0.9.3-settings
Jun 12, 2026
Merged

feat(v0.9.3): module settings system + noArchive wizard fix#11
AlexArtaud-Dev merged 1 commit into
masterfrom
feature/v0.9.3-settings

Conversation

@AlexArtaud-Dev

@AlexArtaud-Dev AlexArtaud-Dev commented Jun 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • System de paramètres par module : interface IModuleSettings générique permettant à chaque provider (Input/Output) de déclarer ses propres paramètres configurables, stockés en DB (ModuleSetting) et accessibles via GET/PUT /api/settings/modules/:module
  • Paramètres effectivement appliqués à l'exécution : HttpRestInputProvider utilise defaultTimeoutMs et maxRetries sur chaque appel HTTP ; MailOutputProvider bloque l'envoi si l'archive dépasse maxAttachmentSizeMb
  • Frontend : page /settings/modules/[module] auto-générée depuis la définition backend, sidebar Settings dynamique listant les modules enregistrés
  • Fix wizard noArchive : le toggle "Envoyer sans archiver" est désactivé en mode local si les sources ne comportent pas exactement un seul fichier (auto-reset quand les sources changent)

Détail des changements

Backend

  • ModuleSetting Prisma model + migration v0_9_3_module_settings
  • IModuleSettingsProvider interface + ModuleSettingsRegistry injectable
  • ModuleSettingsService + ModuleSettingsController (GET/PUT /api/settings/modules)
  • HttpRestInputProvider : defaultTimeoutMs (défaut 30s) + maxRetries (défaut 0) appliqués à runtime
  • MailOutputProvider : vérification maxAttachmentSizeMb (défaut 25 Mo) avant envoi SMTP
  • Nouveau code d'erreur MAIL_ATTACHMENT_TOO_LARGE
  • ProvidersModule : enregistrement automatique des providers implémentant IModuleSettingsProvider

Frontend

  • Registry léger (module-settings-registry.ts) pour la navigation sidebar
  • Page dynamique /settings/modules/[module] : formulaire auto-généré (number, string, boolean, select)
  • Sidebar Settings : niveau dynamique "Paramètres système" + liens par module
  • api.put() ajouté dans la lib API
  • StepZip : prop canNoArchive — toggle désactivé + message explicatif si conditions non remplies
  • BackupWizard : reset noArchive dans le handler sources (pas d'effet réactif)

Pattern d'extension

Pour ajouter des settings à un futur provider :

  1. Implémenter IModuleSettingsProvider sur la classe backend
  2. Appeler registerModuleSettingsNav(...) dans frontend/providers/index.ts

Aucune page existante à modifier.

Test plan

  • Lancer la migration : cd backend && pnpm exec prisma migrate dev
  • Vérifier GET /api/settings/modules retourne http-rest et mail avec leurs valeurs par défaut
  • Modifier un paramètre via PUT /api/settings/modules/http-rest et vérifier la persistance
  • Naviguer vers /settings → vérifier le sous-niveau sidebar (Paramètres système + HTTP REST + Mail)
  • Naviguer vers /settings/modules/http-rest → vérifier le formulaire auto-généré
  • Wizard backup local : ajouter un dossier → vérifier que le toggle noArchive est désactivé
  • Wizard backup local : sélectionner un seul fichier → vérifier que le toggle noArchive est actif
  • Wizard backup input → vérifier que le toggle noArchive est toujours actif

Add a generic IModuleSettings infrastructure allowing each Input/Output
provider to declare its own configurable parameters stored in a new
ModuleSetting table (module, key, value).

Backend:
- ModuleSetting Prisma model + migration v0_9_3_module_settings
- IModuleSettingsProvider interface + ModuleSettingsRegistry injectable
- ModuleSettingsService (CRUD with defaults fallback) + controller
  GET/PUT /api/settings/modules and /api/settings/modules/:module
- HttpRestInputProvider: defaultTimeoutMs + maxRetries applied at runtime
  (timeout forwarded to fetchWithConfig, retry wrapper on network errors)
- MailOutputProvider: maxAttachmentSizeMb check before SMTP send
- MAIL_ATTACHMENT_TOO_LARGE error code + exception
- ProvidersModule auto-registers providers implementing IModuleSettingsProvider

Frontend:
- Module settings registry for sidebar nav (module, labelKey, icon)
- Dynamic /settings/modules/[module] page with auto-generated form
- Settings sidebar level with System Settings + per-module links
- api.put() method
- noArchive toggle disabled in wizard when sources don't qualify
  (local mode requires exactly one file source; resets on sources change)
@AlexArtaud-Dev
AlexArtaud-Dev merged commit 91572ff into master Jun 12, 2026
10 checks passed
@AlexArtaud-Dev
AlexArtaud-Dev deleted the feature/v0.9.3-settings branch June 12, 2026 12:50
@AlexArtaud-Dev
AlexArtaud-Dev restored the feature/v0.9.3-settings branch June 12, 2026 12:52
@AlexArtaud-Dev
AlexArtaud-Dev deleted the feature/v0.9.3-settings branch June 12, 2026 13:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant