From 41793f00c118b12a9b1a4859c03c206c3e3d3eab Mon Sep 17 00:00:00 2001 From: Andrija Stevanovic Date: Thu, 5 Feb 2026 21:07:16 +0100 Subject: [PATCH] presentation --- dotnet/AipsCore/AipsCore.csproj | 4 +++ .../DI/PersistenceRegistrationExtensions.cs | 5 +++- dotnet/AipsWebApi/AipsWebApi.csproj | 17 ++++++++++++ dotnet/AipsWebApi/AipsWebApi.http | 6 +++++ .../AipsWebApi/Controllers/UserController.cs | 19 ++++++++++++++ .../Controllers/WeatherForecastController.cs | 25 ++++++++++++++++++ dotnet/AipsWebApi/Program.cs | 26 +++++++++++++++++++ .../AipsWebApi/Properties/launchSettings.json | 23 ++++++++++++++++ dotnet/AipsWebApi/WeatherForecast.cs | 12 +++++++++ dotnet/dotnet.sln | 6 +++++ 10 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 dotnet/AipsWebApi/AipsWebApi.csproj create mode 100644 dotnet/AipsWebApi/AipsWebApi.http create mode 100644 dotnet/AipsWebApi/Controllers/UserController.cs create mode 100644 dotnet/AipsWebApi/Controllers/WeatherForecastController.cs create mode 100644 dotnet/AipsWebApi/Program.cs create mode 100644 dotnet/AipsWebApi/Properties/launchSettings.json create mode 100644 dotnet/AipsWebApi/WeatherForecast.cs diff --git a/dotnet/AipsCore/AipsCore.csproj b/dotnet/AipsCore/AipsCore.csproj index 7b9524e..33bf3dd 100644 --- a/dotnet/AipsCore/AipsCore.csproj +++ b/dotnet/AipsCore/AipsCore.csproj @@ -12,4 +12,8 @@ + + + + diff --git a/dotnet/AipsCore/Infrastructure/DI/PersistenceRegistrationExtensions.cs b/dotnet/AipsCore/Infrastructure/DI/PersistenceRegistrationExtensions.cs index 04e6578..937df21 100644 --- a/dotnet/AipsCore/Infrastructure/DI/PersistenceRegistrationExtensions.cs +++ b/dotnet/AipsCore/Infrastructure/DI/PersistenceRegistrationExtensions.cs @@ -12,7 +12,10 @@ public static class PersistenceRegistrationExtensions { services.AddDbContext(options => { - options.UseNpgsql(configuration.GetEnvConnectionString()); + options.UseNpgsql(configuration.GetEnvConnectionString(), npgsql => + { + npgsql.MigrationsAssembly(typeof(AipsDbContext).Assembly.FullName); + }); }); return services; diff --git a/dotnet/AipsWebApi/AipsWebApi.csproj b/dotnet/AipsWebApi/AipsWebApi.csproj new file mode 100644 index 0000000..7a38c76 --- /dev/null +++ b/dotnet/AipsWebApi/AipsWebApi.csproj @@ -0,0 +1,17 @@ + + + + net10.0 + enable + enable + + + + + + + + + + + diff --git a/dotnet/AipsWebApi/AipsWebApi.http b/dotnet/AipsWebApi/AipsWebApi.http new file mode 100644 index 0000000..16ece16 --- /dev/null +++ b/dotnet/AipsWebApi/AipsWebApi.http @@ -0,0 +1,6 @@ +@AipsWebApi_HostAddress = http://localhost:5266 + +GET {{AipsWebApi_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/dotnet/AipsWebApi/Controllers/UserController.cs b/dotnet/AipsWebApi/Controllers/UserController.cs new file mode 100644 index 0000000..f67757a --- /dev/null +++ b/dotnet/AipsWebApi/Controllers/UserController.cs @@ -0,0 +1,19 @@ +using AipsCore.Application.Abstract; +using AipsCore.Application.Models.User.Command.CreateUser; +using AipsCore.Domain.Models.User.ValueObjects; +using Microsoft.AspNetCore.Mvc; + +namespace AipsWebApi.Controllers; + +[ApiController] +[Route("[controller]")] +public class UserController : ControllerBase +{ + [HttpPost] + public async Task> CreateUser(CreateUserCommand command, IDispatcher dispatcher, CancellationToken cancellationToken) + { + var userId = await dispatcher.Execute(command, cancellationToken); + + return Ok(userId.IdValue); + } +} \ No newline at end of file diff --git a/dotnet/AipsWebApi/Controllers/WeatherForecastController.cs b/dotnet/AipsWebApi/Controllers/WeatherForecastController.cs new file mode 100644 index 0000000..77b4928 --- /dev/null +++ b/dotnet/AipsWebApi/Controllers/WeatherForecastController.cs @@ -0,0 +1,25 @@ +using Microsoft.AspNetCore.Mvc; + +namespace AipsWebApi.Controllers; + +[ApiController] +[Route("[controller]")] +public class WeatherForecastController : ControllerBase +{ + private static readonly string[] Summaries = + [ + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + ]; + + [HttpGet(Name = "GetWeatherForecast")] + public IEnumerable Get() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }) + .ToArray(); + } +} \ No newline at end of file diff --git a/dotnet/AipsWebApi/Program.cs b/dotnet/AipsWebApi/Program.cs new file mode 100644 index 0000000..ce9f99c --- /dev/null +++ b/dotnet/AipsWebApi/Program.cs @@ -0,0 +1,26 @@ +using AipsCore.Infrastructure.DI; + +var builder = WebApplication.CreateBuilder(args); + +var configuration = builder.Configuration; + +builder.Services.AddControllers(); +builder.Services.AddOpenApi(); + +builder.Services.AddAips(configuration); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.MapOpenApi(); +} + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); \ No newline at end of file diff --git a/dotnet/AipsWebApi/Properties/launchSettings.json b/dotnet/AipsWebApi/Properties/launchSettings.json new file mode 100644 index 0000000..eb9fff8 --- /dev/null +++ b/dotnet/AipsWebApi/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:5266", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "https://localhost:7031;http://localhost:5266", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/dotnet/AipsWebApi/WeatherForecast.cs b/dotnet/AipsWebApi/WeatherForecast.cs new file mode 100644 index 0000000..0f4742b --- /dev/null +++ b/dotnet/AipsWebApi/WeatherForecast.cs @@ -0,0 +1,12 @@ +namespace AipsWebApi; + +public class WeatherForecast +{ + public DateOnly Date { get; set; } + + public int TemperatureC { get; set; } + + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + + public string? Summary { get; set; } +} \ No newline at end of file diff --git a/dotnet/dotnet.sln b/dotnet/dotnet.sln index 6c32bfc..5b24945 100644 --- a/dotnet/dotnet.sln +++ b/dotnet/dotnet.sln @@ -4,6 +4,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AipsCore", "AipsCore\AipsCore.csproj", "{C2EAA516-A045-4525-9A47-4AA8198FD104}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AipsWebApi", "AipsWebApi\AipsWebApi.csproj", "{32BC8F43-322F-441A-9AE3-9D0D36B5D22B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -14,5 +16,9 @@ Global {C2EAA516-A045-4525-9A47-4AA8198FD104}.Debug|Any CPU.Build.0 = Debug|Any CPU {C2EAA516-A045-4525-9A47-4AA8198FD104}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2EAA516-A045-4525-9A47-4AA8198FD104}.Release|Any CPU.Build.0 = Release|Any CPU + {32BC8F43-322F-441A-9AE3-9D0D36B5D22B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {32BC8F43-322F-441A-9AE3-9D0D36B5D22B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {32BC8F43-322F-441A-9AE3-9D0D36B5D22B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {32BC8F43-322F-441A-9AE3-9D0D36B5D22B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal