veza/UUID_MIGRATION_CARTOGRAPHY.md
okinrev 1ef0e0d6d6 P0: stabilisation backend/chat/stream + nouvelle base migrations v1
Backend Go:
- Remplacement complet des anciennes migrations par la base V1 alignée sur ORIGIN.
- Durcissement global du parsing JSON (BindAndValidateJSON + RespondWithAppError).
- Sécurisation de config.go, CORS, statuts de santé et monitoring.
- Implémentation des transactions P0 (RBAC, duplication de playlists, social toggles).
- Ajout d’un job worker structuré (emails, analytics, thumbnails) + tests associés.
- Nouvelle doc backend : AUDIT_CONFIG, BACKEND_CONFIG, AUTH_PASSWORD_RESET, JOB_WORKER_*.

Chat server (Rust):
- Refonte du pipeline JWT + sécurité, audit et rate limiting avancé.
- Implémentation complète du cycle de message (read receipts, delivered, edit/delete, typing).
- Nettoyage des panics, gestion d’erreurs robuste, logs structurés.
- Migrations chat alignées sur le schéma UUID et nouvelles features.

Stream server (Rust):
- Refonte du moteur de streaming (encoding pipeline + HLS) et des modules core.
- Transactions P0 pour les jobs et segments, garanties d’atomicité.
- Documentation détaillée de la pipeline (AUDIT_STREAM_*, DESIGN_STREAM_PIPELINE, TRANSACTIONS_P0_IMPLEMENTATION).

Documentation & audits:
- TRIAGE.md et AUDIT_STABILITY.md à jour avec l’état réel des 3 services.
- Cartographie complète des migrations et des transactions (DB_MIGRATIONS_*, DB_TRANSACTION_PLAN, AUDIT_DB_TRANSACTIONS, TRANSACTION_TESTS_PHASE3).
- Scripts de reset et de cleanup pour la lab DB et la V1.

Ce commit fige l’ensemble du travail de stabilisation P0 (UUID, backend, chat et stream) avant les phases suivantes (Coherence Guardian, WS hardening, etc.).
2025-12-06 11:14:38 +01:00

32 KiB
Raw Blame History

Rapport Migration UUID — Projet Veza

Date : 2025-01-27
Objectif : Cartographier exhaustivement l'état de la migration UUID dans le monorepo et produire un plan de nettoyage pour supprimer définitivement tout le code legacy.


Résumé exécutif

  • Services analysés : 6 (backend-api, chat-server, stream-server, web, mobile, desktop)
  • Fichiers legacy à supprimer : 45+ (migrations_legacy/, *.legacy, dossiers backup)
  • Modifications de code requises : ~15 fichiers avec patterns INT à corriger
  • TODOs/FIXMEs liés à la migration : 8 identifiés
  • Estimation temps nettoyage : 4-6 heures

État global : La migration UUID est largement complétée dans le backend Go, mais il reste :

  • Un dossier migrations_legacy/ complet (44 fichiers SQL)
  • Des fichiers .legacy
  • Des TODOs/FIXMEs indiquant une migration partielle
  • Le chat-server Rust utilise encore des i64 pour certains IDs (cohabitation INT/UUID)

1. Cartographie complète des services

1.1 Services du monorepo

Service Langage A des migrations A migrations_legacy ORM/DB État UUID
veza-backend-api Go migrations/ migrations_legacy/ (44 fichiers) GORM Principalement migré
veza-chat-server Rust migrations/ SQLx ⚠️ Mixte (i64 + UUID)
veza-stream-server Rust (pas de migrations SQL) SQLx UUID
apps/web React/TS - string (UUID)
veza-mobile React Native - string (UUID)
veza-desktop Electron/TS - string (UUID)

1.2 Fichiers de migration par service

veza-backend-api/migrations/ (MODERN - UUID)

Fichier Tables impactées Type d'ID Notes
001_extensions_and_types.sql - - Extensions PostgreSQL
010_auth_and_users.sql users UUID
020_rbac_and_profiles.sql roles, permissions UUID
030_files_management.sql files UUID
040_streaming_core.sql tracks, playlists UUID
041_streaming_analytics.sql playback_analytics UUID
042_media_processing.sql hls_streams, transcodes UUID
050_legacy_chat.sql messages, rooms UUID
900_triggers_and_functions.sql - - Triggers

