diff --git a/veza-backend-api/internal/database/database.go b/veza-backend-api/internal/database/database.go index e80299bae..a19db7e72 100644 --- a/veza-backend-api/internal/database/database.go +++ b/veza-backend-api/internal/database/database.go @@ -14,6 +14,8 @@ import ( "gorm.io/driver/postgres" "gorm.io/driver/sqlite" // Added sqlite driver "gorm.io/gorm" + "path/filepath" + "sort" ) // Config contient la configuration de la base de données @@ -167,54 +169,6 @@ func (d *Database) RunMigrations() error { // GORM n'est plus utilisé pour créer/modifier les tables d.Logger.Info("📦 Exécution des migrations SQL...") - // Liste des migrations à exécuter dans l'ordre - migrations := []string{ - // === TABLES DE BASE === - "001_create_users.sql", // Table users - DOIT être première - "003_email_verification.sql", - "004_oauth_accounts.sql", - "005_user_profiles.sql", - "008_playlists.sql", - "009_follows.sql", - "013_notifications.sql", - "016_analytics.sql", - "017_admin_logs.sql", - "018_create_email_verification_tokens.sql", - "019_create_password_reset_tokens.sql", - "020_create_sessions.sql", - "021_add_profile_privacy.sql", - "022_add_profile_slug.sql", - "023_create_roles_permissions.sql", - "024_seed_permissions.sql", - "025_create_tracks.sql", - "026_add_track_status.sql", - "027_create_track_likes.sql", - "028_create_track_comments.sql", - "029_create_track_plays.sql", - "030_create_playlists.sql", - "031_create_playlist_collaborators.sql", - "031_create_track_shares.sql", - "032_create_playlist_follows.sql", - "032_create_track_versions.sql", - "033_create_track_history.sql", - "034_create_hls_streams_table.sql", - "035_create_hls_transcode_queue.sql", - "036_create_bitrate_adaptation_logs.sql", - "037_create_playback_analytics.sql", - "038_add_playback_analytics_indexes.sql", - "040_create_refresh_tokens.sql", - "041_create_rooms.sql", - "042_create_room_members.sql", - "043_create_messages.sql", - "044_add_sessions_revoked_at.sql", - "045_create_user_sessions.sql", - "046_add_playlists_missing_columns.sql", // Ajout follower_count et deleted_at - "add_sessions_table.sql", - "add_totp_tables.sql", - "add_audit_logs.sql", - "add_performance_indexes.sql", - } - // Créer la table migrations si elle n'existe pas createMigrationsTable := ` CREATE TABLE IF NOT EXISTS schema_migrations ( @@ -227,8 +181,21 @@ func (d *Database) RunMigrations() error { return fmt.Errorf("failed to create migrations table: %w", err) } + // Découvir les fichiers de migration + files, err := filepath.Glob("migrations/*.sql") + if err != nil { + return fmt.Errorf("failed to list migration files: %w", err) + } + sort.Strings(files) + + if len(files) == 0 { + d.Logger.Warn("⚠️ Aucune migration trouvée dans le dossier migrations/") + } + // Exécuter chaque migration - for _, migration := range migrations { + for _, file := range files { + migration := filepath.Base(file) + // Vérifier si la migration a déjà été appliquée var exists bool checkQuery := "SELECT EXISTS(SELECT 1 FROM schema_migrations WHERE version = $1)" @@ -242,8 +209,7 @@ func (d *Database) RunMigrations() error { } // Lire le fichier de migration - migrationPath := fmt.Sprintf("migrations/%s", migration) - content, err := os.ReadFile(migrationPath) + content, err := os.ReadFile(file) if err != nil { d.Logger.Warn("Migration non trouvée, skip", zap.String("migration", migration)) continue