refactor: architecture modules indépendants — nettoyage CORE, registry enrichi, page modules dynamique

- Supprimer les modules services et logs du CORE (déplacés dans viewServices et viewLogs)
- Enrichir modules/module.go : interface Registry avec NavItemDef, RunOnTarget, StreamOnTarget
- Réécrire modules/loader.go : NewLoader accepte *db.DB, *sshpool.Pool, *crypto.Encryptor
- Ajouter migration 005 : colonnes nav_* sur la table modules + suppression services/logs DB
- Mettre à jour db.go (repairSchema) pour ajout idempotent des colonnes nav_*
- Mettre à jour settings.go : GetModules retourne les champs nav, ajout GetRegistryModules et InstallRegistryModule
- Mettre à jour main.go : NewLoader avec les bons arguments, ajout routes /api/registry/modules
- Mettre à jour modules.html : section Store avec liste des modules Forgejo
- Mettre à jour app.js : sidebar dynamique (nav_href depuis DB), modulesPage avec store
- Mettre à jour pages.css : styles pour store de modules

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
enzo 2026-03-22 03:34:17 +01:00
parent 91cf788221
commit ec7d120ef6
15 changed files with 460 additions and 997 deletions

View file

@ -208,6 +208,12 @@ func (db *DB) repairSchema() error {
{"refresh_tokens", "user_agent", "TEXT NOT NULL DEFAULT ''"},
{"refresh_tokens", "ip", "TEXT NOT NULL DEFAULT ''"},
{"refresh_tokens", "last_used_at", "DATETIME"},
// Migration 005 : colonnes de navigation des modules (ajout idempotent)
{"modules", "nav_href", "TEXT NOT NULL DEFAULT ''"},
{"modules", "nav_icon", "TEXT NOT NULL DEFAULT ''"},
{"modules", "nav_color", "TEXT NOT NULL DEFAULT ''"},
{"modules", "nav_label_key", "TEXT NOT NULL DEFAULT ''"},
{"modules", "repo_url", "TEXT NOT NULL DEFAULT ''"},
}
for _, c := range needed {
if err := db.ensureColumn(c.table, c.name, c.def); err != nil {