mirror of
https://github.com/meysamhadeli/booking-microservices.git
synced 2026-04-18 01:42:10 +08:00
Merge pull request #328 from meysamhadeli/docs/update-documentation
feat: update documentation
This commit is contained in:
commit
4417096bae
@ -7,6 +7,16 @@
|
||||
- [Key Features](#key-features)
|
||||
- [When to Use](#when-to-use)
|
||||
- [Challenges](#challenges)
|
||||
- [Monolith Architecture Design](#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
|
||||
@ -28,3 +38,64 @@
|
||||
- Limited scalability (scaling requires scaling the entire application).
|
||||
- Difficult to adopt new technologies incrementally.
|
||||
|
||||
## 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` monolith app, run this command in the `root` of the project:
|
||||
```bash
|
||||
dotnet build
|
||||
```
|
||||
|
||||
> ### Run
|
||||
To `run` monolith app, run this command in the root of the `Api` folder where the `csproj` file is located:
|
||||
```bash
|
||||
dotnet run
|
||||
```
|
||||
|
||||
> ### Test
|
||||
|
||||
To `test` monolith app, 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`.
|
||||
|
||||
348
1-monolith-architecture-style/assets/booking-monolith.drawio
Normal file
348
1-monolith-architecture-style/assets/booking-monolith.drawio
Normal file
File diff suppressed because one or more lines are too long
BIN
1-monolith-architecture-style/assets/booking-monolith.png
Normal file
BIN
1-monolith-architecture-style/assets/booking-monolith.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 391 KiB |
File diff suppressed because one or more lines are too long
Binary file not shown.
|
Before Width: | Height: | Size: 541 KiB After Width: | Height: | Size: 505 KiB |
@ -6,7 +6,7 @@ namespace Booking;
|
||||
|
||||
using Booking.Features.CreatingBook.V1;
|
||||
|
||||
public sealed class EventMapper : IEventMapper
|
||||
public sealed class BookingEventMapper : IEventMapper
|
||||
{
|
||||
public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event)
|
||||
{
|
||||
@ -14,7 +14,7 @@ public static class InfrastructureExtensions
|
||||
{
|
||||
public static WebApplicationBuilder AddBookingModules(this WebApplicationBuilder builder)
|
||||
{
|
||||
builder.Services.AddScoped<IEventMapper, EventMapper>();
|
||||
builder.Services.AddScoped<IEventMapper, BookingEventMapper>();
|
||||
builder.AddMinimalEndpoints(assemblies: typeof(BookingRoot).Assembly);
|
||||
builder.Services.AddValidatorsFromAssembly(typeof(BookingRoot).Assembly);
|
||||
builder.Services.AddCustomMapster(typeof(BookingRoot).Assembly);
|
||||
|
||||
@ -17,7 +17,7 @@ public static class InfrastructureExtensions
|
||||
{
|
||||
public static WebApplicationBuilder AddFlightModules(this WebApplicationBuilder builder)
|
||||
{
|
||||
builder.Services.AddScoped<IEventMapper, EventMapper>();
|
||||
builder.Services.AddScoped<IEventMapper, FlightEventMapper>();
|
||||
builder.AddMinimalEndpoints(assemblies: typeof(FlightRoot).Assembly);
|
||||
builder.Services.AddValidatorsFromAssembly(typeof(FlightRoot).Assembly);
|
||||
builder.Services.AddCustomMapster(typeof(FlightRoot).Assembly);
|
||||
|
||||
@ -14,7 +14,7 @@ using Seats.Features.CreatingSeat.V1;
|
||||
using Seats.Features.ReservingSeat.V1;
|
||||
|
||||
// ref: https://www.ledjonbehluli.com/posts/domain_to_integration_event/
|
||||
public sealed class EventMapper : IEventMapper
|
||||
public sealed class FlightEventMapper : IEventMapper
|
||||
{
|
||||
public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event)
|
||||
{
|
||||
@ -1,5 +0,0 @@
|
||||
namespace Identity.Configurations;
|
||||
|
||||
public class IdentityRoot
|
||||
{
|
||||
}
|
||||
@ -17,7 +17,7 @@ public static class InfrastructureExtensions
|
||||
{
|
||||
public static WebApplicationBuilder AddIdentityModules(this WebApplicationBuilder builder)
|
||||
{
|
||||
builder.Services.AddScoped<IEventMapper, EventMapper>();
|
||||
builder.Services.AddScoped<IEventMapper, IdentityEventMapper>();
|
||||
builder.AddMinimalEndpoints(assemblies: typeof(IdentityRoot).Assembly);
|
||||
builder.Services.AddValidatorsFromAssembly(typeof(IdentityRoot).Assembly);
|
||||
builder.Services.AddCustomMapster(typeof(IdentityRoot).Assembly);
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
namespace Identity.Configurations;
|
||||
|
||||
using BuildingBlocks.Core;
|
||||
using BuildingBlocks.Core.Event;
|
||||
|
||||
public sealed class EventMapper : IEventMapper
|
||||
namespace Identity;
|
||||
|
||||
public sealed class IdentityEventMapper : IEventMapper
|
||||
{
|
||||
public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event)
|
||||
{
|
||||
@ -0,0 +1,5 @@
|
||||
namespace Identity;
|
||||
|
||||
public class IdentityRoot
|
||||
{
|
||||
}
|
||||
@ -15,7 +15,7 @@ public static class InfrastructureExtensions
|
||||
{
|
||||
public static WebApplicationBuilder AddPassengerModules(this WebApplicationBuilder builder)
|
||||
{
|
||||
builder.Services.AddScoped<IEventMapper, EventMapper>();
|
||||
builder.Services.AddScoped<IEventMapper, PassengerEventMapper>();
|
||||
builder.AddMinimalEndpoints(assemblies: typeof(PassengerRoot).Assembly);
|
||||
builder.Services.AddValidatorsFromAssembly(typeof(PassengerRoot).Assembly);
|
||||
builder.Services.AddCustomMapster(typeof(PassengerRoot).Assembly);
|
||||
|
||||
@ -7,7 +7,7 @@ namespace Passenger;
|
||||
using Identity.Consumers.RegisteringNewUser.V1;
|
||||
using Passengers.Features.CompletingRegisterPassenger.V1;
|
||||
|
||||
public sealed class EventMapper : IEventMapper
|
||||
public sealed class PassengerEventMapper : IEventMapper
|
||||
{
|
||||
public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event)
|
||||
{
|
||||
@ -6,7 +6,7 @@ namespace Booking;
|
||||
|
||||
using Booking.Features.CreatingBook.V1;
|
||||
|
||||
public sealed class EventMapper : IEventMapper
|
||||
public sealed class BookingEventMapper : IEventMapper
|
||||
{
|
||||
public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event)
|
||||
{
|
||||
@ -32,7 +32,7 @@ public static class InfrastructureExtensions
|
||||
var env = builder.Environment;
|
||||
|
||||
builder.Services.AddScoped<ICurrentUserProvider, CurrentUserProvider>();
|
||||
builder.Services.AddScoped<IEventMapper, EventMapper>();
|
||||
builder.Services.AddScoped<IEventMapper, BookingEventMapper>();
|
||||
builder.Services.AddScoped<IEventDispatcher, EventDispatcher>();
|
||||
|
||||
builder.Services.Configure<ApiBehaviorOptions>(options =>
|
||||
|
||||
@ -36,7 +36,7 @@ public static class InfrastructureExtensions
|
||||
var env = builder.Environment;
|
||||
|
||||
builder.Services.AddScoped<ICurrentUserProvider, CurrentUserProvider>();
|
||||
builder.Services.AddScoped<IEventMapper, EventMapper>();
|
||||
builder.Services.AddScoped<IEventMapper, FlightEventMapper>();
|
||||
|
||||
builder.Services.AddScoped<IEventDispatcher, EventDispatcher>();
|
||||
builder.Services.Configure<ApiBehaviorOptions>(options =>
|
||||
|
||||
@ -14,7 +14,7 @@ using Seats.Features.CreatingSeat.V1;
|
||||
using Seats.Features.ReservingSeat.V1;
|
||||
|
||||
// ref: https://www.ledjonbehluli.com/posts/domain_to_integration_event/
|
||||
public sealed class EventMapper : IEventMapper
|
||||
public sealed class FlightEventMapper : IEventMapper
|
||||
{
|
||||
public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event)
|
||||
{
|
||||
@ -1,4 +1,5 @@
|
||||
using BuildingBlocks.Web;
|
||||
using Identity;
|
||||
using Identity.Configurations;
|
||||
using Identity.Extensions.Infrastructure;
|
||||
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
namespace Identity.Configurations;
|
||||
|
||||
public class IdentityRoot
|
||||
{
|
||||
}
|
||||
@ -34,7 +34,7 @@ public static class InfrastructureExtensions
|
||||
var env = builder.Environment;
|
||||
|
||||
builder.Services.AddScoped<ICurrentUserProvider, CurrentUserProvider>();
|
||||
builder.Services.AddScoped<IEventMapper, EventMapper>();
|
||||
builder.Services.AddScoped<IEventMapper, IdentityEventMapper>();
|
||||
builder.Services.AddScoped<IEventDispatcher, EventDispatcher>();
|
||||
|
||||
builder.Services.Configure<ApiBehaviorOptions>(options =>
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
namespace Identity.Configurations;
|
||||
|
||||
using BuildingBlocks.Core;
|
||||
using BuildingBlocks.Core.Event;
|
||||
|
||||
public sealed class EventMapper : IEventMapper
|
||||
namespace Identity;
|
||||
|
||||
public sealed class IdentityEventMapper : IEventMapper
|
||||
{
|
||||
public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event)
|
||||
{
|
||||
@ -0,0 +1,5 @@
|
||||
namespace Identity;
|
||||
|
||||
public class IdentityRoot
|
||||
{
|
||||
}
|
||||
@ -34,7 +34,7 @@ public static class InfrastructureExtensions
|
||||
var env = builder.Environment;
|
||||
|
||||
builder.Services.AddScoped<ICurrentUserProvider, CurrentUserProvider>();
|
||||
builder.Services.AddScoped<IEventMapper, EventMapper>();
|
||||
builder.Services.AddScoped<IEventMapper, PassengerEventMapper>();
|
||||
builder.Services.AddScoped<IEventDispatcher, EventDispatcher>();
|
||||
|
||||
builder.Services.Configure<ApiBehaviorOptions>(
|
||||
|
||||
@ -7,7 +7,7 @@ namespace Passenger;
|
||||
using Identity.Consumers.RegisteringNewUser.V1;
|
||||
using Passengers.Features.CompletingRegisterPassenger.V1;
|
||||
|
||||
public sealed class EventMapper : IEventMapper
|
||||
public sealed class PassengerEventMapper : IEventMapper
|
||||
{
|
||||
public IIntegrationEvent? MapToIntegrationEvent(IDomainEvent @event)
|
||||
{
|
||||
Loading…
x
Reference in New Issue
Block a user