diff --git a/Chapter-1-initial-architecture/README.adoc b/Chapter-1-initial-architecture/README.adoc
index 3aa1d4b1..a58f3cd9 100644
--- a/Chapter-1-initial-architecture/README.adoc
+++ b/Chapter-1-initial-architecture/README.adoc
@@ -197,17 +197,13 @@ to download it from the official Microsoft website.
=== Run locally
-The Fitnet application requires Docker to run properly.
+The Fitnet application uses .NET Aspire for local development.
-There are only 3 steps you need to start the application:
+To run the application locally, follow these steps:
-1. Make sure that you are in `/Src` directory.
-2. Run `docker-compose build` to build the image of the application.
-3. Run `docker-compose up` to start the application. In the meantime it will also start Postgres inside container.
-
-The application runs on port `:8080`. Please navigate to http://localhost:8080 in your browser or http://localhost:8080/swagger/index.html to explore the API.
-
-That's it! You should now be able to run the application using either one of the above. :thumbsup:
+1. **Ensure Docker is running** on your machine.
+2. **Navigate to the solution root directory** in your terminal.
+3. **Run the AppHost project using the following command:**
=== How to run Integration Tests?
To run the integration tests for the project located in the `Fitnet.IntegrationTests` project, you can use either the command:
diff --git a/Chapter-1-initial-architecture/Src/Dockerfile b/Chapter-1-initial-architecture/Src/Dockerfile
deleted file mode 100644
index c7eab40d..00000000
--- a/Chapter-1-initial-architecture/Src/Dockerfile
+++ /dev/null
@@ -1,21 +0,0 @@
-FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
-WORKDIR /app
-EXPOSE 80
-EXPOSE 443
-
-FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
-WORKDIR /src
-COPY Directory.Build.props ./
-COPY ["Fitnet/Fitnet.csproj", "Fitnet/"]
-RUN dotnet restore "Fitnet/Fitnet.csproj"
-COPY . .
-WORKDIR "/src/Fitnet"
-RUN dotnet build "Fitnet.csproj" -c Release -o /app/build
-
-FROM build AS publish
-RUN dotnet publish "Fitnet.csproj" -c Release -o /app/publish
-
-FROM base AS final
-WORKDIR /app
-COPY --from=publish /app/publish .
-ENTRYPOINT ["dotnet", "EvolutionaryArchitecture.Fitnet.dll"]
\ No newline at end of file
diff --git a/Chapter-1-initial-architecture/Src/Fitnet.AppHost/Fitnet.AppHost.csproj b/Chapter-1-initial-architecture/Src/Fitnet.AppHost/Fitnet.AppHost.csproj
new file mode 100644
index 00000000..d74cba43
--- /dev/null
+++ b/Chapter-1-initial-architecture/Src/Fitnet.AppHost/Fitnet.AppHost.csproj
@@ -0,0 +1,22 @@
+
+
+
+
+ Exe
+ enable
+ enable
+ true
+ b4ef32d8-9e82-4dd1-b9a7-bc43e2c564e9
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Chapter-1-initial-architecture/Src/Fitnet.AppHost/Program.cs b/Chapter-1-initial-architecture/Src/Fitnet.AppHost/Program.cs
new file mode 100644
index 00000000..b866fe13
--- /dev/null
+++ b/Chapter-1-initial-architecture/Src/Fitnet.AppHost/Program.cs
@@ -0,0 +1,17 @@
+using Projects;
+
+var builder = DistributedApplication.CreateBuilder(args);
+var postgres = builder.AddPostgres("postgres")
+ .WithImage("postgres", "15.15")
+ .WithPgAdmin();
+
+var fitnetDatabase = postgres.AddDatabase("fitnetsdb", "fitnet");
+builder.AddProject("fitnet")
+ .WithEnvironment("ASPNETCORE_ENVIRONMENT", "Development")
+ .WithReference(fitnetDatabase, "Passes")
+ .WithReference(fitnetDatabase, "Contracts")
+ .WithReference(fitnetDatabase, "Reports")
+ .WithReference(fitnetDatabase, "Offers")
+ .WaitFor(postgres);
+
+await builder.Build().RunAsync();
diff --git a/Chapter-1-initial-architecture/Src/Fitnet.AppHost/Properties/launchSettings.json b/Chapter-1-initial-architecture/Src/Fitnet.AppHost/Properties/launchSettings.json
new file mode 100644
index 00000000..7b81911a
--- /dev/null
+++ b/Chapter-1-initial-architecture/Src/Fitnet.AppHost/Properties/launchSettings.json
@@ -0,0 +1,17 @@
+{
+ "$schema": "https://json.schemastore.org/launchsettings.json",
+ "profiles": {
+ "https": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "applicationUrl": "https://localhost:17105;http://localhost:15107",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development",
+ "DOTNET_ENVIRONMENT": "Development",
+ "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21129",
+ "DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22189"
+ }
+ }
+ }
+}
diff --git a/Chapter-1-initial-architecture/Src/Fitnet.AppHost/appsettings.json b/Chapter-1-initial-architecture/Src/Fitnet.AppHost/appsettings.json
new file mode 100644
index 00000000..31c092aa
--- /dev/null
+++ b/Chapter-1-initial-architecture/Src/Fitnet.AppHost/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning",
+ "Aspire.Hosting.Dcp": "Warning"
+ }
+ }
+}
diff --git a/Chapter-1-initial-architecture/Src/Fitnet.ArchitectureTests/Fitnet.ArchitectureTests.csproj b/Chapter-1-initial-architecture/Src/Fitnet.ArchitectureTests/Fitnet.ArchitectureTests.csproj
index 8211855d..3e3f8058 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet.ArchitectureTests/Fitnet.ArchitectureTests.csproj
+++ b/Chapter-1-initial-architecture/Src/Fitnet.ArchitectureTests/Fitnet.ArchitectureTests.csproj
@@ -22,7 +22,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
diff --git a/Chapter-1-initial-architecture/Src/Fitnet.IntegrationTests/Fitnet.IntegrationTests.csproj b/Chapter-1-initial-architecture/Src/Fitnet.IntegrationTests/Fitnet.IntegrationTests.csproj
index 748d7b7a..25ef36a9 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet.IntegrationTests/Fitnet.IntegrationTests.csproj
+++ b/Chapter-1-initial-architecture/Src/Fitnet.IntegrationTests/Fitnet.IntegrationTests.csproj
@@ -29,7 +29,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
diff --git a/Chapter-1-initial-architecture/Src/Fitnet.UnitTests/Fitnet.UnitTests.csproj b/Chapter-1-initial-architecture/Src/Fitnet.UnitTests/Fitnet.UnitTests.csproj
index f2581cb2..d6cf21e9 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet.UnitTests/Fitnet.UnitTests.csproj
+++ b/Chapter-1-initial-architecture/Src/Fitnet.UnitTests/Fitnet.UnitTests.csproj
@@ -23,7 +23,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
diff --git a/Chapter-1-initial-architecture/Src/Fitnet.slnx b/Chapter-1-initial-architecture/Src/Fitnet.slnx
index 2294acc8..1b8bdb5f 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet.slnx
+++ b/Chapter-1-initial-architecture/Src/Fitnet.slnx
@@ -1,6 +1,7 @@
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/Chapter-1-initial-architecture/Src/Fitnet/.dockerignore b/Chapter-1-initial-architecture/Src/Fitnet/.dockerignore
deleted file mode 100644
index cd967fc3..00000000
--- a/Chapter-1-initial-architecture/Src/Fitnet/.dockerignore
+++ /dev/null
@@ -1,25 +0,0 @@
-**/.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/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230608060456_MakeSignedAtColumnNotRequired.cs b/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230608060456_MakeSignedAtColumnNotRequired.cs
index 4e4bdd56..50518cfc 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230608060456_MakeSignedAtColumnNotRequired.cs
+++ b/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230608060456_MakeSignedAtColumnNotRequired.cs
@@ -1,6 +1,7 @@
#nullable disable
namespace EvolutionaryArchitecture.Fitnet.Contracts.Data.Database.Migrations;
+
using System;
using Microsoft.EntityFrameworkCore.Migrations;
diff --git a/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230608060545_AddCustomerIdColumntoContractsTable.cs b/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230608060545_AddCustomerIdColumntoContractsTable.cs
index 2bdc3ade..d0546e05 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230608060545_AddCustomerIdColumntoContractsTable.cs
+++ b/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230608060545_AddCustomerIdColumntoContractsTable.cs
@@ -1,6 +1,7 @@
#nullable disable
namespace EvolutionaryArchitecture.Fitnet.Contracts.Data.Database.Migrations;
+
using System;
using Microsoft.EntityFrameworkCore.Migrations;
diff --git a/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230618131127_ContractsAddColumnsToSupportContractExpiration.cs b/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230618131127_ContractsAddColumnsToSupportContractExpiration.cs
index 30e31b28..1e8db3d1 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230618131127_ContractsAddColumnsToSupportContractExpiration.cs
+++ b/Chapter-1-initial-architecture/Src/Fitnet/Contracts/Data/Database/Migrations/20230618131127_ContractsAddColumnsToSupportContractExpiration.cs
@@ -1,6 +1,7 @@
#nullable disable
namespace EvolutionaryArchitecture.Fitnet.Contracts.Data.Database.Migrations;
+
using System;
using Microsoft.EntityFrameworkCore.Migrations;
diff --git a/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj b/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj
index 97e62fae..a14bf167 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj
+++ b/Chapter-1-initial-architecture/Src/Fitnet/Fitnet.csproj
@@ -31,12 +31,6 @@
Contracts.http
-
- docker-compose.yml
-
-
- Dockerfile
-
-
+
\ No newline at end of file
diff --git a/Chapter-1-initial-architecture/Src/Fitnet/Offers/Data/Database/Migrations/20230503180337_Create_Offers_table.cs b/Chapter-1-initial-architecture/Src/Fitnet/Offers/Data/Database/Migrations/20230503180337_Create_Offers_table.cs
index a5e2b173..7ab42e2b 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet/Offers/Data/Database/Migrations/20230503180337_Create_Offers_table.cs
+++ b/Chapter-1-initial-architecture/Src/Fitnet/Offers/Data/Database/Migrations/20230503180337_Create_Offers_table.cs
@@ -1,6 +1,7 @@
#nullable disable
namespace SuperSimpleArchitecture.Fitnet.Migrations.OffersPersistenceMigrations;
+
using System;
using System.Diagnostics.CodeAnalysis;
using Microsoft.EntityFrameworkCore.Migrations;
diff --git a/Chapter-1-initial-architecture/Src/Fitnet/Passes/Data/Database/Migrations/20230503180338_CreatePassesTable.cs b/Chapter-1-initial-architecture/Src/Fitnet/Passes/Data/Database/Migrations/20230503180338_CreatePassesTable.cs
index 26dd8601..3cf19867 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet/Passes/Data/Database/Migrations/20230503180338_CreatePassesTable.cs
+++ b/Chapter-1-initial-architecture/Src/Fitnet/Passes/Data/Database/Migrations/20230503180338_CreatePassesTable.cs
@@ -1,6 +1,7 @@
#nullable disable
namespace EvolutionaryArchitecture.Fitnet.Migrations;
+
using System;
using Microsoft.EntityFrameworkCore.Migrations;
diff --git a/Chapter-1-initial-architecture/Src/Fitnet/Program.cs b/Chapter-1-initial-architecture/Src/Fitnet/Program.cs
index 161a56a7..5a502426 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet/Program.cs
+++ b/Chapter-1-initial-architecture/Src/Fitnet/Program.cs
@@ -18,7 +18,6 @@
builder.Services.AddRequestsValidations();
builder.Services.AddClock();
-// Add modules - each module registers its own options with validation
builder.Services.AddPasses(builder.Configuration);
builder.Services.AddContracts(builder.Configuration);
builder.Services.AddOffers(builder.Configuration);
diff --git a/Chapter-1-initial-architecture/Src/Fitnet/Properties/launchSettings.json b/Chapter-1-initial-architecture/Src/Fitnet/Properties/launchSettings.json
index 90e43af9..180f6314 100644
--- a/Chapter-1-initial-architecture/Src/Fitnet/Properties/launchSettings.json
+++ b/Chapter-1-initial-architecture/Src/Fitnet/Properties/launchSettings.json
@@ -24,7 +24,7 @@
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
- "applicationUrl": "https://localhost:7097;http://localhost:5013",
+ "applicationUrl": "https://localhost:7098;http://localhost:5014",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
diff --git a/Chapter-1-initial-architecture/Src/docker-compose.yml b/Chapter-1-initial-architecture/Src/docker-compose.yml
deleted file mode 100644
index ee4df1fa..00000000
--- a/Chapter-1-initial-architecture/Src/docker-compose.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-services:
- fitnet:
- environment:
- - ASPNETCORE_ENVIRONMENT=Development
- - ASPNETCORE_URLS=http://+:80
- - ConnectionStrings__Passes=Host=postgres;Database=fitnet;Username=postgres;Password=mysecretpassword
- - ConnectionStrings__Contracts=Host=postgres;Database=fitnet;Username=postgres;Password=mysecretpassword
- - ConnectionStrings__Reports=Host=postgres;Database=fitnet;Username=postgres;Password=mysecretpassword
- - ConnectionStrings__Offers=Host=postgres;Database=fitnet;Username=postgres;Password=mysecretpassword
- build: .
- ports:
- - "8080:80"
- depends_on:
- postgres:
- condition: service_healthy
-
- postgres:
- image: postgres:14.3
- container_name: postgres
- ports:
- - 5432:5432
- environment:
- - POSTGRES_PASSWORD=mysecretpassword
- - POSTGRES_DB=fitnet
- healthcheck:
- test: [ "CMD-SHELL", "pg_isready -U postgres" ]
- interval: 10s
- timeout: 5s
- retries: 5
\ No newline at end of file
diff --git a/README.adoc b/README.adoc
index 7d8bf1d3..c6ee72c9 100644
--- a/README.adoc
+++ b/README.adoc
@@ -300,6 +300,7 @@ Application:
- https://github.com/dotnet/efcore[Entity Framework]
- https://github.com/npgsql/npgsql[Npgsql]
- https://github.com/SonarSource/sonar-dotnet[SonarAnalyzer]
+- https://github.com/dotnet/aspire[.NET Aspire]
Testing: