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: