59 lines
2.2 KiB
Go
59 lines
2.2 KiB
Go
|
|
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
|
||
|
|
}
|