Total : 9 fichiers modernes

veza-backend-api/migrations_legacy/ (À SUPPRIMER)

Fichier Tables impactées Type d'ID Équivalent modern Statut
001_create_users.sql users INT → UUID 010_auth_and_users.sql Remplacé
018_create_email_verification_tokens.sql email_verification_tokens INT 010_auth_and_users.sql Remplacé
019_create_password_reset_tokens.sql password_reset_tokens INT 010_auth_and_users.sql Remplacé
020_create_sessions.sql sessions INT → UUID 010_auth_and_users.sql Remplacé
021_add_profile_privacy.sql users - 010_auth_and_users.sql Remplacé
022_add_profile_slug.sql users - 010_auth_and_users.sql Remplacé
023_create_roles_permissions.sql roles, permissions INT → UUID 020_rbac_and_profiles.sql Remplacé
024_seed_permissions.sql permissions - 020_rbac_and_profiles.sql Remplacé
025_create_tracks.sql tracks INT → UUID 040_streaming_core.sql Remplacé
026_add_track_status.sql tracks - 040_streaming_core.sql Remplacé
027_create_track_likes.sql track_likes INT → UUID 040_streaming_core.sql Remplacé
028_create_track_comments.sql track_comments INT → UUID 040_streaming_core.sql Remplacé
029_create_track_plays.sql track_plays INT → UUID 040_streaming_core.sql Remplacé
030_create_playlists.sql playlists INT → UUID 040_streaming_core.sql Remplacé
031_create_playlist_collaborators.sql playlist_collaborators INT → UUID 040_streaming_core.sql Remplacé
031_create_track_shares.sql track_shares INT → UUID 040_streaming_core.sql Remplacé
032_create_playlist_follows.sql playlist_follows INT → UUID 040_streaming_core.sql Remplacé
032_create_track_versions.sql track_versions INT → UUID 040_streaming_core.sql Remplacé
033_create_track_history.sql track_history INT → UUID 041_streaming_analytics.sql Remplacé
034_create_hls_streams_table.sql hls_streams INT → UUID 042_media_processing.sql Remplacé
035_create_hls_transcode_queue.sql hls_transcode_queue INT → UUID 042_media_processing.sql Remplacé
036_create_bitrate_adaptation_logs.sql bitrate_adaptation_logs INT → UUID 041_streaming_analytics.sql Remplacé
037_create_playback_analytics.sql playback_analytics INT → UUID 041_streaming_analytics.sql Remplacé
038_add_playback_analytics_indexes.sql playback_analytics - 041_streaming_analytics.sql Remplacé
040_create_refresh_tokens.sql refresh_tokens INT → UUID 010_auth_and_users.sql Remplacé
041_create_rooms.sql rooms INT → UUID 050_legacy_chat.sql Remplacé
042_create_room_members.sql room_members INT → UUID 050_legacy_chat.sql Remplacé
043_create_messages.sql messages INT → UUID 050_legacy_chat.sql Remplacé
044_add_sessions_revoked_at.sql sessions - 010_auth_and_users.sql Remplacé
045_create_user_sessions.sql user_sessions INT → UUID 010_auth_and_users.sql Remplacé
046_add_playlists_missing_columns.sql playlists - 040_streaming_core.sql Remplacé
047_migrate_users_id_to_uuid.sql users Migration INT→UUID - Migration appliquée
048_migrate_webhooks_to_uuid.sql webhooks Migration INT→UUID - Migration appliquée
049_migrate_sessions_to_uuid.sql sessions Migration INT→UUID - Migration appliquée
050_migrate_room_members_to_uuid.sql room_members Migration INT→UUID - Migration appliquée
051_migrate_messages_to_uuid.sql messages Migration INT→UUID - Migration appliquée
060_migrate_tracks_playlists_to_uuid.sql tracks, playlists Migration INT→UUID - Migration appliquée
061_migrate_admin_tables_to_uuid.sql admin tables Migration INT→UUID - Migration appliquée
062_migrate_roles_permissions_to_uuid.sql roles, permissions Migration INT→UUID - Migration appliquée
070_finish_secondary_tables_uuid.sql secondary tables Migration INT→UUID - Migration appliquée
070_fix_users_user_roles_uuid.sql user_roles Migration INT→UUID - Migration appliquée
071_migrate_tracks_playlists_pk_to_uuid.sql tracks, playlists Migration PK INT→UUID - Migration appliquée
072_create_chat_schema.sql chat tables UUID 050_legacy_chat.sql Remplacé
XXX_create_playlist_versions.sql playlist_versions INT → UUID 040_streaming_core.sql Remplacé

