using Microsoft.EntityFrameworkCore; using Musify.Application.Contracts.Infrastructure; using Musify.Domain.Entities; using Musify.Infrastructure.Configuration; namespace Musify.Infrastructure.Persistence { public class Database(DatabaseConfiguration configuration) : DbContext, IDatabase { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseNpgsql(configuration.ConnectionString); } public DbSet Users => Set(); public DbSet Tracks => Set(); public DbSet PlayLists => Set(); public DbSet PlayListHasTracks => Set(); public DbSet Uploads => Set(); public DbSet ProcessExecutions => Set(); public DbSet ProcessStepExecutions => Set(); protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasIndex(process => new { process.CorrelationId, process.ProcessName }); modelBuilder.Entity() .HasIndex(step => new { step.ProcessExecutionId, step.StepName }); modelBuilder.Entity() .HasMany(process => process.Steps) .WithOne(step => step.ProcessExecution) .HasForeignKey(step => step.ProcessExecutionId) .OnDelete(DeleteBehavior.Cascade); base.OnModelCreating(modelBuilder); } } }