using Microsoft.EntityFrameworkCore; using MotoresArgentinosV2.Core.Entities; namespace MotoresArgentinosV2.Infrastructure.Data; public class MotoresV2DbContext : DbContext { public MotoresV2DbContext(DbContextOptions options) : base(options) { } public DbSet Users { get; set; } public DbSet Ads { get; set; } public DbSet AdPhotos { get; set; } public DbSet AdFeatures { get; set; } public DbSet Brands { get; set; } public DbSet Models { get; set; } public DbSet Transactions { get; set; } public DbSet Favorites { get; set; } public DbSet ChatMessages { get; set; } public DbSet AuditLogs { get; set; } public DbSet PaymentMethods { get; set; } public DbSet RefreshTokens { get; set; } public DbSet AdViewLogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity().HasKey(p => p.PaymentMethodID); modelBuilder.Entity().HasKey(m => m.MessageID); modelBuilder.Entity().ToTable("ChatMessages"); // Configuración de Cascada para Mensajes modelBuilder.Entity() .HasOne(m => m.Ad) .WithMany(a => a.Messages) .HasForeignKey(m => m.AdID) .OnDelete(DeleteBehavior.Cascade); // Esto asegura que EF intente borrar los mensajes // Configuración de Favorites (Clave compuesta) modelBuilder.Entity() .HasKey(f => new { f.UserID, f.AdID }); // Nombres de tablas exactos modelBuilder.Entity().ToTable("Favorites"); // Configuración de AdFeatures (Clave compuesta) modelBuilder.Entity() .HasKey(af => new { af.AdID, af.FeatureKey }); // Configuración de Identificadores (Claves Primarias) modelBuilder.Entity().HasKey(p => p.PhotoID); modelBuilder.Entity().HasKey(b => b.BrandID); modelBuilder.Entity().HasKey(m => m.ModelID); modelBuilder.Entity().HasKey(u => u.UserID); modelBuilder.Entity().HasKey(a => a.AdID); modelBuilder.Entity().HasKey(t => t.TransactionID); modelBuilder.Entity().Property(a => a.Price).HasColumnType("decimal(18,2)"); modelBuilder.Entity().Property(t => t.Amount).HasColumnType("decimal(18,2)"); // Nombres de tablas exactos para coincidir con el Roadmap modelBuilder.Entity().ToTable("Users"); modelBuilder.Entity().ToTable("Ads"); modelBuilder.Entity().ToTable("AdPhotos"); modelBuilder.Entity().ToTable("AdFeatures"); modelBuilder.Entity().ToTable("Transactions"); // Configuración de AdViewLog modelBuilder.Entity().ToTable("AdViewLogs"); modelBuilder.Entity().HasIndex(l => new { l.AdID, l.IPAddress, l.ViewDate }); } }