Total : 44 fichiers legacy à supprimer

veza-chat-server/migrations/ (MODERN - UUID)

Fichier Tables impactées Type d'ID Notes
001_create_clean_database.sql users, conversations, messages UUID Toutes les tables utilisent UUID
002_advanced_features.sql messages, conversations UUID
1000_dm_enriched.sql conversations UUID
1001_post_migration_fixes.sql - - Corrections
999_cleanup_production_ready_fixed.sql - - Nettoyage
archive/ 4 fichiers archivés - Archive (peut être supprimé)

Total : 5 fichiers actifs + 4 archivés

veza-stream-server/migrations/

Aucun fichier de migration SQL - Le stream-server n'utilise pas de migrations SQL explicites.


2. Modèles et types d'ID par service

2.1 veza-backend-api (Go)

Modèle Fichier Type ID actuel Type ID attendu Conforme Notes
User internal/models/user.go uuid.UUID uuid.UUID
Track internal/models/track.go uuid.UUID uuid.UUID
Playlist internal/models/playlist.go uuid.UUID uuid.UUID
Session internal/models/session.go uuid.UUID uuid.UUID
Room internal/models/room.go uuid.UUID uuid.UUID
Message internal/models/message.go uuid.UUID uuid.UUID
Role internal/models/role.go uuid.UUID uuid.UUID
RefreshToken internal/models/refresh_token.go uuid.UUID uuid.UUID
TrackLike internal/models/track_like.go uuid.UUID uuid.UUID
TrackComment internal/models/track_comment.go uuid.UUID uuid.UUID
TrackShare internal/models/track_share.go uuid.UUID uuid.UUID
PlaylistCollaborator internal/models/playlist_collaborator.go uuid.UUID uuid.UUID
PlaybackAnalytics internal/models/playback_analytics.go uuid.UUID uuid.UUID
HLSStream internal/models/hls_stream.go uuid.UUID uuid.UUID
HLSTranscodeQueue internal/models/hls_transcode_queue.go uuid.UUID uuid.UUID
Contest internal/models/contest.go uuid.UUID uuid.UUID
ContestEntry internal/models/contest.go uuid.UUID uuid.UUID
MFAConfig internal/models/mfa_config.go uuid.UUID uuid.UUID
FederatedIdentity internal/models/federated_identity.go uuid.UUID uuid.UUID
AdminSettings internal/models/admin.go uuid.UUID uuid.UUID
AuditLog internal/models/admin.go uuid.UUID uuid.UUID
CategoryStats internal/models/admin.go int int Compteur, pas un ID

Résultat : 100% conforme - Tous les modèles principaux utilisent UUID

2.2 veza-chat-server (Rust)

Struct Fichier Type ID Type UUID Conforme Notes
Message src/models/message.rs Uuid ID principal = UUID
Room (channels.rs) src/hub/channels.rs id: i64, uuid: Uuid ⚠️ PROBLÈME : Double ID (i64 + UUID)
RoomMember src/hub/channels.rs id: i64, conversation_id: i64, user_id: i64 PROBLÈME : Utilise i64
RoomMessage src/hub/channels.rs id: i64, uuid: Uuid, author_id: i64 ⚠️ PROBLÈME : Mixte
Conversation (DB) migrations/001_create_clean_database.sql UUID Schéma DB = UUID

Résultat : ⚠️ Partiellement conforme - Le schéma DB utilise UUID, mais le code Rust utilise encore des i64 pour certains IDs.

Problème identifié : Le chat-server a une cohabitation INT/UUID :

  • Les structures Rust (Room, RoomMember, RoomMessage) utilisent i64 pour les IDs
  • La base de données utilise UUID (voir migrations/001_create_clean_database.sql)
  • Il y a un champ uuid: Uuid dans certaines structures mais l'ID principal reste i64

