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,79 @@
using Microsoft.EntityFrameworkCore;
using MotoresArgentinosV2.Core.Entities;
namespace MotoresArgentinosV2.Infrastructure.Data;
/// <summary>
/// Contexto de Entity Framework para la base de datos Autos (legacy)
/// Servidor: TECNICA3
/// Base de Datos: autos
/// Propósito: Acceso a operaciones de pago y medios de pago
/// </summary>
public class AutosDbContext : DbContext
{
public AutosDbContext(DbContextOptions<AutosDbContext> options) : base(options)
{
}
/// <summary>
/// Tabla de operaciones de pago
/// </summary>
public DbSet<Operacion> Operaciones { get; set; }
/// <summary>
/// Tabla de medios de pago disponibles
/// </summary>
public DbSet<MedioDePago> MediosDePago { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Configuración para la tabla operaciones
modelBuilder.Entity<Operacion>(entity =>
{
entity.ToTable("operaciones");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Fecha).HasColumnName("fecha");
entity.Property(e => e.Motivo).HasColumnName("motivo").HasMaxLength(50);
entity.Property(e => e.Moneda).HasColumnName("moneda").HasMaxLength(50);
entity.Property(e => e.Direccionentrega).HasColumnName("direccionentrega").HasMaxLength(50);
entity.Property(e => e.Validaciondomicilio).HasColumnName("validaciondomicilio").HasMaxLength(50);
entity.Property(e => e.Codigopedido).HasColumnName("codigopedido").HasMaxLength(50);
entity.Property(e => e.Nombreentrega).HasColumnName("nombreentrega").HasMaxLength(50);
entity.Property(e => e.Fechahora).HasColumnName("fechahora").HasMaxLength(50);
entity.Property(e => e.Telefonocomprador).HasColumnName("telefonocomprador").HasMaxLength(50);
entity.Property(e => e.Barrioentrega).HasColumnName("barrioentrega").HasMaxLength(50);
entity.Property(e => e.Codautorizacion).HasColumnName("codautorizacion").HasMaxLength(50);
entity.Property(e => e.Paisentrega).HasColumnName("paisentrega").HasMaxLength(50);
entity.Property(e => e.Cuotas).HasColumnName("cuotas").HasMaxLength(50);
entity.Property(e => e.Validafechanac).HasColumnName("validafechanac").HasMaxLength(50);
entity.Property(e => e.Validanrodoc).HasColumnName("validanrodoc").HasMaxLength(50);
entity.Property(e => e.Titular).HasColumnName("titular").HasMaxLength(50);
entity.Property(e => e.Pedido).HasColumnName("pedido").HasMaxLength(50);
entity.Property(e => e.Zipentrega).HasColumnName("zipentrega").HasMaxLength(50);
entity.Property(e => e.Monto).HasColumnName("monto").HasMaxLength(50);
entity.Property(e => e.Tarjeta).HasColumnName("tarjeta").HasMaxLength(50);
entity.Property(e => e.Fechaentrega).HasColumnName("fechaentrega").HasMaxLength(50);
entity.Property(e => e.Emailcomprador).HasColumnName("emailcomprador").HasMaxLength(50);
entity.Property(e => e.Validanropuerta).HasColumnName("validanropuerta").HasMaxLength(50);
entity.Property(e => e.Ciudadentrega).HasColumnName("ciudadentrega").HasMaxLength(50);
entity.Property(e => e.Validatipodoc).HasColumnName("validatipodoc").HasMaxLength(50);
entity.Property(e => e.Noperacion).HasColumnName("noperacion").HasMaxLength(50);
entity.Property(e => e.Estadoentrega).HasColumnName("estadoentrega").HasMaxLength(50);
entity.Property(e => e.Resultado).HasColumnName("resultado").HasMaxLength(50);
entity.Property(e => e.Mensajeentrega).HasColumnName("mensajeentrega").HasMaxLength(50);
entity.Property(e => e.Precioneto).HasColumnName("precioneto");
});
// Configuración para la tabla mediodepago
modelBuilder.Entity<MedioDePago>(entity =>
{
entity.ToTable("mediodepago");
entity.HasKey(e => e.Id);
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.Mediodepago).HasColumnName("mediodepago").HasMaxLength(20);
});
}
}

View File

@@ -0,0 +1,36 @@
// Backend/MotoresArgentinosV2.Infrastructure/Data/InternetDbContext.cs
using Microsoft.EntityFrameworkCore;
using MotoresArgentinosV2.Core.DTOs;
namespace MotoresArgentinosV2.Infrastructure.Data;
/// <summary>
/// Contexto de Entity Framework para la base de datos Internet (legacy)
/// Servidor: ...
/// Base de Datos: internet
/// Propósito: Acceso a datos de avisos web
/// </summary>
public class InternetDbContext : DbContext
{
public InternetDbContext(DbContextOptions<InternetDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Registrar el DTO como entidad sin llave (Keyless) para que SqlQueryRaw funcione bien
modelBuilder.Entity<DatosAvisoDto>(e =>
{
e.HasNoKey();
e.ToView(null); // No mapea a tabla
// Configurar precisión de decimales para silenciar warnings
e.Property(p => p.ImporteSiniva).HasColumnType("decimal(18,2)");
e.Property(p => p.ImporteTotsiniva).HasColumnType("decimal(18,2)");
e.Property(p => p.PorcentajeCombinado).HasColumnType("decimal(18,2)");
e.Property(p => p.Centimetros).HasColumnType("decimal(18,2)");
});
}
}

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 });
}
}