Init Commit

This commit is contained in:
2026-01-29 13:43:44 -03:00
commit b9aa8478db
126 changed files with 20649 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
using Microsoft.EntityFrameworkCore;
using MotoresArgentinosV2.Core.Entities;
namespace MotoresArgentinosV2.Infrastructure.Data;
public class MotoresV2DbContext : DbContext
{
public MotoresV2DbContext(DbContextOptions<MotoresV2DbContext> options)
: base(options)
{
}
public DbSet<User> Users { get; set; }
public DbSet<Ad> Ads { get; set; }
public DbSet<AdPhoto> AdPhotos { get; set; }
public DbSet<AdFeature> AdFeatures { get; set; }
public DbSet<Brand> Brands { get; set; }
public DbSet<Model> Models { get; set; }
public DbSet<TransactionRecord> Transactions { get; set; }
public DbSet<Favorite> Favorites { get; set; }
public DbSet<ChatMessage> ChatMessages { get; set; }
public DbSet<AuditLog> AuditLogs { get; set; }
public DbSet<PaymentMethod> PaymentMethods { get; set; }
public DbSet<RefreshToken> RefreshTokens { get; set; }
public DbSet<AdViewLog> AdViewLogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<PaymentMethod>().HasKey(p => p.PaymentMethodID);
modelBuilder.Entity<ChatMessage>().HasKey(m => m.MessageID);
modelBuilder.Entity<ChatMessage>().ToTable("ChatMessages");
// Configuración de Cascada para Mensajes
modelBuilder.Entity<ChatMessage>()
.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<Favorite>()
.HasKey(f => new { f.UserID, f.AdID });
// Nombres de tablas exactos
modelBuilder.Entity<Favorite>().ToTable("Favorites");
// Configuración de AdFeatures (Clave compuesta)
modelBuilder.Entity<AdFeature>()
.HasKey(af => new { af.AdID, af.FeatureKey });
// Configuración de Identificadores (Claves Primarias)
modelBuilder.Entity<AdPhoto>().HasKey(p => p.PhotoID);
modelBuilder.Entity<Brand>().HasKey(b => b.BrandID);
modelBuilder.Entity<Model>().HasKey(m => m.ModelID);
modelBuilder.Entity<User>().HasKey(u => u.UserID);
modelBuilder.Entity<Ad>().HasKey(a => a.AdID);
modelBuilder.Entity<TransactionRecord>().HasKey(t => t.TransactionID);
modelBuilder.Entity<Ad>().Property(a => a.Price).HasColumnType("decimal(18,2)");
modelBuilder.Entity<TransactionRecord>().Property(t => t.Amount).HasColumnType("decimal(18,2)");
// Nombres de tablas exactos para coincidir con el Roadmap
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<Ad>().ToTable("Ads");
modelBuilder.Entity<AdPhoto>().ToTable("AdPhotos");
modelBuilder.Entity<AdFeature>().ToTable("AdFeatures");
modelBuilder.Entity<TransactionRecord>().ToTable("Transactions");
// Configuración de AdViewLog
modelBuilder.Entity<AdViewLog>().ToTable("AdViewLogs");
modelBuilder.Entity<AdViewLog>().HasIndex(l => new { l.AdID, l.IPAddress, l.ViewDate });
}
}