diff --git a/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/DatabaseContext.cs b/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/DatabaseContext.cs new file mode 100644 index 0000000..7c8ba64 --- /dev/null +++ b/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/DatabaseContext.cs @@ -0,0 +1,60 @@ +using Microsoft.EntityFrameworkCore; + +namespace HackathonPreparing.ApiService; + +public sealed class DatabaseContext : DbContext +{ + public DatabaseContext(DbContextOptions options) + : base(options) + { + } + + public DbSet Forecasts => Set(); + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(entity => + { + entity.HasKey(e => e.Id); + entity.Property(e => e.Id).ValueGeneratedOnAdd(); + + // Generate data + var summaries = new[] + { + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; + var forecast = Enumerable.Range(1, 5).Select(index => + new WeatherForecast + ( + index, + DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + Random.Shared.Next(-20, 55), + summaries[Random.Shared.Next(summaries.Length)] + )) + .ToArray(); + entity.HasData(forecast); + }); + + base.OnModelCreating(modelBuilder); + } +} + +public class WeatherForecast +{ + public WeatherForecast(int id, DateOnly date, int temperatureC, string summary) + { + Id = id; + Date = date; + TemperatureC = temperatureC; + Summary = summary; + } + + public WeatherForecast() + { + } + + public int Id { get; set; } + public DateOnly Date { get; set; } + public int TemperatureC { get; set; } + public string Summary { get; set; } +} \ No newline at end of file diff --git a/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/HackathonPreparing.ApiService.csproj b/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/HackathonPreparing.ApiService.csproj index e9dcd76..8dedc76 100644 --- a/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/HackathonPreparing.ApiService.csproj +++ b/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/HackathonPreparing.ApiService.csproj @@ -12,6 +12,13 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/Program.cs b/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/Program.cs index 99d5a99..ae99025 100644 --- a/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/Program.cs +++ b/HackathonPreparing/HackathonPreparing/HackathonPreparing.ApiService/Program.cs @@ -1,39 +1,43 @@ +using HackathonPreparing.ApiService; +using Microsoft.EntityFrameworkCore; +using Microsoft.OpenApi.Models; + var builder = WebApplication.CreateBuilder(args); +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(c => +{ + c.SwaggerDoc("v1", new OpenApiInfo { + Title = "Weather Forecast API", + Description = "Weather forecast API for the HackathonPreparing project.", + Version = "v1" }); +}); + // Add service defaults & Aspire components. builder.AddServiceDefaults(); // Add services to the container. builder.Services.AddProblemDetails(); +builder.AddNpgsqlDbContext("prod", null, + optionsBuilder => optionsBuilder.UseNpgsql(npgsqlBuilder => + npgsqlBuilder.MigrationsAssembly(typeof(Program).Assembly.GetName().Name))); + var app = builder.Build(); +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(c => + { + c.SwaggerEndpoint("/swagger/v1/swagger.json", "Weather Forecast API V1"); + }); +} // Configure the HTTP request pipeline. app.UseExceptionHandler(); -var summaries = new[] -{ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" -}; - -app.MapGet("/weatherforecast", () => -{ - 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; -}); +app.MapGet("/weatherforecast", async (DatabaseContext db) => await db.Forecasts.ToListAsync()); app.MapDefaultEndpoints(); -app.Run(); - -record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) -{ - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); -} \ No newline at end of file +app.Run(); \ No newline at end of file diff --git a/HackathonPreparing/HackathonPreparing/HackathonPreparing.AppHost/Program.cs b/HackathonPreparing/HackathonPreparing/HackathonPreparing.AppHost/Program.cs index 68e7193..4191405 100644 --- a/HackathonPreparing/HackathonPreparing/HackathonPreparing.AppHost/Program.cs +++ b/HackathonPreparing/HackathonPreparing/HackathonPreparing.AppHost/Program.cs @@ -2,13 +2,13 @@ var builder = DistributedApplication.CreateBuilder(args); var cache = builder.AddRedis("cache"); -var apiService = builder.AddProject("apiservice"); +var postgres = builder.AddPostgres("postgres").WithPgAdmin(); +var postgresdb = postgres.AddDatabase("prod"); +var apiService = builder.AddProject("apiservice").WithReference(postgresdb); builder.AddProject("webfrontend") .WithExternalHttpEndpoints() .WithReference(cache) .WithReference(apiService); -builder.AddPostgres("database").WithPgAdmin(); - builder.Build().Run(); \ No newline at end of file