package database import ( "fmt" "gorm.io/gorm" // models n'est plus importé car AutoMigrate n'est plus utilisé (stratégie 100% SQL) ) // RunMigrations exécute toutes les migrations GORM automatiques // et ajoute les indexes personnalisés manquants. func RunMigrations(db *gorm.DB) error { // PostgreSQL active les foreign keys par défaut, pas besoin de PRAGMA // Auto-migrate all models // STRATÉGIE 100% SQL : Le schéma est géré exclusivement par les migrations SQL. // GORM est utilisé uniquement pour mapper les modèles Go sur des tables existantes. // Aucun modèle complexe n'est dans AutoMigrate pour éviter les bugs GORM + Postgres + soft delete + indexes. modelsToMigrate := []interface{}{ // Tous les modèles sont gérés par SQL migrations: // - users: migrations SQL existantes // - tracks: 025_create_tracks.sql + 026_add_track_status.sql // - playlists: 030_create_playlists.sql // - playlist_tracks: 030_create_playlists.sql // - rooms: 041_create_rooms.sql // - room_members: 042_create_room_members.sql // - messages: 043_create_messages.sql } for _, model := range modelsToMigrate { if err := db.AutoMigrate(model); err != nil { return fmt.Errorf("failed to migrate %T: %w", model, err) } } // Add custom indexes if err := addIndexes(db); err != nil { return fmt.Errorf("failed to add indexes: %w", err) } return nil } // addIndexes ajoute les indexes manquants sur les foreign keys et colonnes fréquemment utilisées // NOTE: Avec la stratégie 100% SQL, la plupart des indexes sont gérés dans les migrations SQL. // Cette fonction reste pour compatibilité mais ne fait plus rien. func addIndexes(db *gorm.DB) error { // Tous les indexes sont maintenant gérés par les migrations SQL: // - 001_create_users.sql: idx_users_email, idx_users_username, idx_users_slug // - 025_create_tracks.sql: idx_tracks_user_id, idx_tracks_is_public, idx_tracks_created_at // - 030_create_playlists.sql: idx_playlists_user_id, idx_playlist_tracks_* // - 041_create_rooms.sql: idx_rooms_* // - 042_create_room_members.sql: idx_room_members_* // - 043_create_messages.sql: idx_messages_* // Plus rien à faire ici - tous les indexes sont dans les migrations SQL return nil }