2.3 veza-stream-server (Rust)

À vérifier : Le stream-server n'a pas de modèles de données explicites dans le code analysé. Il semble utiliser des UUIDs pour les identifiants de tracks (basé sur les appels API).

2.4 apps/web (Frontend React)

Interface/Type Fichier Type ID Conforme Notes
User src/types/user.ts (présumé) string (uuid) Les UUIDs sont représentés comme strings en TS
Track src/types/track.ts (présumé) string (uuid)
Playlist src/types/playlist.ts (présumé) string (uuid)

Résultat : Conforme - Le frontend traite les IDs comme des strings (format UUID)


3. Code legacy détecté

3.1 Fichiers explicitement legacy (à supprimer)

Fichier/Dossier Service Raison Vérification
migrations_legacy/ (44 fichiers) veza-backend-api Dossier entier legacy, remplacé par migrations/ Aucun import référencé
cmd/main.go.legacy veza-backend-api Ancien point d'entrée Non référencé dans build
migrations/archive/ (4 fichiers) veza-chat-server Fichiers archivés ⚠️ À vérifier si utilisés

3.2 Code avec patterns INT (à vérifier/migrer)

Backend Go

Fichier Ligne Code Action Priorité
internal/core/track/handler.go 136 // TODO(P2-GO-004): trackUploadService attend int64 Vérifier si trackUploadService utilise encore int64 🔴 Haute
internal/core/track/handler.go 151 // TODO(P2-GO-004): Migration UUID partielle Compléter migration trackUploadService 🔴 Haute
internal/services/track_history_service.go 81 // FIXME: models.TrackHistory needs UUID too Vérifier TrackHistory 🟡 Moyenne
internal/repositories/playlist_collaborator_repository.go 67 // FIXME: Assurer que le modèle PlaylistCollaborator utilise UUID Vérifier (déjà UUID normalement) 🟢 Basse
internal/services/playlist_version_service.go 72 // FIXME: models.PlaylistVersion ID types need check Vérifier PlaylistVersion 🟡 Moyenne
internal/services/playlist_service.go 212 // FIXME: PlaylistVersionService likely needs update Vérifier PlaylistVersionService 🟡 Moyenne

Chat Server Rust

Fichier Ligne Code Action Priorité
src/hub/channels.rs 28-40 pub struct Room { pub id: i64, pub uuid: Uuid, ... } Migrer vers UUID uniquement 🔴 Haute
src/hub/channels.rs 42-51 pub struct RoomMember { pub id: i64, pub conversation_id: i64, ... } Migrer vers UUID 🔴 Haute
src/hub/channels.rs 54-75 pub struct RoomMessage { pub id: i64, pub uuid: Uuid, ... } Migrer vers UUID uniquement 🔴 Haute
src/hub/channels.rs 98-165 Fonctions utilisant i64 pour room_id, user_id Migrer vers UUID 🔴 Haute

Problème majeur : Le chat-server Rust utilise des i64 alors que la DB utilise UUID. Il faut soit :

  1. Migrer le code Rust vers UUID (recommandé)
  2. Ou créer une couche de conversion (non recommandé)

3.3 TODOs liés à la migration

Fichier Ligne TODO Statut Action
internal/core/track/handler.go 136 TODO(P2-GO-004): trackUploadService attend int64 ⚠️ À vérifier Vérifier trackUploadService
internal/core/track/handler.go 151 TODO(P2-GO-004): Migration UUID partielle ⚠️ À vérifier Compléter migration
internal/services/track_history_service.go 81 FIXME: models.TrackHistory needs UUID too ⚠️ À vérifier Vérifier TrackHistory
internal/repositories/playlist_collaborator_repository.go 67 FIXME: Assurer que le modèle PlaylistCollaborator utilise UUID Probablement fait Vérifier et supprimer si OK
internal/services/playlist_version_service.go 72 FIXME: models.PlaylistVersion ID types need check ⚠️ À vérifier Vérifier PlaylistVersion
internal/services/playlist_service.go 212 FIXME: PlaylistVersionService likely needs update ⚠️ À vérifier Vérifier PlaylistVersionService

4. Foreign Keys et cohérence

4.1 Backend Go

