diff --git a/src/.dockerignore b/src/.dockerignore
new file mode 100644
index 0000000..cd967fc
--- /dev/null
+++ b/src/.dockerignore
@@ -0,0 +1,25 @@
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/.idea
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/azds.yaml
+**/bin
+**/charts
+**/docker-compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+LICENSE
+README.md
\ No newline at end of file
diff --git a/src/.env b/src/.env
new file mode 100644
index 0000000..e69de29
diff --git a/src/BackendTutorial.sln b/src/BackendTutorial.sln
index 8ada388..4861d42 100644
--- a/src/BackendTutorial.sln
+++ b/src/BackendTutorial.sln
@@ -2,6 +2,16 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BackendTutorial", "BackendTutorial\BackendTutorial.csproj", "{3BD4328A-2EB0-4D5C-85FF-91196959D4C9}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Infrastructure", "modules\Infrastructure\src\Infrastructure\Infrastructure.csproj", "{F6F9C651-D13D-4DEA-9698-7DD7BD739338}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Infrastructure.EventBus", "modules\Infrastructure\src\Infrastructure.EventBus\Infrastructure.EventBus.csproj", "{C5750CB0-63CB-4EAB-B74A-4433C88102A9}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CCD3893B-24AB-4D90-94F4-189A921D297F}"
+ ProjectSection(SolutionItems) = preProject
+ docker-compose.yml = docker-compose.yml
+ .env = .env
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -12,5 +22,13 @@ Global
{3BD4328A-2EB0-4D5C-85FF-91196959D4C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3BD4328A-2EB0-4D5C-85FF-91196959D4C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3BD4328A-2EB0-4D5C-85FF-91196959D4C9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F6F9C651-D13D-4DEA-9698-7DD7BD739338}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F6F9C651-D13D-4DEA-9698-7DD7BD739338}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F6F9C651-D13D-4DEA-9698-7DD7BD739338}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F6F9C651-D13D-4DEA-9698-7DD7BD739338}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C5750CB0-63CB-4EAB-B74A-4433C88102A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C5750CB0-63CB-4EAB-B74A-4433C88102A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C5750CB0-63CB-4EAB-B74A-4433C88102A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C5750CB0-63CB-4EAB-B74A-4433C88102A9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
diff --git a/src/BackendTutorial/BackendTutorial.csproj b/src/BackendTutorial/BackendTutorial.csproj
index afd14b0..fff4fc6 100644
--- a/src/BackendTutorial/BackendTutorial.csproj
+++ b/src/BackendTutorial/BackendTutorial.csproj
@@ -4,11 +4,23 @@
net8.0
enable
enable
+ Linux
-
+
+
+
+
+
+
+
+
+
+
+ .dockerignore
+
diff --git a/src/BackendTutorial/BackendTutorial.http b/src/BackendTutorial/BackendTutorial.http
deleted file mode 100644
index b9597db..0000000
--- a/src/BackendTutorial/BackendTutorial.http
+++ /dev/null
@@ -1,6 +0,0 @@
-@BackendTutorial_HostAddress = http://localhost:5226
-
-GET {{BackendTutorial_HostAddress}}/weatherforecast/
-Accept: application/json
-
-###
diff --git a/src/BackendTutorial/Dockerfile b/src/BackendTutorial/Dockerfile
new file mode 100644
index 0000000..d169837
--- /dev/null
+++ b/src/BackendTutorial/Dockerfile
@@ -0,0 +1,24 @@
+FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+USER $APP_UID
+WORKDIR /app
+EXPOSE 80
+
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+ARG BUILD_CONFIGURATION=Release
+WORKDIR /src
+COPY ["BackendTutorial/BackendTutorial.csproj", "BackendTutorial/"]
+COPY ["modules/Infrastructure/src/Infrastructure.EventBus/Infrastructure.EventBus.csproj", "modules/Infrastructure/src/Infrastructure.EventBus/"]
+COPY ["modules/Infrastructure/src/Infrastructure/Infrastructure.csproj", "modules/Infrastructure/src/Infrastructure/"]
+RUN dotnet restore "BackendTutorial/BackendTutorial.csproj"
+COPY . .
+WORKDIR "/src/BackendTutorial"
+RUN dotnet build "BackendTutorial.csproj" -c $BUILD_CONFIGURATION -o /app/build
+
+FROM build AS publish
+ARG BUILD_CONFIGURATION=Release
+RUN dotnet publish "BackendTutorial.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
+
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app/publish .
+ENTRYPOINT ["dotnet", "BackendTutorial.dll"]
diff --git a/src/BackendTutorial/Program.cs b/src/BackendTutorial/Program.cs
index 161f695..bf08f8e 100644
--- a/src/BackendTutorial/Program.cs
+++ b/src/BackendTutorial/Program.cs
@@ -1,44 +1,8 @@
-var builder = WebApplication.CreateBuilder(args);
+using Infrastructure.Extensions;
-// Add services to the container.
-// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
-builder.Services.AddEndpointsApiExplorer();
-builder.Services.AddSwaggerGen();
+var builder = WebApplication.CreateBuilder(args);
+builder.AddDefaultInfrastructure();
var app = builder.Build();
-// Configure the HTTP request pipeline.
-if (app.Environment.IsDevelopment())
-{
- app.UseSwagger();
- app.UseSwaggerUI();
-}
-
-app.UseHttpsRedirection();
-
-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;
- })
- .WithName("GetWeatherForecast")
- .WithOpenApi();
-
-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.UseDefaultInfrastructure();
\ No newline at end of file
diff --git a/src/BackendTutorial/Properties/launchSettings.json b/src/BackendTutorial/Properties/launchSettings.json
index b4d4f44..258990a 100644
--- a/src/BackendTutorial/Properties/launchSettings.json
+++ b/src/BackendTutorial/Properties/launchSettings.json
@@ -1,13 +1,5 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
- "iisSettings": {
- "windowsAuthentication": false,
- "anonymousAuthentication": true,
- "iisExpress": {
- "applicationUrl": "http://localhost:41725",
- "sslPort": 44310
- }
- },
"profiles": {
"http": {
"commandName": "Project",
@@ -28,14 +20,6 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
- },
- "IIS Express": {
- "commandName": "IISExpress",
- "launchBrowser": true,
- "launchUrl": "swagger",
- "environmentVariables": {
- "ASPNETCORE_ENVIRONMENT": "Development"
- }
}
}
}
diff --git a/src/BackendTutorial/appsettings.Development.json b/src/BackendTutorial/appsettings.Development.json
deleted file mode 100644
index 0c208ae..0000000
--- a/src/BackendTutorial/appsettings.Development.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft.AspNetCore": "Warning"
- }
- }
-}
diff --git a/src/docker-compose.yml b/src/docker-compose.yml
new file mode 100644
index 0000000..7aabd32
--- /dev/null
+++ b/src/docker-compose.yml
@@ -0,0 +1,6 @@
+services:
+ tutorial:
+ image: backend-tutorial
+ build:
+ context: .
+ dockerfile: BackendTutorial/Dockerfile