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