Table source Colonne FK Table cible Type FK Type PK cible Cohérent
tracks user_id users UUID UUID
playlists user_id users UUID UUID
track_likes track_id tracks UUID UUID
track_likes user_id users UUID UUID
track_comments track_id tracks UUID UUID
track_comments user_id users UUID UUID
playlist_collaborators playlist_id playlists UUID UUID
playlist_collaborators user_id users UUID UUID
room_members room_id rooms UUID UUID
room_members user_id users UUID UUID
messages room_id rooms UUID UUID
messages user_id users UUID UUID
sessions user_id users UUID UUID
refresh_tokens user_id users UUID UUID

Résultat : 100% cohérent - Toutes les Foreign Keys utilisent UUID

4.2 Chat Server (Base de données)

Table source Colonne FK Table cible Type FK Type PK cible Cohérent
conversations created_by users UUID UUID
conversation_members conversation_id conversations UUID UUID
conversation_members user_id users UUID UUID
messages conversation_id conversations UUID UUID
messages sender_id users UUID UUID
messages parent_message_id messages UUID UUID

Résultat : 100% cohérent - Le schéma DB utilise UUID partout

Problème : Le code Rust utilise i64 alors que la DB utilise UUIDIncohérence code/DB


5. Endpoints et parsing d'ID

5.1 Backend Go - Endpoints analysés

Endpoint Service Fichier Méthode de parsing Format attendu Conforme
GET /api/v1/users/:id backend-api handlers/profile_handler.go uuid.Parse(id) UUID
GET /api/v1/tracks/:id backend-api internal/core/track/handler.go uuid.Parse(id) UUID
PUT /api/v1/tracks/:id backend-api internal/core/track/handler.go uuid.Parse(id) UUID
DELETE /api/v1/tracks/:id backend-api internal/core/track/handler.go uuid.Parse(id) UUID
GET /api/v1/tracks/:id/bitrate/analytics backend-api handlers/bitrate_handler.go uuid.Parse(id) UUID
POST /api/v1/tracks/:id/analytics backend-api handlers/playback_analytics_handler.go uuid.Parse(id) UUID
POST /api/v1/tracks/:id/hls/transcode backend-api handlers/hls_handler.go uuid.Parse(id) UUID
GET /api/v1/playlists/:id backend-api handlers/playlist_handler.go uuid.Parse(id) UUID

Résultat : 100% conforme - Tous les endpoints utilisent uuid.Parse()

5.2 Patterns de parsing détectés

Patterns UUID (corrects) :

trackID, err := uuid.Parse(c.Param("id"))

Patterns INT (legacy - non trouvés dans les handlers actifs) :

// Aucun strconv.Atoi trouvé pour les IDs dans les handlers
// Seulement pour pagination (page, limit) - OK

Résultat : Aucun pattern INT détecté pour les IDs dans les handlers


6. Dépendances inter-services

6.1 Communication inter-services

Service source Service cible Méthode Format ID échangé Cohérent Notes
backend-api chat-server HTTP/WebSocket UUID (string) Via API REST
backend-api stream-server HTTP UUID (string) Via API REST
web frontend backend-api REST string (uuid) JSON serialization
mobile backend-api REST string (uuid) JSON serialization
desktop backend-api REST string (uuid) JSON serialization

Résultat : Cohérent - Tous les échanges utilisent UUID (sérialisés en string)

6.2 DTOs et contrats

Backend → Frontend

DTO Fichier Champ ID Type Frontend attend Conforme
UserResponse internal/api/user/types.go ID uuid.UUID string
TrackResponse internal/core/track/handler.go ID uuid.UUID string
PlaylistResponse handlers/playlist_handler.go ID uuid.UUID string

Résultat : Conforme - Les UUIDs sont sérialisés en string JSON (comportement standard)


7. Plan de nettoyage

7.1 Inventaire des suppressions

Suppressions sûres (aucune dépendance)

Chemin Raison Vérification Taille estimée
veza-backend-api/migrations_legacy/ Remplacé par migrations/ Aucun import ~44 fichiers
veza-backend-api/cmd/main.go.legacy Ancien point d'entrée Non référencé 1 fichier
veza-chat-server/migrations/archive/ Fichiers archivés ⚠️ À vérifier 4 fichiers

Total : ~49 fichiers à supprimer

