using FluentMigrator; namespace Mercados.Database.Migrations { // El número es la versión única de esta migración. // Usar un timestamp es una práctica común y segura. [Migration(20250701113000)] public class CreateInitialTables : Migration { /// /// Define las acciones a realizar para aplicar la migración (crear tablas, etc.). /// public override void Up() { // --- Tabla para Cotizaciones de Ganado --- Create.Table("CotizacionesGanado") .WithColumn("Id").AsInt64().PrimaryKey().Identity() // Usamos Int64 (long) para los IDs .WithColumn("Categoria").AsString(100).NotNullable() .WithColumn("Especificaciones").AsString(200).NotNullable() .WithColumn("Maximo").AsDecimal(18, 2).NotNullable() .WithColumn("Minimo").AsDecimal(18, 2).NotNullable() .WithColumn("Promedio").AsDecimal(18, 2).NotNullable() .WithColumn("Mediano").AsDecimal(18, 2).NotNullable() .WithColumn("Cabezas").AsInt32().NotNullable() .WithColumn("KilosTotales").AsInt32().NotNullable() .WithColumn("KilosPorCabeza").AsInt32().NotNullable() .WithColumn("ImporteTotal").AsDecimal(18, 2).NotNullable() .WithColumn("FechaRegistro").AsDateTime().NotNullable(); // --- Tabla para Cotizaciones de Granos --- Create.Table("CotizacionesGranos") .WithColumn("Id").AsInt64().PrimaryKey().Identity() .WithColumn("Nombre").AsString(50).NotNullable() .WithColumn("Precio").AsDecimal(18, 2).NotNullable() .WithColumn("VariacionPrecio").AsDecimal(18, 2).NotNullable() .WithColumn("FechaOperacion").AsDateTime().NotNullable() .WithColumn("FechaRegistro").AsDateTime().NotNullable(); // --- Tabla para Cotizaciones de Bolsa --- Create.Table("CotizacionesBolsa") .WithColumn("Id").AsInt64().PrimaryKey().Identity() .WithColumn("Ticker").AsString(20).NotNullable() .WithColumn("Mercado").AsString(50).NotNullable() // "EEUU", "Local" .WithColumn("PrecioActual").AsDecimal(18, 2).NotNullable() .WithColumn("Apertura").AsDecimal(18, 2).NotNullable() .WithColumn("CierreAnterior").AsDecimal(18, 2).NotNullable() .WithColumn("PorcentajeCambio").AsDecimal(18, 4).NotNullable() // Más precisión para porcentajes .WithColumn("FechaRegistro").AsDateTime().NotNullable(); // --- Tabla para auditar las fuentes de datos --- Create.Table("FuentesDatos") .WithColumn("Id").AsInt64().PrimaryKey().Identity() .WithColumn("Nombre").AsString(100).NotNullable().Unique() // El nombre debe ser único .WithColumn("UltimaEjecucionExitosa").AsDateTime().NotNullable() .WithColumn("Url").AsString(500).Nullable(); } /// /// Define las acciones para revertir la migración (eliminar las tablas). /// Esto es útil si necesitas deshacer un cambio. /// public override void Down() { Delete.Table("FuentesDatos"); Delete.Table("CotizacionesBolsa"); Delete.Table("CotizacionesGranos"); Delete.Table("CotizacionesGanado"); } } }