feat: Define data models and set up DB connection with Dapper
This commit is contained in:
		| @@ -7,7 +7,9 @@ | |||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|  |  | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|  |     <PackageReference Include="FluentMigrator.Runner" Version="7.1.0" /> | ||||||
|     <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.5" /> |     <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.5" /> | ||||||
|  |     <PackageReference Include="Swashbuckle.AspNetCore" Version="9.0.1" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  |  | ||||||
|   <ItemGroup> |   <ItemGroup> | ||||||
|   | |||||||
| @@ -1,41 +1,31 @@ | |||||||
|  | // Importamos los namespaces necesarios | ||||||
|  | using Mercados.Infrastructure; | ||||||
|  | using Mercados.Infrastructure.Persistence; | ||||||
|  |  | ||||||
| var builder = WebApplication.CreateBuilder(args); | var builder = WebApplication.CreateBuilder(args); | ||||||
|  |  | ||||||
|  | // 1. Registramos nuestra fábrica de conexiones como un Singleton. | ||||||
|  | // Solo se creará una instancia que leerá la configuration una vez. | ||||||
|  | builder.Services.AddSingleton<IDbConnectionFactory, SqlConnectionFactory>(); | ||||||
|  |  | ||||||
| // Add services to the container. | // Add services to the container. | ||||||
| // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi | builder.Services.AddControllers(); | ||||||
| builder.Services.AddOpenApi(); | builder.Services.AddEndpointsApiExplorer(); | ||||||
|  | builder.Services.AddSwaggerGen(); | ||||||
|  |  | ||||||
| var app = builder.Build(); | var app = builder.Build(); | ||||||
|  |  | ||||||
| // Configure the HTTP request pipeline. | // Configure the HTTP request pipeline. | ||||||
| if (app.Environment.IsDevelopment()) | if (app.Environment.IsDevelopment()) | ||||||
| { | { | ||||||
|     app.MapOpenApi(); |     app.UseSwagger(); | ||||||
|  |     app.UseSwaggerUI(); | ||||||
| } | } | ||||||
|  |  | ||||||
| app.UseHttpsRedirection(); | app.UseHttpsRedirection(); | ||||||
|  |  | ||||||
| var summaries = new[] | app.UseAuthorization(); | ||||||
| { |  | ||||||
|     "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| app.MapGet("/weatherforecast", () => | app.MapControllers(); | ||||||
| { |  | ||||||
|     var forecast =  Enumerable.Range(1, 5).Select(index => |  | ||||||
|         new WeatherForecast |  | ||||||
|         ( |  | ||||||
|             DateOnly.FromDateTime(DateTime.Now.AddDays(index)), |  | ||||||
|             Random.Shared.Next(-20, 55), |  | ||||||
|             summaries[Random.Shared.Next(summaries.Length)] |  | ||||||
|         )) |  | ||||||
|         .ToArray(); |  | ||||||
|     return forecast; |  | ||||||
| }) |  | ||||||
| .WithName("GetWeatherForecast"); |  | ||||||
|  |  | ||||||
| app.Run(); | app.Run(); | ||||||
|  |  | ||||||
| record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) |  | ||||||
| { |  | ||||||
|     public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); |  | ||||||
| } |  | ||||||
| @@ -5,5 +5,8 @@ | |||||||
|       "Microsoft.AspNetCore": "Warning" |       "Microsoft.AspNetCore": "Warning" | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "AllowedHosts": "*" |   "AllowedHosts": "*", | ||||||
| } |   "ConnectionStrings": { | ||||||
|  |     "DefaultConnection": "Server=TECNICA3;Database=MercadosDb;User Id=mercadosuser;Password=@mercados1351@;Trusted_Connection=False;Encrypt=False;" | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| namespace Mercados.Core; |  | ||||||
|  |  | ||||||
| public class Class1 |  | ||||||
| { |  | ||||||
|  |  | ||||||
| } |  | ||||||
							
								
								
									
										14
									
								
								src/Mercados.Core/Entities/CotizacionBolsa.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/Mercados.Core/Entities/CotizacionBolsa.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | namespace Mercados.Core.Entities | ||||||
|  | { | ||||||
|  |   public class CotizacionBolsa | ||||||
|  |   { | ||||||
|  |     public long Id { get; set; } | ||||||
|  |     public string Ticker { get; set; } = string.Empty; // "AAPL", "GGAL.BA", etc. | ||||||
|  |     public string Mercado { get; set; } = string.Empty; // "EEUU" o "Local" | ||||||
|  |     public decimal PrecioActual { get; set; } | ||||||
|  |     public decimal Apertura { get; set; } | ||||||
|  |     public decimal CierreAnterior { get; set; } | ||||||
|  |     public decimal PorcentajeCambio { get; set; } | ||||||
|  |     public DateTime FechaRegistro { get; set; } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										18
									
								
								src/Mercados.Core/Entities/CotizacionGanado.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/Mercados.Core/Entities/CotizacionGanado.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | namespace Mercados.Core.Entities | ||||||
|  | { | ||||||
|  |   public class CotizacionGanado | ||||||
|  |   { | ||||||
|  |     public long Id { get; set; } | ||||||
|  |     public string Categoria { get; set; } = string.Empty; | ||||||
|  |     public string Especificaciones { get; set; } = string.Empty; | ||||||
|  |     public decimal Maximo { get; set; } | ||||||
|  |     public decimal Minimo { get; set; } | ||||||
|  |     public decimal Promedio { get; set; } | ||||||
|  |     public decimal Mediano { get; set; } | ||||||
|  |     public int Cabezas { get; set; } | ||||||
|  |     public int KilosTotales { get; set; } | ||||||
|  |     public int KilosPorCabeza { get; set; } | ||||||
|  |     public decimal ImporteTotal { get; set; } | ||||||
|  |     public DateTime FechaRegistro { get; set; } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								src/Mercados.Core/Entities/CotizacionGrano.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/Mercados.Core/Entities/CotizacionGrano.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | namespace Mercados.Core.Entities | ||||||
|  | { | ||||||
|  |   public class CotizacionGrano | ||||||
|  |   { | ||||||
|  |     public long Id { get; set; } | ||||||
|  |     public string Nombre { get; set; } = string.Empty; // "Soja", "Trigo", etc. | ||||||
|  |     public decimal Precio { get; set; } | ||||||
|  |     public decimal VariacionPrecio { get; set; } | ||||||
|  |     public DateTime FechaOperacion { get; set; } | ||||||
|  |     public DateTime FechaRegistro { get; set; } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								src/Mercados.Core/Entities/FuenteDato.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/Mercados.Core/Entities/FuenteDato.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | namespace Mercados.Core.Entities | ||||||
|  | { | ||||||
|  |   public class FuenteDato | ||||||
|  |   { | ||||||
|  |     public long Id { get; set; } | ||||||
|  |     public string Nombre { get; set; } = string.Empty; // "BCR", "Finnhub", "YahooFinance", "MercadoAgroganadero" | ||||||
|  |     public DateTime UltimaEjecucionExitosa { get; set; } | ||||||
|  |     public string? Url { get; set; } | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -6,4 +6,9 @@ | |||||||
|     <Nullable>enable</Nullable> |     <Nullable>enable</Nullable> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
|  |  | ||||||
|  |   <ItemGroup> | ||||||
|  |     <PackageReference Include="FluentMigrator" Version="7.1.0" /> | ||||||
|  |     <PackageReference Include="FluentMigrator.Runner" Version="7.1.0" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |  | ||||||
| </Project> | </Project> | ||||||
|   | |||||||
| @@ -4,6 +4,12 @@ | |||||||
|     <ProjectReference Include="..\Mercados.Core\Mercados.Core.csproj" /> |     <ProjectReference Include="..\Mercados.Core\Mercados.Core.csproj" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  |  | ||||||
|  |   <ItemGroup> | ||||||
|  |     <PackageReference Include="Dapper" Version="2.1.66" /> | ||||||
|  |     <PackageReference Include="Microsoft.Data.SqlClient" Version="6.0.2" /> | ||||||
|  |     <PackageReference Include="Microsoft.Extensions.Http" Version="9.0.6" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |  | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <TargetFramework>net9.0</TargetFramework> |     <TargetFramework>net9.0</TargetFramework> | ||||||
|     <ImplicitUsings>enable</ImplicitUsings> |     <ImplicitUsings>enable</ImplicitUsings> | ||||||
|   | |||||||
| @@ -0,0 +1,9 @@ | |||||||
|  | using System.Data; | ||||||
|  |  | ||||||
|  | namespace Mercados.Infrastructure.Persistence | ||||||
|  | { | ||||||
|  |   public interface IDbConnectionFactory | ||||||
|  |   { | ||||||
|  |     IDbConnection CreateConnection(); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -0,0 +1,24 @@ | |||||||
|  | using Mercados.Infrastructure.Persistence; | ||||||
|  | using Microsoft.Data.SqlClient; | ||||||
|  | using Microsoft.Extensions.Configuration; | ||||||
|  | using System.Data; | ||||||
|  |  | ||||||
|  | namespace Mercados.Infrastructure | ||||||
|  | { | ||||||
|  |   public class SqlConnectionFactory : IDbConnectionFactory | ||||||
|  |   { | ||||||
|  |     private readonly string _connectionString; | ||||||
|  |  | ||||||
|  |     public SqlConnectionFactory(IConfiguration configuration) | ||||||
|  |     { | ||||||
|  |       _connectionString = configuration.GetConnectionString("DefaultConnection") | ||||||
|  |           ?? throw new ArgumentNullException(nameof(configuration), "La cadena de conexión 'DefaultConnection' no fue encontrada."); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public IDbConnection CreateConnection() | ||||||
|  |     { | ||||||
|  |       // Dapper se encargará de abrir y cerrar la conexión automáticamente. | ||||||
|  |       return new SqlConnection(_connectionString); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user