Suppressions à valider (peuvent avoir des dépendances)

Chemin Raison Dépendances à vérifier
Aucun identifié - -

7.2 Modifications de code nécessaires

Haute priorité (bloque la suppression legacy)

Fichier Ligne Modification Avant Après Service
src/hub/channels.rs 28-40 Migrer Room.id vers UUID pub id: i64 pub id: Uuid chat-server
src/hub/channels.rs 42-51 Migrer RoomMember vers UUID pub id: i64, pub conversation_id: i64, pub user_id: i64 pub id: Uuid, pub conversation_id: Uuid, pub user_id: Uuid chat-server
src/hub/channels.rs 54-75 Migrer RoomMessage vers UUID pub id: i64, pub author_id: i64, ... pub id: Uuid, pub author_id: Uuid, ... chat-server
src/hub/channels.rs Toutes fonctions Migrer signatures vers UUID room_id: i64, user_id: i64 room_id: Uuid, user_id: Uuid chat-server

Estimation : 2-3 heures pour migrer le chat-server Rust

Moyenne priorité (nettoyage)

Fichier Modification Raison
internal/core/track/handler.go Vérifier et supprimer TODOs si résolus Nettoyage
internal/services/track_history_service.go Vérifier TrackHistory.ID Vérification
internal/services/playlist_version_service.go Vérifier PlaylistVersion.ID Vérification
internal/services/playlist_service.go Vérifier et supprimer FIXME si résolu Nettoyage
internal/repositories/playlist_collaborator_repository.go Vérifier et supprimer FIXME si résolu Nettoyage

Estimation : 30 minutes - 1 heure

Basse priorité (cosmétique)

Fichier Modification
Tous les fichiers avec commentaires MIGRATION UUID: ... Supprimer commentaires obsolètes
Documentation Mettre à jour pour refléter UUID partout

Estimation : 30 minutes

7.3 Ordre des opérations recommandé

Étape 1 : Préparation (avant toute suppression)

  1. Créer une branche cleanup/uuid-migration
  2. S'assurer que tous les tests passent sur main
  3. Tag git : git tag pre-uuid-cleanup
  4. Backup : tar -czf migrations_legacy_backup.tar.gz veza-backend-api/migrations_legacy/

