5.6 KiB
📐 UUID_DB_MIGRATION_PLAN.md
Date: 04/12/2025 Statut: PLAN VALIDÉ (En attente d'exécution) Objectif: Unification totale des IDs (UUID) et séparation des responsabilités (Schemas).
1. Schéma Cible & Stratégie de Séparation
Pour résoudre définitivement les conflits de nommage et de propriété, nous allons adopter une architecture Multi-Schéma PostgreSQL.
1.1 Architecture des Schémas
-
Schema
public(Master: Backend Go)- Contient les données "Cœur" :
users,auth,tracks,playlists. - Le service Go
veza-backend-apipossède les droits DDL (Migrations) sur ce schéma. - Tous les IDs (PK et FK) sont des UUID.
- Contient les données "Cœur" :
-
Schema
chat(Master: Chat Rust)- Contient les données spécifiques au chat :
conversations,messages,members. - Le service Rust
veza-chat-serverpossède les droits DDL sur ce schéma uniquement. - Fait référence à
public.users(id)via FK. - Isole la table
messagesdu chat de la tablemessageslegacy du backend.
- Contient les données spécifiques au chat :
1.2 Matrice des Types d'Identifiants
| Entité | Table | Schema | PK Type | Géré par |
|---|---|---|---|---|
| User | users |
public |
UUID | Go |
| Track | tracks |
public |
UUID | Go |
| Playlist | playlists |
public |
UUID | Go |
| Conversation | conversations |
chat |
UUID | Rust |
| Message | messages |
chat |
UUID | Rust |
| Message (Legacy) | messages |
public |
UUID | Go |
2. Migrations : Le Plan de Bataille
Les migrations seront exécutées séquentiellement.
Phase A : Consolidation du Backend (Go)
Ces migrations doivent être créées dans veza-backend-api/migrations/
-
070_finish_secondary_tables_uuid.sql- But : Finaliser le travail laissé par
migrations/001_migrate_ids_to_uuid_up.sql. - Action : Pour toutes les tables secondaires (
contests,equipment, etc.) qui ont une colonnenew_id:- Supprimer l'ancienne PK
id(INT). - Renommer
new_id->id. - Mettre
iden PRIMARY KEY.
- Supprimer l'ancienne PK
- But : Finaliser le travail laissé par
-
071_migrate_tracks_playlists_pk_to_uuid.sql- But : S'assurer que
tracksetplaylistsont bien leur PK en UUID (pas seulement la FKuser_id). - Action : Même pattern : ajout colonne tmp UUID, migration data, switch PK.
- But : S'assurer que
-
072_create_chat_schema.sql- Action :
CREATE SCHEMA IF NOT EXISTS chat; - Action : Donner les droits nécessaires au user DB du chat server.
- Action :
Phase B : Refonte du Chat Server (Rust)
Ces migrations remplacent le dossier veza-chat-server/migrations/ actuel.
001_init_chat_schema.sql(Remplacement total)- Action : Créer les tables
conversations,messages,conversation_membersDANS le schémachat. - Reference :
REFERENCES public.users(id). - Nettoyage : NE PAS créer de table
users.
- Action : Créer les tables
3. Modifications du Code (Implementation Detail)
3.1 Backend API (Go)
- Models GORM :
- Vérifier que tous les structs (
User,Track,Playlist) utilisent le typeuuid.UUIDpour le champIDet ont le tag`gorm:"type:uuid;default:uuid_generate_v4()"`(ou v5 pour users legacy). - Supprimer définitivement les champs
ID uintouint64.
- Vérifier que tous les structs (
- Handlers :
- Nettoyer tout code convertissant
string->intpour les IDs. Utiliseruuid.Parse().
- Nettoyer tout code convertissant
3.2 Chat Server (Rust)
- Configuration SQLx :
- Forcer le search_path :
ALTER DATABASE ... SET search_path TO chat, public;.
- Forcer le search_path :
- Structs :
- Le struct
User(utilisé pour l'auth ou l'info user) doit être un "Read Model" mappé surpublic.users. - Supprimer toute logique d'écriture dans
usersdepuis Rust.
- Le struct
- Queries :
- Remplacer
SELECT ... FROM usersparSELECT ... FROM public.users. - Remplacer
SELECT ... FROM messagesparSELECT ... FROM chat.messages.
- Remplacer
4. Désarmement des Migrations du Chat
Actuellement, veza-chat-server contient des migrations conflictuelles.
Plan d'action :
- Supprimer le contenu actuel de
veza-chat-server/migrations/. - Créer une nouvelle migration
0001_init_chat.sqlqui contient uniquement la DDL du schémachat(conversations, messages). - Retirer toute instruction
CREATE TABLE users. - Ajuster
sqlx-data.json(le fichier de cache query verification) en le régénérant contre la nouvelle DB cible.
5. Nettoyage des Scripts & Hacks
Les scripts "béquilles" doivent disparaître pour garantir que le code est sain sans patch externe.
-
Supprimer :
scripts/fix-remaining-uuid-errors.sh(Le code doit compiler nativement).scripts/migrate-handlers-to-uuid.sh.scripts/migrate-models-to-uuid.sh.migrations/(le dossier root) : Son contenu utile est déplacé dans la migration070du backend.
-
Créer :
scripts/db-reset-clean.sh:- Drop DB.
- Create DB.
- Run Backend Migrations (Go).
- Run Chat Migrations (Rust).
- Seed minimal data.
6. Vérification de Compatibilité
- Backend -> DB : Le Backend Go migre tout en UUID. Il n'attendra plus de SERIAL.
- Chat -> DB : Le Chat utilise son propre schéma. Il lit
public.users(qui est UUID) via des FKs UUID. Compatibilité 100%. - Collision Messages : Résolue par
public.messages(legacy) vschat.messages.
⏳ Prochaine Étape
Exécuter ce plan nécessite d'abord de générer les fichiers de migration SQL décrits en Phase A et B, puis d'appliquer les changements de code.