5.4 KiB
🗺️ UUID_DB_CARTOGRAPHY.md
Date: 04/12/2025 Statut: 🔴 ALERTE CRITIQUE (Schisme de Données) Contexte: Analyse post-mortem de la migration INT vers UUID et du conflit de propriété des données entre Backend (Go) et Chat (Rust).
1. État des Lieux : La Guerre des Schémas
Il existe trois sources de vérité concurrentes pour la définition de la base de données, créant un état incohérent.
| Entité | Source de Vérité | Type ID Utilisateur | Méthode de Génération | Colonnes Clés |
|---|---|---|---|---|
| Backend API (Go) | veza-backend-api/migrations/ |
UUID (Migré) | uuid_generate_v5 (Déterministe depuis INT) |
username, email, password_hash |
| Chat Server (Rust) | veza-chat-server/migrations/ |
UUID (Natif) | gen_random_uuid() (v4 Aléatoire) |
display_name, last_seen, avatar_url |
| Root Scripts | migrations/ |
UUID (Mixte) | uuid_generate_v4 (v4 Aléatoire) |
N/A (Tables secondaires) |
🚨 Le Conflit "Users"
La table users est définie différemment par les deux services majeurs.
- Backend (Go) migre les anciens IDs :
123->UUID-v5-du-123. - Chat (Rust) crée de nouveaux users :
UUID-v4-Random.
Conséquence : Si le Backend et le Chat partagent la même DB (ce qui est le cas en prod), le Chat Server va échouer car il attend des colonnes (display_name) qui n'existent pas dans la version Backend (first_name/last_name), ou vice-versa.
2. Cartographie des Tables & IDs
Tables Principales (Gérées par veza-backend-api)
Ces tables ont subi la migration 047 (Destructive).
| Table | Type ID PK | Type FK User | État Migration | Observation |
|---|---|---|---|---|
users |
UUID | N/A | ✅ Terminée | PK renommée de id_uuid à id. |
tracks |
SERIAL | UUID | ✅ Terminée | FK user_id est UUID. PK reste SERIAL ? (À vérifier) |
playlists |
SERIAL | UUID | ✅ Terminée | FK user_id est UUID. |
messages (Legacy) |
SERIAL | UUID | ✅ Terminée | Table messages du backend (pas celle du Chat Server). |
Tables "Chat" (Gérées par veza-chat-server)
Ces tables sont définies dans 001_create_clean_database.sql (Rust).
| Table | Type ID PK | Type FK User | État | Conflit ? |
|---|---|---|---|---|
conversations |
UUID | UUID | Natif | OK |
messages (New) |
UUID | UUID | Natif | ⚠️ Conflit de nom avec messages du Backend |
conversation_members |
Composite | UUID | Natif | OK |
Tables Secondaires (Gérées par migrations/ root)
Tables touchées par 001_migrate_ids_to_uuid_up.sql.
| Table | Type ID PK | État | Observation |
|---|---|---|---|
contests |
UUID (new_id) | ⚠️ Partiel | Colonne new_id ajoutée mais PK pas encore switchée ? |
equipment |
UUID (new_id) | ⚠️ Partiel | Idem. |
user_profiles |
UUID (new_id) | ⚠️ Partiel | Doublon potentiel avec users ? |
3. Analyse des Migrations Exécutées
Migration Critique : veza-backend-api/.../047_migrate_users_id_to_uuid.sql
C'est la migration de référence. Elle est destructrice (DROP COLUMN id).
- Points Forts : Utilise
uuid_generate_v5(namespace, old_id). Cela garantit que l'ID42devient toujours le même UUID. C'est excellent pour la consistance. - Points Faibles : Elle suppose qu'elle est la seule à toucher à la DB.
Migration "Root" : migrations/001_migrate_ids_to_uuid_up.sql
Semble être une tentative de rattrapage pour les tables oubliées par la migration 047.
- Problème : Elle ajoute
new_idmais ne semble pas (dans l'extrait lu) faire leDROPetRENAMEfinal. Elle laisse la DB dans un état intermédiaire (idINT +new_idUUID).
Scripts Shell de "Fix"
scripts/fix-remaining-uuid-errors.sh: Un script "Find & Replace" brutal (sed) sur le code Go.- Preuve que le code Go n'a pas été refactoré proprement mais "patché" pour accepter les UUIDs (remplacement de
0paruuid.Nil).
- Preuve que le code Go n'a pas été refactoré proprement mais "patché" pour accepter les UUIDs (remplacement de
4. Source of Truth (Proposition de Résolution)
Pour résoudre le schisme, nous devons établir une hiérarchie stricte.
👑 Maître du Schéma Global : veza-backend-api
Le Backend Go contient l'historique et la complexité métier (Auth, Roles, Profils). Il DOIT posséder la table users.
🚫 Interdit au Chat Server
Le veza-chat-server NE DOIT PAS :
- Créer la table
users. - Gérer ses propres migrations pour
users. - Avoir une table
messagesqui porte le même nom que celle du Backend (si elles sont dans le même schema).
✅ Actions Requises (pour la phase de correction)
- Aligner le schéma User : Le Chat Server (Rust) doit adapter son modèle
struct Userpour correspondre aux colonnes réelles du Backend (first_namevsdisplay_name). - Renommage Tables : La table
messagesdu Chat Server doit être renomméechat_messagespour éviter la collision avec les messages legacy du Backend. - Nettoyage Root : Finir ou reverter la migration
migrations/001_migrate_ids_to_uuid_up.sql(étatnew_idhybride dangereux).
5. Conclusion
Le chaos des IDs est en réalité un Chaos de Gouvernance. Deux équipes (ou deux esprits) ont travaillé en parallèle : l'une migrant l'existant (Go), l'autre construisant le futur (Rust), sans se synchroniser sur la couche de données partagée.