Étape 2 : Corrections de code (dans l'ordre)

2.1 Chat Server Rust (priorité haute)

  1. Migrer src/hub/channels.rs : Room.id vers Uuid
  2. Migrer src/hub/channels.rs : RoomMember vers Uuid
  3. Migrer src/hub/channels.rs : RoomMessage vers Uuid
  4. Migrer toutes les fonctions dans channels.rs vers UUID
  5. Vérifier tous les autres fichiers Rust du chat-server
  6. Compiler : cd veza-chat-server && cargo build --release
  7. Tests : cd veza-chat-server && cargo test

2.2 Backend Go (vérifications)

  1. Vérifier internal/services/track_upload_service.go : utilise-t-il UUID ?
  2. Vérifier internal/models/track_history.go : ID est-il UUID ?
  3. Vérifier internal/models/playlist_version.go : ID est-il UUID ?
  4. Supprimer les TODOs/FIXMEs résolus
  5. Tests : cd veza-backend-api && go test ./... -v

Étape 3 : Suppressions (dans l'ordre)

  1. Supprimer veza-backend-api/migrations_legacy/
    rm -rf veza-backend-api/migrations_legacy/
    
  2. Supprimer veza-backend-api/cmd/main.go.legacy
    rm veza-backend-api/cmd/main.go.legacy
    
  3. Vérifier et supprimer veza-chat-server/migrations/archive/ (si non utilisé)
    # Vérifier d'abord
    cd veza-chat-server && cargo build
    # Si OK, supprimer
    rm -rf veza-chat-server/migrations/archive/
    
  4. Lancer les tests → doivent passer
    cd veza-backend-api && go test ./... -v
    cd veza-chat-server && cargo test
    

Étape 4 : Nettoyage final

  1. Supprimer TODOs obsolètes liés à la migration
  2. Supprimer commentaires MIGRATION UUID: ... obsolètes
  3. Mettre à jour la documentation
  4. Commit final avec message explicite

Étape 5 : Validation

  1. Build complet de tous les services
    cd veza-backend-api && go build ./cmd/api
    cd veza-chat-server && cargo build --release
    cd veza-stream-server && cargo build --release
    cd apps/web && npm run build
    
  2. Tests complets
    cd veza-backend-api && go test ./... -v
    cd veza-chat-server && cargo test
    
  3. Review du diff total
    git diff pre-uuid-cleanup..HEAD --stat
    

7.4 Script de nettoyage

#!/bin/bash
# cleanup-uuid-migration.sh
# À exécuter depuis la racine du monorepo

set -e  # Stop on error

echo "=== Étape 1: Vérification pré-cleanup ==="

# Vérifier qu'on est sur la bonne branche
CURRENT_BRANCH=$(git branch --show-current)
if [ "$CURRENT_BRANCH" != "cleanup/uuid-migration" ]; then
    echo "⚠️  Vous n'êtes pas sur la branche cleanup/uuid-migration"
    echo "Création de la branche..."
    git checkout -b cleanup/uuid-cleanup
fi

# Vérifier que les tests passent
echo "🧪 Vérification des tests..."
cd veza-backend-api && go test ./... -v || { echo "❌ Tests backend échoués"; exit 1; }
cd ../veza-chat-server && cargo test || { echo "❌ Tests chat-server échoués"; exit 1; }
cd ..

echo "✅ Tests OK"

echo ""
echo "=== Étape 2: Backup ==="
BACKUP_DIR="backup-pre-cleanup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"
echo "📦 Création du backup dans $BACKUP_DIR..."

tar -czf "$BACKUP_DIR/migrations_legacy.tar.gz" veza-backend-api/migrations_legacy/ 2>/dev/null || echo "⚠️  migrations_legacy/ déjà supprimé ou inexistant"
cp veza-backend-api/cmd/main.go.legacy "$BACKUP_DIR/" 2>/dev/null || echo "⚠️  main.go.legacy déjà supprimé ou inexistant"

echo "✅ Backup créé"

echo ""
echo "=== Étape 3: Suppressions ==="

# Supprimer migrations_legacy
if [ -d "veza-backend-api/migrations_legacy" ]; then
    echo "🗑️  Suppression de veza-backend-api/migrations_legacy/..."
    rm -rf veza-backend-api/migrations_legacy/
    echo "✅ Supprimé"
else
    echo "  migrations_legacy/ n'existe pas (déjà supprimé ?)"
fi

# Supprimer main.go.legacy
if [ -f "veza-backend-api/cmd/main.go.legacy" ]; then
    echo "🗑️  Suppression de veza-backend-api/cmd/main.go.legacy..."
    rm veza-backend-api/cmd/main.go.legacy
    echo "✅ Supprimé"
else
    echo "  main.go.legacy n'existe pas (déjà supprimé ?)"
fi

# Supprimer archive (optionnel, après vérification)
if [ -d "veza-chat-server/migrations/archive" ]; then
    echo "⚠️  veza-chat-server/migrations/archive/ existe"
    echo "Vérifiez manuellement s'il peut être supprimé"
    # rm -rf veza-chat-server/migrations/archive/
fi

echo ""
echo "=== Étape 4: Vérification post-cleanup ==="

# Build
echo "🔨 Build backend..."
cd veza-backend-api && go build ./cmd/api || { echo "❌ Build backend échoué"; exit 1; }
cd ..

echo "🔨 Build chat-server..."
cd veza-chat-server && cargo build --release || { echo "❌ Build chat-server échoué"; exit 1; }
cd ..

# Tests
echo "🧪 Tests backend..."
cd veza-backend-api && go test ./... -v || { echo "❌ Tests backend échoués"; exit 1; }
cd ..

echo "🧪 Tests chat-server..."
cd veza-chat-server && cargo test || { echo "❌ Tests chat-server échoués"; exit 1; }
cd ..

echo ""
echo "=== ✅ Cleanup terminé ==="
echo ""
echo "📊 Résumé :"
echo "  - Backup créé dans : $BACKUP_DIR"
echo "  - migrations_legacy/ : Supprimé"
echo "  - main.go.legacy : Supprimé"
echo ""
echo "📝 Prochaines étapes :"
echo "  1. Review les changements : git diff"
echo "  2. Commit : git commit -m 'chore: remove legacy UUID migration files'"
echo "  3. Push : git push origin cleanup/uuid-migration"

Utilisation :

chmod +x cleanup-uuid-migration.sh
./cleanup-uuid-migration.sh

8. Documentation à mettre à jour

8.1 Fichiers à mettre à jour

Fichier Section Modification
README.md Setup Supprimer références aux anciennes migrations
CONTRIBUTING.md Guidelines Ajouter : "Tous les IDs sont des UUID v4"
veza-backend-api/README.md Database Confirmer UUID partout
veza-chat-server/README.md Database Confirmer UUID partout

8.2 Nouveau contenu à ajouter

Dans README.md ou CONTRIBUTING.md :

## Identifiants (IDs)

**Tous les IDs dans Veza sont des UUID v4.**

-**À faire** : Utiliser `uuid.UUID` (Go) ou `Uuid` (Rust) pour tous les IDs
-**À éviter** : Ne jamais utiliser d'ID entiers (`int`, `int64`, `i64`) pour les identifiants
-**Frontend** : Les UUIDs sont représentés comme des strings en TypeScript/JavaScript
-**API** : Les UUIDs sont sérialisés en string dans les réponses JSON

### Exemples

**Go** :
```go
type User struct {
    ID uuid.UUID `gorm:"type:uuid;primaryKey" json:"id"`
}

Rust :

pub struct User {
    pub id: Uuid,
}

TypeScript :

interface User {
    id: string; // UUID format
}

---

## 9. Checklist finale

### Avant le nettoyage

- [ ] Tous les modèles utilisent `uuid.UUID` (Go) ou `Uuid` (Rust)
- [ ] Aucun `strconv.Atoi` pour les IDs dans les handlers
- [ ] Tous les endpoints utilisent `uuid.Parse()` pour les IDs
- [ ] Tous les tests passent
- [ ] Backup créé

### Après le nettoyage

- [ ] `migrations_legacy/` supprimé
- [ ] `*.legacy` fichiers supprimés
- [ ] Aucun fichier `*.legacy` restant
- [ ] Chat-server Rust migré vers UUID (si applicable)
- [ ] Documentation à jour
- [ ] Tests passent
- [ ] Build OK pour tous les services
- [ ] Commit avec message explicite
- [ ] Tag post-cleanup créé

---

## 10. Risques et précautions

### Risques identifiés

1. **Chat-server Rust** : Migration de `i64` vers `Uuid` peut casser des intégrations
   - **Mitigation** : Tester exhaustivement avant merge
   - **Rollback** : Tag git `pre-uuid-cleanup` permet rollback

2. **Services dépendants** : Si d'autres services consomment les APIs avec format INT
   - **Mitigation** : Vérifier les contrats d'API avant suppression
   - **Vérification** : Aucun service externe identifié utilisant INT

3. **Base de données** : Les migrations legacy peuvent être référencées dans la doc
   - **Mitigation** : Mettre à jour la documentation

### Précautions

- ✅ **Toujours pouvoir rollback** : Tag git `pre-uuid-cleanup`
- ✅ **Un service à la fois** : Ne pas tout casser en même temps
- ✅ **Tests entre chaque étape** : Valider que rien n'est cassé
- ✅ **Le frontend doit continuer à fonctionner** : Vérifier que les types correspondent

---

## 11. Conclusion

La migration UUID est **largement complétée** dans le monorepo Veza :

✅ **Backend Go** : 100% migré vers UUID  
⚠️ **Chat Server Rust** : Schéma DB = UUID, mais code Rust utilise encore `i64` (à migrer)  
✅ **Frontend** : Utilise string (UUID) - conforme  
✅ **Inter-services** : Communication en UUID - conforme  

**Actions prioritaires** :
1. 🔴 **Haute** : Migrer le chat-server Rust vers UUID (2-3h)
2. 🟡 **Moyenne** : Supprimer `migrations_legacy/` et fichiers `.legacy` (30min)
3. 🟢 **Basse** : Nettoyer les TODOs/FIXMEs et documentation (30min)

**Estimation totale** : 4-6 heures pour un nettoyage complet.

---

**Document généré le** : 2025-01-27  
**Prochaine révision** : Après nettoyage complet