Base de données & migrations
Chaque module possède son propre schéma PostgreSQL, isolé du core et des autres modules. Les requêtes sont vérifiées à la compilation par SQLx.
Isolation par schéma #
Un module nommé calendar ne crée des tables que dans le schéma calendar. Aucune clé étrangère ne traverse les schémas : les modules restent découplés.
Migrations #
Les migrations vivent dans migrations/, versionnées et numérotées. Elles sont appliquées au démarrage (ou via la CLI). Convention de nommage :
migrations/
├── 000001_calendar_schema.up.sql
├── 000001_calendar_schema.down.sql
├── 000002_calendar_attendees.up.sql
└── 000002_calendar_attendees.down.sqlLe core lui-même suit la même convention (schéma core) : users, sessions, modules, settings, jobs, event_log, thèmes, MCP, push…
SQLx & cache hors-ligne #
Les requêtes utilisent les macros vérifiées à la compilation (sqlx::query_as!). Un cache .sqlx permet de builder sans base (CI, paquets) :
# Build hors-ligne (utilise le cache .sqlx, aucune DB requise)
SQLX_OFFLINE=true cargo build --release
# Régénérer le cache après un changement de requête/schéma
DATABASE_URL=postgres://… cargo sqlx prepare # puis commitez le dossier .sqlxConnexion injectée #
Le superviseur du core fournit au processus du module ses identifiants de base via l'environnement (KUBUNO_DB_HOST, KUBUNO_DB_PORT, KUBUNO_DB_USER, KUBUNO_DB_PASSWORD, KUBUNO_DB_NAME).