diff --git a/2-modular-monolith-architecture-style/README.md b/2-modular-monolith-architecture-style/README.md
index 7be076b..6009f50 100644
--- a/2-modular-monolith-architecture-style/README.md
+++ b/2-modular-monolith-architecture-style/README.md
@@ -7,6 +7,16 @@
- [Key Features](#key-features)
- [When to Use](#when-to-use)
- [Challenges](#challenges)
+- [Modular Monolith Architecture Design](#modular-monolith-architecture-design)
+- [Development Setup](#development-setup)
+ - [Dotnet Tools Packages](#dotnet-tools-packages)
+ - [Husky](#husky)
+ - [Upgrade Nuget Packages](#upgrade-nuget-packages)
+- [How to Run](#how-to-run)
+ - [Build](#build)
+ - [Run](#run)
+ - [Test](#test)
+- [Documentation Apis](#documentation-apis)
## Key Features
@@ -27,3 +37,66 @@
- Still a single deployment unit, so scaling is limited.
- Requires careful design to avoid tight coupling between modules.
- Not as scalable or fault-tolerant as microservices.
+
+
+## Modular Monolith Architecture Design
+
+
+
+
+## Development Setup
+
+### Dotnet Tools Packages
+For installing our requirement packages with .NET cli tools, we need to install `dotnet tool manifest`.
+```bash
+dotnet new tool-manifest
+```
+And after that we can restore our dotnet tools packages with .NET cli tools from `.config` folder and `dotnet-tools.json` file.
+```
+dotnet tool restore
+```
+
+### Husky
+Here we use `husky` to handel some pre commit rules and we used `conventional commits` rules and `formatting` as pre commit rules, here in [package.json](.././package.json). of course, we can add more rules for pre commit in future. (find more about husky in the [documentation](https://typicode.github.io/husky/get-started.html))
+We need to install `husky` package for `manage` `pre commits hooks` and also I add two packages `@commitlint/cli` and `@commitlint/config-conventional` for handling conventional commits rules in [package.json](.././package.json).
+Run the command bellow in the root of project to install all npm dependencies related to husky:
+
+```bash
+npm install
+```
+
+> Note: In the root of project we have `.husky` folder and it has `commit-msg` file for handling conventional commits rules with provide user friendly message and `pre-commit` file that we can run our `scripts` as a `pre-commit` hooks. that here we call `format` script from [package.json](./package.json) for formatting purpose.
+
+### Upgrade Nuget Packages
+For upgrading our nuget packages to last version, we use the great package [dotnet-outdated](https://github.com/dotnet-outdated/dotnet-outdated).
+Run the command below in the root of project to upgrade all of packages to last version:
+```bash
+dotnet outdated -u
+```
+
+## How to Run
+
+> ### Build
+To `build` all modules, run this command in the `root` of the project:
+```bash
+dotnet build
+```
+
+> ### Run
+To `run` all modules, run this command in the root of the `Api` folder where the `csproj` file is located:
+```bash
+dotnet run
+```
+
+> ### Test
+
+To `test` all modules, run this command in the `root` of the project:
+```bash
+dotnet test
+```
+
+> ### Documentation Apis
+
+Each microservice provides `API documentation` and navigate to `/swagger` for `Swagger OpenAPI` or `/scalar/v1` for `Scalar OpenAPI` to visit list of endpoints.
+
+As part of API testing, I created the [booking.rest](./booking.rest) file which can be run with the [REST Client](https://github.com/Huachao/vscode-restclient) `VSCode plugin`.
diff --git a/2-modular-monolith-architecture-style/assets/booking-modular-monolith.drawio b/2-modular-monolith-architecture-style/assets/booking-modular-monolith.drawio
new file mode 100644
index 0000000..fbadb1e
--- /dev/null
+++ b/2-modular-monolith-architecture-style/assets/booking-modular-monolith.drawio
@@ -0,0 +1,482 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/2-modular-monolith-architecture-style/assets/booking-modular-monolith.png b/2-modular-monolith-architecture-style/assets/booking-modular-monolith.png
new file mode 100644
index 0000000..898f804
Binary files /dev/null and b/2-modular-monolith-architecture-style/assets/booking-modular-monolith.png differ
diff --git a/2-modular-monolith-architecture-style/booking.rest b/2-modular-monolith-architecture-style/booking.rest
new file mode 100644
index 0000000..3de3b6c
--- /dev/null
+++ b/2-modular-monolith-architecture-style/booking.rest
@@ -0,0 +1,230 @@
+
+@booking-modular-monolith-api=https://localhost:5000
+
+@contentType = application/json
+@flightid = "3c5c0000-97c6-fc34-2eb9-08db322230c9"
+@passengerId = "8c9c0000-97c6-fc34-2eb9-66db322230c9"
+
+################################# Identity API #################################
+
+###
+# @name Authenticate
+POST {{booking-modular-monolith-api}}/connect/token
+Content-Type: application/x-www-form-urlencoded
+
+grant_type=password
+&client_id=client
+&client_secret=secret
+&username=samh
+&password=Admin@123456
+&scope=booking-modular-monolith
+###
+
+
+
+###
+# @name Register_New_User
+POST {{booking-modular-monolith-api}}/api/v1/identity/register-user
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+
+{
+ "firstName": "John",
+ "lastName": "Do",
+ "username": "admin",
+ "passportNumber": "412900000",
+ "email": "admin@admin.com",
+ "password": "Admin@12345",
+ "confirmPassword": "Admin@12345"
+}
+###
+
+################################# Flight API #################################
+
+###
+# @name Create_Seat
+Post {{booking-modular-monolith-api}}/api/v1/flight/seat
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+
+{
+ "seatNumber": "1255",
+ "type": 1,
+ "class": 1,
+ "flightId": "3c5c0000-97c6-fc34-2eb9-08db322230c9"
+}
+###
+
+
+###
+# @name Reserve_Seat
+Post {{booking-modular-monolith-api}}/api/v1/flight/reserve-seat
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+
+{
+ "flightId": "3c5c0000-97c6-fc34-2eb9-08db322230c9",
+ "seatNumber": "1255"
+}
+###
+
+
+###
+# @name Get_Available_Seats
+GET {{booking-modular-monolith-api}}/api/v1/flight/get-available-seats/{{flightid}}
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+###
+
+
+###
+# @name Get_Flight_By_Id
+GET {{booking-modular-monolith-api}}/api/v1/flight/{{flightid}}
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+###
+
+
+###
+# @name Get_Available_Flights
+GET {{booking-modular-monolith-api}}/api/v1/flight/get-available-flights
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+###
+
+
+###
+# @name Create_Flights
+POST {{booking-modular-monolith-api}}/api/v1/flight
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+
+{
+ "flightNumber": "12BB",
+ "aircraftId": "3c5c0000-97c6-fc34-fcd3-08db322230c8",
+ "departureAirportId": "3c5c0000-97c6-fc34-a0cb-08db322230c8",
+ "departureDate": "2022-03-01T14:55:41.255Z",
+ "arriveDate": "2022-03-01T14:55:41.255Z",
+ "arriveAirportId": "3c5c0000-97c6-fc34-fc3c-08db322230c8",
+ "durationMinutes": 120,
+ "flightDate": "2022-03-01T14:55:41.255Z",
+ "status": 1,
+ "price": 8000
+}
+###
+
+
+###
+# @name Update_Flights
+PUT {{booking-modular-monolith-api}}/api/v1/flight
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+
+{
+ "id": 1,
+ "flightNumber": "BD467",
+ "aircraftId": "3c5c0000-97c6-fc34-fcd3-08db322230c8",
+ "departureAirportId": "3c5c0000-97c6-fc34-a0cb-08db322230c8",
+ "departureDate": "2022-04-23T12:17:45.140Z",
+ "arriveDate": "2022-04-23T12:17:45.140Z",
+ "arriveAirportId": "3c5c0000-97c6-fc34-fc3c-08db322230c8",
+ "durationMinutes": 120,
+ "flightDate": "2022-04-23T12:17:45.140Z",
+ "status": 4,
+ "isDeleted": false,
+ "price": 99000
+}
+###
+
+
+###
+# @name Delete_Flights
+DELETE {{booking-modular-monolith-api}}/api/v1/flight/{{flightid}}
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+###
+
+
+###
+# @name Create_Airport
+POST {{booking-modular-monolith-api}}/api/v1/flight/airport
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+
+{
+ "name": "mehrabad",
+ "address": "tehran",
+ "code": "12YD"
+}
+###
+
+
+
+###
+# @name Create_Aircraft
+POST {{booking-modular-monolith-api}}/api/v1/flight/aircraft
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+
+{
+ "name": "airbus2",
+ "model": "322",
+ "manufacturingYear": 2012
+}
+###
+
+
+################################# Passenger API #################################
+
+
+###
+# @name Complete_Registration_Passenger
+POST {{booking-modular-monolith-api}}/api/v1/passenger/complete-registration
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+
+{
+ "passportNumber": "412900000000",
+ "passengerType": 1,
+ "age": 30
+}
+###
+
+
+###
+# @name Get_Passenger_By_Id
+GET {{booking-modular-monolith-api}}/api/v1/passenger/{{passengerId}}
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+###
+
+
+################################# Booking API #################################
+
+
+###
+# @name Create_Booking
+POST {{booking-modular-monolith-api}}/api/v1/booking
+accept: application/json
+Content-Type: application/json
+authorization: bearer {{Authenticate.response.body.access_token}}
+
+{
+ "passengerId": "8c9c0000-97c6-fc34-2eb9-66db322230c9",
+ "flightId": "3c5c0000-97c6-fc34-2eb9-08db322230c9",
+ "description": "I want to fly to iran"
+}
+###
diff --git a/2-modular-monolith-architecture-style/src/.gitkeep b/2-modular-monolith-architecture-style/deployments/.gitkeep
similarity index 100%
rename from 2-modular-monolith-architecture-style/src/.gitkeep
rename to 2-modular-monolith-architecture-style/deployments/.gitkeep
diff --git a/2-modular-monolith-architecture-style/src/Api/src/Extensions/SharedInfrastructureExtensions.cs b/2-modular-monolith-architecture-style/src/Api/src/Extensions/SharedInfrastructureExtensions.cs
index 92aa4c6..2ede23d 100644
--- a/2-modular-monolith-architecture-style/src/Api/src/Extensions/SharedInfrastructureExtensions.cs
+++ b/2-modular-monolith-architecture-style/src/Api/src/Extensions/SharedInfrastructureExtensions.cs
@@ -4,7 +4,6 @@ using BuildingBlocks.Exception;
using BuildingBlocks.HealthCheck;
using BuildingBlocks.Jwt;
using BuildingBlocks.Logging;
-using BuildingBlocks.Mapster;
using BuildingBlocks.MassTransit;
using BuildingBlocks.OpenApi;
using BuildingBlocks.OpenTelemetryCollector;
@@ -12,7 +11,6 @@ using BuildingBlocks.PersistMessageProcessor;
using BuildingBlocks.ProblemDetails;
using BuildingBlocks.Web;
using Figgle;
-using FluentValidation;
using Microsoft.AspNetCore.Mvc;
using Serilog;
@@ -38,8 +36,8 @@ public static class SharedInfrastructureExtensions
Console.WriteLine(FiggleFonts.Standard.Render(appOptions.Name));
builder.AddCustomSerilog(builder.Environment);
- builder.Services.AddScoped();
builder.Services.AddJwt();
+ builder.Services.AddScoped();
builder.Services.AddTransient();
builder.Services.AddPersistMessageProcessor();
@@ -85,9 +83,6 @@ public static class SharedInfrastructureExtensions
});
builder.Services.AddEasyCaching(options => { options.UseInMemory(builder.Configuration, "mem"); });
-
- builder.Services.AddValidatorsFromAssemblies(AppDomain.CurrentDomain.GetAssemblies());
- builder.Services.AddCustomMapster(AppDomain.CurrentDomain.GetAssemblies());
builder.Services.AddProblemDetails();
return builder;
diff --git a/2-modular-monolith-architecture-style/src/Api/src/Program.cs b/2-modular-monolith-architecture-style/src/Api/src/Program.cs
index 9810f8e..5fb7504 100644
--- a/2-modular-monolith-architecture-style/src/Api/src/Program.cs
+++ b/2-modular-monolith-architecture-style/src/Api/src/Program.cs
@@ -7,8 +7,6 @@ using Passenger.Extensions.Infrastructure;
var builder = WebApplication.CreateBuilder(args);
-builder.AddMinimalEndpoints(assemblies: AppDomain.CurrentDomain.GetAssemblies());
-
builder.AddSharedInfrastructure();
builder.AddFlightModules();
@@ -16,20 +14,19 @@ builder.AddIdentityModules();
builder.AddPassengerModules();
builder.AddBookingModules();
-
var app = builder.Build();
// ref: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-7.0#routing-basics
app.UseAuthentication();
app.UseAuthorization();
-app.MapMinimalEndpoints();
-app.UserSharedInfrastructure();
app.UseFlightModules();
app.UseIdentityModules();
app.UsePassengerModules();
app.UseBookingModules();
+app.UserSharedInfrastructure();
+app.MapMinimalEndpoints();
app.Run();
diff --git a/2-modular-monolith-architecture-style/src/Api/src/appsettings.json b/2-modular-monolith-architecture-style/src/Api/src/appsettings.json
index 1cf37da..436a3dc 100644
--- a/2-modular-monolith-architecture-style/src/Api/src/appsettings.json
+++ b/2-modular-monolith-architecture-style/src/Api/src/appsettings.json
@@ -26,10 +26,9 @@
"ConnectionString": "esdb://localhost:2113?tls=false"
},
"Jwt": {
- "Authority": "http://localhost:5001",
- "Audience": "booking_modular_monolith",
- "RequireHttpsMetadata": false,
- "MetadataAddress": "http://localhost:5001/.well-known/openid-configuration"
+ "Authority": "https://localhost:5000",
+ "Audience": "booking-modular-monolith",
+ "RequireHttpsMetadata": false
},
"PersistMessageOptions": {
"Interval": 30,
diff --git a/2-modular-monolith-architecture-style/src/Api/src/keys/is-signing-key-296345BF73910ADD1DAC302B848E47E7.json b/2-modular-monolith-architecture-style/src/Api/src/keys/is-signing-key-296345BF73910ADD1DAC302B848E47E7.json
new file mode 100644
index 0000000..cd34668
--- /dev/null
+++ b/2-modular-monolith-architecture-style/src/Api/src/keys/is-signing-key-296345BF73910ADD1DAC302B848E47E7.json
@@ -0,0 +1 @@
+{"Version":1,"Id":"296345BF73910ADD1DAC302B848E47E7","Created":"2025-04-06T20:57:25.1670058Z","Algorithm":"RS256","IsX509Certificate":false,"Data":"CfDJ8KNpFTgHKl5Nl-o13RQ8rseNpYdUTB-_FLsIGbeu6jM5x9l_rDfygUsYH6TAnyqXDFeW4U7xf8kJXDDvH1V0jkKcQaHFWYcZnKAirRBnuReu2OcaGWcn0vDccI5liTTRfp_Dknwhf3jgrU-LOBlPDoVGWwTwOQHXa4iHQjfOCG77Ey6CmJZ0w6JMi802tSMbpc2G2376b05GuzpoKwfgG_F8ZJcAtl1cql4KD11CcynPTNqK0fXOcIeGCQKgJDkJp_cHlk-sv4xJTFl5nqRx62v9auoB3AeKxqRqKqserGT-ZFYDeSxOlgmDSreVFezZ4tYd80Iq-ZpQXK5e3uz8gJ1B37_ySzgF_Rkscf67FivIqcpcV-WZzvnKXeQP0Wo7B7Qt8sKwCAW-vh3X5iMdDi-tecOWaRqeNrffbjd4efP1FK5wqmNrZirrcuCZDgPyYUiB1bSUE1HSj5vW4kFy_NF-3k0EVcQf5KqJpJ9QkTQgmTPkFCwwEcyX-P2hA21G64_M_7EjZXnjw29xjnkI7zO3mx3sA5bwPf6sCmxgE6joaI6P7G4u8JB5pbSHynOWWNTWRZm8YHngZCfK1DZa6Y-uAnrNzVQdcbB-uVGwszavP3Ohqtu7NBCaIkIhyT9N783n5-J8KAbSKu2FBF-qwNaUcmSAhbnRLyQwou-F0sxgM9iLwNcCo6jcgqz5g3MBEIcWa5IKdbtYXQQzbj3NlKmYg1l-x0SrxZD9403gNIS-zCEWLPEgpLr-NU06_Y5Vkbvn8jHKAr45nDFvY_osVvCPQ8qFuq_P-z3HMqFrfuPNlLrf_ZoJCpIKYNdXPJwHQXzGpz41QiN2omk52K5N8UCiGnDog66tJZAqGjtWWHpFCF2O4LXA9uEwnlD06N_i1T9umOtLnlGsF5SM0G3YjG_G8APqd6GDnJsM1wBoVXzzldGvS8GEwwxvVRGvLrSljPdR_l-8JifzUzhIOxMdlZUE8D9tQJhqZJovm34kfgx8AA0j4FQxAKPUhz99dapc5rmP1pgkuv7b9ZgtWa9js16GUJUYV3Dd6HC3lWU4zdXnQIsJPBUdgsiKptAXayc1KevAzw7o2PB7_auENui4cj1MuDxbaf9yrq9ZIol_tPw5rdN440vhHPIPzVi-1Wv0YyvyPD0fj2GAU5fL97lVlCprWuM71-rjVtARrn0pbf4ENBYk4ABWWke8ZHppbdFQQbjBv-yKCeiGA7qbRAeb_NMK2wmWUGz9DTVWtb04kmitXvg1-aj6ZwY-uIDSY5uaHPz7b8mxFywlSQ9plQzIkb-EfZk6RWxW1-NqyHMEAryM4QxwdDX9LjSo37CPdHCdOSRsMzH6zGH0_SgeN4W25Lk0RhoBHMMQk_gF5FCXjDteFlAdPFw9K5qmVVohHfEnAMDUZ4xYYgDx0Z254jsbSIFOuqEmUvmb5WvbKFtlcLrpFAuoqcNLfI61JM0LLxZNjpktGOMX5q1E_tYm5Y-bxd6W_2r-UUkCTKWJMp7_wr2CJPyegVshEBuUaO4_GyndCTY9_jh4OEYgyFQliEg66g3CUVy7ZBERrfz1CiHmpTqoKbs3toPsHMrB6yaQe9UtcYzLBRP3OVku3WmE1IylfUsZ64YA2DBU399JjYckXlWU3PxH9GAxcnIW8cU_29XZZ0ueGLFeSRP0mBb8TqVIcqd3xoAUbZGPnleme-D44yco8ZSGFVhQqt5qstzIA2DQALjVf2E5vg-yL8Gj9s5q-xjPjBgZgyW23gbBEO6PynDK3jfnucHXcLsHMpvZwyV1yaU3314mNLUpu241_7ukMuWC5FmxaVWqe4n9h-W479YlK5WmI5TDmWcc12DQI92eIAYCSYA60SOJhnuGsyFHwedfxIjVjouZeAWWHj1QOM3uZ1rwYOB0DZSlqI6C2kecv4D2CFq7gYosBxQX9fSnJ2MyUiGOxbdlRtwGB_dtRtlqWpt-acu-l9i5jNwdM6QnNejoPthvWPCcvfaaqFjWjnZQQKSBBfWV9Coe7mnaJYhyqWFUQ4AKcDuboQ3k3jj2p-5LTnbFlTQ3SzLfsgjLjpD5hqIY1ND5NWOT3D0pQumfh5tJxgSa0g-HhW7XBSGs2783OFdgAMuxCkZUgisdu0MRyQzdqWEY30trlpnpsAGOO3E8MMxQ2COy7Y-WrUykioag1qkJTbT-1FgHgw9Qj4dnQ136_tC3BvVrmO6pId26PzdPDpV_4T5vNLoyuiyyUqnHcKOETFrHpbj2cXmi-sYuqrwfNZKfcPIsAkekmcWlLd9s4glvD3xJ0SB0s6gJURjvupdD96l2kfdHw8qieB0ovlGISrpjnAKGn6F81_32rYULB-NDN8H4aTdiVmhvwf6KkpXHA9Euuyyir4BqHmIknr8WWuugIMxRw3ysCS4OIV5ocsjzIfQ9r_15bNWsoyWPDkVnKcS1ffbURzYPNIqTO6Ik5iC7rk705WAxaojy","DataProtected":true}
\ No newline at end of file
diff --git a/2-modular-monolith-architecture-style/src/Modules/Booking/src/Booking/Features/CreatingBook/V1/CreateBooking.cs b/2-modular-monolith-architecture-style/src/Modules/Booking/src/Booking/Features/CreatingBook/V1/CreateBooking.cs
index bde40c0..9975930 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Booking/src/Booking/Features/CreatingBook/V1/CreateBooking.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Booking/src/Booking/Features/CreatingBook/V1/CreateBooking.cs
@@ -50,7 +50,7 @@ public class CreateBookingEndpoint : IMinimalEndpoint
return Results.Ok(response);
})
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("CreateBooking")
.WithApiVersionSet(builder.NewApiVersionSet("Booking").Build())
.Produces()
diff --git a/2-modular-monolith-architecture-style/src/Modules/Booking/src/Extensions/Infrastructure/InfrastructureExtensions.cs b/2-modular-monolith-architecture-style/src/Modules/Booking/src/Extensions/Infrastructure/InfrastructureExtensions.cs
index 87e6712..3d0050d 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Booking/src/Extensions/Infrastructure/InfrastructureExtensions.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Booking/src/Extensions/Infrastructure/InfrastructureExtensions.cs
@@ -1,7 +1,10 @@
using Booking.Data;
using BuildingBlocks.Core;
using BuildingBlocks.EventStoreDB;
+using BuildingBlocks.Mapster;
using BuildingBlocks.Mongo;
+using BuildingBlocks.Web;
+using FluentValidation;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
@@ -12,6 +15,9 @@ public static class InfrastructureExtensions
public static WebApplicationBuilder AddBookingModules(this WebApplicationBuilder builder)
{
builder.Services.AddScoped();
+ builder.AddMinimalEndpoints(assemblies: typeof(BookingRoot).Assembly);
+ builder.Services.AddValidatorsFromAssembly(typeof(BookingRoot).Assembly);
+ builder.Services.AddCustomMapster(typeof(BookingRoot).Assembly);
builder.AddMongoDbContext();
// ref: https://github.com/oskardudycz/EventSourcing.NetCore/tree/main/Sample/EventStoreDB/ECommerce
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Aircrafts/Features/CreatingAircraft/V1/CreateAircraft.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Aircrafts/Features/CreatingAircraft/V1/CreateAircraft.cs
index ff9b266..4a97cdf 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Aircrafts/Features/CreatingAircraft/V1/CreateAircraft.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Aircrafts/Features/CreatingAircraft/V1/CreateAircraft.cs
@@ -54,7 +54,7 @@ public class CreateAircraftEndpoint : IMinimalEndpoint
return Results.Ok(response);
})
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("CreateAircraft")
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
.Produces()
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Airports/Features/CreatingAirport/V1/CreateAirport.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Airports/Features/CreatingAirport/V1/CreateAirport.cs
index 580f9c7..8c5912b 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Airports/Features/CreatingAirport/V1/CreateAirport.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Airports/Features/CreatingAirport/V1/CreateAirport.cs
@@ -51,7 +51,7 @@ public class CreateAirportEndpoint : IMinimalEndpoint
return Results.Ok(response);
})
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("CreateAirport")
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
.Produces()
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Extensions/Infrastructure/InfrastructureExtensions.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Extensions/Infrastructure/InfrastructureExtensions.cs
index dbbb17f..dc9ab2a 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Extensions/Infrastructure/InfrastructureExtensions.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Extensions/Infrastructure/InfrastructureExtensions.cs
@@ -1,9 +1,12 @@
using BuildingBlocks.Core;
using BuildingBlocks.EFCore;
+using BuildingBlocks.Mapster;
using BuildingBlocks.Mongo;
+using BuildingBlocks.Web;
using Flight.Data;
using Flight.Data.Seed;
using Flight.GrpcServer.Services;
+using FluentValidation;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
@@ -15,6 +18,9 @@ public static class InfrastructureExtensions
public static WebApplicationBuilder AddFlightModules(this WebApplicationBuilder builder)
{
builder.Services.AddScoped();
+ builder.AddMinimalEndpoints(assemblies: typeof(FlightRoot).Assembly);
+ builder.Services.AddValidatorsFromAssembly(typeof(FlightRoot).Assembly);
+ builder.Services.AddCustomMapster(typeof(FlightRoot).Assembly);
builder.AddCustomDbContext(nameof(Flight));
builder.Services.AddScoped();
builder.AddMongoDbContext();
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Extensions/Infrastructure/MediatRExtensions.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Extensions/Infrastructure/MediatRExtensions.cs
index 7d4eeb5..7fe8ac0 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Extensions/Infrastructure/MediatRExtensions.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Extensions/Infrastructure/MediatRExtensions.cs
@@ -14,7 +14,7 @@ public static class MediatRExtensions
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(typeof(FlightRoot).Assembly));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(LoggingBehavior<,>));
- // services.AddScoped(typeof(IPipelineBehavior<,>), typeof(EfTxFlightBehavior<,>));
+ services.AddScoped(typeof(IPipelineBehavior<,>), typeof(EfTxFlightBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(CachingBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(InvalidateCachingBehavior<,>));
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/CreatingFlight/V1/CreateFlight.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/CreatingFlight/V1/CreateFlight.cs
index e0a3d99..5f4a05b 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/CreatingFlight/V1/CreateFlight.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/CreatingFlight/V1/CreateFlight.cs
@@ -59,7 +59,7 @@ public class CreateFlightEndpoint : IMinimalEndpoint
return Results.CreatedAtRoute("GetFlightById", new { id = result.Id }, response);
})
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("CreateFlight")
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
.Produces(StatusCodes.Status201Created)
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/DeletingFlight/V1/DeleteFlight.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/DeletingFlight/V1/DeleteFlight.cs
index 3f82d40..ebb0931 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/DeletingFlight/V1/DeleteFlight.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/DeletingFlight/V1/DeleteFlight.cs
@@ -45,7 +45,7 @@ public class DeleteFlightEndpoint : IMinimalEndpoint
return Results.NoContent();
})
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("DeleteFlight")
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
.Produces(StatusCodes.Status204NoContent)
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/GettingAvailableFlights/V1/GetAvailableFlights.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/GettingAvailableFlights/V1/GetAvailableFlights.cs
index 73d435e..1dc6071 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/GettingAvailableFlights/V1/GetAvailableFlights.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/GettingAvailableFlights/V1/GetAvailableFlights.cs
@@ -46,7 +46,7 @@ public class GetAvailableFlightsEndpoint : IMinimalEndpoint
return Results.Ok(response);
})
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("GetAvailableFlights")
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
.Produces()
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/GettingFlightById/V1/GetFlightById.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/GettingFlightById/V1/GetFlightById.cs
index 5f01b14..7b0cf8a 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/GettingFlightById/V1/GetFlightById.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/GettingFlightById/V1/GetFlightById.cs
@@ -39,7 +39,7 @@ public class GetFlightByIdEndpoint : IMinimalEndpoint
return Results.Ok(response);
})
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("GetFlightById")
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
.Produces()
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/UpdatingFlight/V1/UpdateFlight.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/UpdatingFlight/V1/UpdateFlight.cs
index 242f951..25b6159 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/UpdatingFlight/V1/UpdateFlight.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Flights/Features/UpdatingFlight/V1/UpdateFlight.cs
@@ -56,7 +56,7 @@ public class UpdateFlightEndpoint : IMinimalEndpoint
return Results.NoContent();
})
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("UpdateFlight")
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
.Produces(StatusCodes.Status204NoContent)
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/CreatingSeat/V1/CreateSeat.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/CreatingSeat/V1/CreateSeat.cs
index 1ab80ff..35e7da9 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/CreatingSeat/V1/CreateSeat.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/CreatingSeat/V1/CreateSeat.cs
@@ -44,7 +44,7 @@ public class CreateSeatEndpoint : IMinimalEndpoint
public IEndpointRouteBuilder MapEndpoint(IEndpointRouteBuilder builder)
{
builder.MapPost($"{EndpointConfig.BaseApiPath}/flight/seat", CreateSeat)
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("CreateSeat")
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
.Produces()
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/GettingAvailableSeats/V1/GetAvailableSeats.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/GettingAvailableSeats/V1/GetAvailableSeats.cs
index 2470176..1470d13 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/GettingAvailableSeats/V1/GetAvailableSeats.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/GettingAvailableSeats/V1/GetAvailableSeats.cs
@@ -34,7 +34,7 @@ public class GetAvailableSeatsEndpoint : IMinimalEndpoint
public IEndpointRouteBuilder MapEndpoint(IEndpointRouteBuilder builder)
{
builder.MapGet($"{EndpointConfig.BaseApiPath}/flight/get-available-seats/{{id}}", GetAvailableSeats)
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("GetAvailableSeats")
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
.Produces()
diff --git a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/ReservingSeat/V1/ReserveSeat.cs b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/ReservingSeat/V1/ReserveSeat.cs
index 4123393..04d179a 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/ReservingSeat/V1/ReserveSeat.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Flight/src/Seats/Features/ReservingSeat/V1/ReserveSeat.cs
@@ -35,7 +35,7 @@ public class ReserveSeatEndpoint : IMinimalEndpoint
public IEndpointRouteBuilder MapEndpoint(IEndpointRouteBuilder builder)
{
builder.MapPost($"{EndpointConfig.BaseApiPath}/flight/reserve-seat", ReserveSeat)
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("ReserveSeat")
.WithApiVersionSet(builder.NewApiVersionSet("Flight").Build())
.Produces()
diff --git a/2-modular-monolith-architecture-style/src/Modules/Identity/src/Configurations/Config.cs b/2-modular-monolith-architecture-style/src/Modules/Identity/src/Configurations/Config.cs
index d1ded48..c0ac516 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Identity/src/Configurations/Config.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Identity/src/Configurations/Config.cs
@@ -25,7 +25,8 @@ public static class Config
new(Constants.StandardScopes.FlightApi),
new(Constants.StandardScopes.PassengerApi),
new(Constants.StandardScopes.BookingApi),
- new(Constants.StandardScopes.IdentityApi)
+ new(Constants.StandardScopes.IdentityApi),
+ new(Constants.StandardScopes.BookingModularMonolith),
};
@@ -35,7 +36,8 @@ public static class Config
new(Constants.StandardScopes.FlightApi),
new(Constants.StandardScopes.PassengerApi),
new(Constants.StandardScopes.BookingApi),
- new(Constants.StandardScopes.IdentityApi)
+ new(Constants.StandardScopes.IdentityApi),
+ new(Constants.StandardScopes.BookingModularMonolith),
};
public static IEnumerable Clients =>
@@ -56,7 +58,8 @@ public static class Config
Constants.StandardScopes.FlightApi,
Constants.StandardScopes.PassengerApi,
Constants.StandardScopes.BookingApi,
- Constants.StandardScopes.IdentityApi
+ Constants.StandardScopes.IdentityApi,
+ Constants.StandardScopes.BookingModularMonolith,
},
AccessTokenLifetime = 3600, // authorize the client to access protected resources
IdentityTokenLifetime = 3600 // authenticate the user
diff --git a/2-modular-monolith-architecture-style/src/Modules/Identity/src/Extensions/Infrastructure/InfrastructureExtensions.cs b/2-modular-monolith-architecture-style/src/Modules/Identity/src/Extensions/Infrastructure/InfrastructureExtensions.cs
index d38d12b..3e754e5 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Identity/src/Extensions/Infrastructure/InfrastructureExtensions.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Identity/src/Extensions/Infrastructure/InfrastructureExtensions.cs
@@ -1,5 +1,8 @@
using BuildingBlocks.Core;
using BuildingBlocks.EFCore;
+using BuildingBlocks.Mapster;
+using BuildingBlocks.Web;
+using FluentValidation;
using Identity.Configurations;
using Identity.Data;
using Identity.Data.Seed;
@@ -15,6 +18,9 @@ public static class InfrastructureExtensions
public static WebApplicationBuilder AddIdentityModules(this WebApplicationBuilder builder)
{
builder.Services.AddScoped();
+ builder.AddMinimalEndpoints(assemblies: typeof(IdentityRoot).Assembly);
+ builder.Services.AddValidatorsFromAssembly(typeof(IdentityRoot).Assembly);
+ builder.Services.AddCustomMapster(typeof(IdentityRoot).Assembly);
builder.AddCustomDbContext(nameof(Identity));
builder.Services.AddScoped();
builder.AddCustomIdentityServer();
diff --git a/2-modular-monolith-architecture-style/src/Modules/Identity/src/Extensions/Infrastructure/MediatRExtensions.cs b/2-modular-monolith-architecture-style/src/Modules/Identity/src/Extensions/Infrastructure/MediatRExtensions.cs
index 1e5145c..a43a3d4 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Identity/src/Extensions/Infrastructure/MediatRExtensions.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Identity/src/Extensions/Infrastructure/MediatRExtensions.cs
@@ -16,7 +16,7 @@ public static class MediatRExtensions
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(typeof(IdentityRoot).Assembly));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(LoggingBehavior<,>));
- // services.AddScoped(typeof(IPipelineBehavior<,>), typeof(EfTxIdentityBehavior<,>));
+ services.AddScoped(typeof(IPipelineBehavior<,>), typeof(EfTxIdentityBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(CachingBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(InvalidateCachingBehavior<,>));
diff --git a/2-modular-monolith-architecture-style/src/Modules/Identity/src/Identity/Constants/Constants.cs b/2-modular-monolith-architecture-style/src/Modules/Identity/src/Identity/Constants/Constants.cs
index d87e053..35f89a5 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Identity/src/Identity/Constants/Constants.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Identity/src/Identity/Constants/Constants.cs
@@ -15,5 +15,6 @@ public static class Constants
public const string PassengerApi = "passenger-api";
public const string BookingApi = "booking-api";
public const string IdentityApi = "identity-api";
+ public const string BookingModularMonolith = "booking-modular-monolith";
}
}
diff --git a/2-modular-monolith-architecture-style/src/Modules/Identity/src/Identity/Features/RegisteringNewUser/V1/RegisterNewUser.cs b/2-modular-monolith-architecture-style/src/Modules/Identity/src/Identity/Features/RegisteringNewUser/V1/RegisterNewUser.cs
index 0e95a69..ead4de7 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Identity/src/Identity/Features/RegisteringNewUser/V1/RegisterNewUser.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Identity/src/Identity/Features/RegisteringNewUser/V1/RegisterNewUser.cs
@@ -9,7 +9,6 @@ using BuildingBlocks.Contracts.EventBus.Messages;
using BuildingBlocks.Core;
using BuildingBlocks.Core.CQRS;
using BuildingBlocks.Web;
-using Duende.IdentityServer.EntityFramework.Entities;
using Exceptions;
using FluentValidation;
using Mapster;
@@ -48,7 +47,7 @@ public class RegisterNewUserEndpoint : IMinimalEndpoint
return Results.Ok(response);
})
- // .RequireAuthorization()
+ .RequireAuthorization()
.WithName("RegisterUser")
.WithApiVersionSet(builder.NewApiVersionSet("Identity").Build())
.Produces()
diff --git a/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Extensions/Infrastructure/InfrastructureExtensions.cs b/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Extensions/Infrastructure/InfrastructureExtensions.cs
index 611b3e1..f4ed2a4 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Extensions/Infrastructure/InfrastructureExtensions.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Extensions/Infrastructure/InfrastructureExtensions.cs
@@ -1,6 +1,9 @@
using BuildingBlocks.Core;
using BuildingBlocks.EFCore;
+using BuildingBlocks.Mapster;
using BuildingBlocks.Mongo;
+using BuildingBlocks.Web;
+using FluentValidation;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Passenger.Data;
@@ -13,6 +16,9 @@ public static class InfrastructureExtensions
public static WebApplicationBuilder AddPassengerModules(this WebApplicationBuilder builder)
{
builder.Services.AddScoped();
+ builder.AddMinimalEndpoints(assemblies: typeof(PassengerRoot).Assembly);
+ builder.Services.AddValidatorsFromAssembly(typeof(PassengerRoot).Assembly);
+ builder.Services.AddCustomMapster(typeof(PassengerRoot).Assembly);
builder.AddCustomDbContext(nameof(Passenger));
builder.AddMongoDbContext();
diff --git a/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Extensions/Infrastructure/MediatRExtensions.cs b/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Extensions/Infrastructure/MediatRExtensions.cs
index ad6bf1c..e39a970 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Extensions/Infrastructure/MediatRExtensions.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Extensions/Infrastructure/MediatRExtensions.cs
@@ -14,7 +14,7 @@ public static class MediatRExtensions
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(typeof(PassengerRoot).Assembly));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(LoggingBehavior<,>));
- // services.AddScoped(typeof(IPipelineBehavior<,>), typeof(EfTxPassengerBehavior<,>));
+ services.AddScoped(typeof(IPipelineBehavior<,>), typeof(EfTxPassengerBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(CachingBehavior<,>));
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(InvalidateCachingBehavior<,>));
diff --git a/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassenger.cs b/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassenger.cs
index 5860071..1066b32 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassenger.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Passengers/Features/CompletingRegisterPassenger/V1/CompleteRegisterPassenger.cs
@@ -51,7 +51,7 @@ public class CompleteRegisterPassengerEndpoint : IMinimalEndpoint
return Results.Ok(response);
})
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("CompleteRegisterPassenger")
.WithApiVersionSet(builder.NewApiVersionSet("Passenger").Build())
.Produces()
diff --git a/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Passengers/Features/GettingPassengerById/V1/GetPassengerById.cs b/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Passengers/Features/GettingPassengerById/V1/GetPassengerById.cs
index 2b36d5f..e30bcda 100644
--- a/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Passengers/Features/GettingPassengerById/V1/GetPassengerById.cs
+++ b/2-modular-monolith-architecture-style/src/Modules/Passenger/src/Passengers/Features/GettingPassengerById/V1/GetPassengerById.cs
@@ -36,7 +36,7 @@ public class GetPassengerByIdEndpoint : IMinimalEndpoint
return Results.Ok(response);
})
- .RequireAuthorization(nameof(ApiScope))
+ .RequireAuthorization()
.WithName("GetPassengerById")
.WithApiVersionSet(builder.NewApiVersionSet("Passenger").Build())
.Produces()
diff --git a/3-microservices-architecture-style/assets/booking-microservices.drawio b/3-microservices-architecture-style/assets/booking-microservices.drawio
index 3c64261..e764edb 100644
--- a/3-microservices-architecture-style/assets/booking-microservices.drawio
+++ b/3-microservices-architecture-style/assets/booking-microservices.drawio
@@ -1,6 +1,6 @@
-
+
-
+
@@ -10,9 +10,6 @@
-
-
-
@@ -110,7 +107,7 @@
-
+
@@ -211,24 +208,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -477,7 +456,7 @@
-
+
diff --git a/3-microservices-architecture-style/assets/booking-microservices.png b/3-microservices-architecture-style/assets/booking-microservices.png
index 664dcee..81e60ec 100644
Binary files a/3-microservices-architecture-style/assets/booking-microservices.png and b/3-microservices-architecture-style/assets/booking-microservices.png differ
diff --git a/3-microservices-architecture-style/booking.rest b/3-microservices-architecture-style/booking.rest
index 319ae75..bac041a 100644
--- a/3-microservices-architecture-style/booking.rest
+++ b/3-microservices-architecture-style/booking.rest
@@ -45,7 +45,7 @@ authorization: bearer {{Authenticate.response.body.access_token}}
"firstName": "John",
"lastName": "Do",
"username": "admin",
- "passportNumber": "412900000000",
+ "passportNumber": "412900000",
"email": "admin@admin.com",
"password": "Admin@12345",
"confirmPassword": "Admin@12345"
diff --git a/building-blocks/Jwt/JwtExtensions.cs b/building-blocks/Jwt/JwtExtensions.cs
index e46738e..cea1529 100644
--- a/building-blocks/Jwt/JwtExtensions.cs
+++ b/building-blocks/Jwt/JwtExtensions.cs
@@ -13,33 +13,40 @@ public static class JwtExtensions
{
var jwtOptions = services.GetOptions("Jwt");
- services.AddAuthentication(o =>
- {
- o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
- o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
- })
- .AddCookie(cfg => cfg.SlidingExpiration = true)
- .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
- {
- options.Authority = jwtOptions.Authority;
- options.TokenValidationParameters = new TokenValidationParameters
+ services.AddAuthentication(
+ o =>
{
- ValidateAudience = false,
- ClockSkew = TimeSpan.FromSeconds(2) // For prevent add default value (5min) to life time token!
- };
- options.RequireHttpsMetadata = jwtOptions.RequireHttpsMetadata;
- options.MetadataAddress = jwtOptions.MetadataAddress;
- });
+ o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
+ o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
+ })
+ .AddCookie(cfg => cfg.SlidingExpiration = true)
+ .AddJwtBearer(
+ JwtBearerDefaults.AuthenticationScheme,
+ options =>
+ {
+ options.Authority = jwtOptions.Authority;
+
+ options.TokenValidationParameters = new TokenValidationParameters
+ {
+ ValidateAudience = false,
+ ClockSkew = TimeSpan.FromSeconds(2) // For prevent add default value (5min) to life time token!
+ };
+
+ options.RequireHttpsMetadata = jwtOptions.RequireHttpsMetadata;
+ options.MetadataAddress = jwtOptions.MetadataAddress;
+ });
if (!string.IsNullOrEmpty(jwtOptions.Audience))
{
- services.AddAuthorization(options =>
- options.AddPolicy(nameof(ApiScope), policy =>
- {
- policy.RequireAuthenticatedUser();
- policy.RequireClaim("scope", jwtOptions.Audience);
- })
- );
+ services.AddAuthorization(
+ options =>
+ options.AddPolicy(
+ nameof(ApiScope),
+ policy =>
+ {
+ policy.RequireAuthenticatedUser();
+ policy.RequireClaim("scope", jwtOptions.Audience);
+ }));
}
return services;