Implementar Ordering.API com Clean Architecture e CQRS:
Method | Request URI | Use Case |
---|---|---|
GET | api/v1/Order | Get Orders with username |
- Get Orders with username
- Consume basketCheckout event from RabbitMQ
- CQRS implementation with triggering OrderCommand to insert Order record
- Nenhum pacote nuget
- MediatR.Extensions.Microsoft.DependencyInjection
- FluentValidation
- FluentValidation.DependencyInjectionExtensions
- AutoMapper
- AutoMapper.Extensions.Microsoft.DependencyInjection
- Microsoft.Extensions.Logging.Abstractions
- ProjectReference - Ordering.Domain
- Microsoft.EntityFrameworkCore.SqlServer
- SendGrid
- ProjectReference - Ordering.Application
- Microsoft.EntityFrameworkCore.Tools
- ProjectReference - Ordering.Application
- ProjectReference - Ordering.Infrastructure
Menções do instrutor, duas pessoas que possuem ótimos repositórios/materiais para referência.
Adicionado novo projeto "Ordering.API" em "src/Services/Ordering" com o comando:
dotnet new webapi --exclude-launch-settings --no-https --auth None -o Ordering.API
Configurado ".vscode/launch.json" para utilizar a porta 5004
Adicionado novos projetos "Ordering.Domain", "Ordering.Application" e "Ordering.Infrastructure" em "src/Services/Ordering" com os comandos:
dotnet new classlib -o Ordering.Domain
dotnet new classlib -o Ordering.Application
dotnet new classlib -o Ordering.Infrastructure
Obs.: Devido a estar utilizando vscode com net core cli, precisei adicionar os novos projetos todas a solution com os comandos executados na pasta "src":
dotnet sln add ./Services/Ordering/Ordering.API
dotnet sln add ./Services/Ordering/Ordering.Domain
dotnet sln add ./Services/Ordering/Ordering.Application
dotnet sln add ./Services/Ordering/Ordering.Infrastructure
Adicionadas as referências entre projetos com dotnet cli, executando os seguintes comandos na pasta "src/Services/Ordering":
# Adiciona uma referência do projeto "Domain" no projeto "Application"
dotnet add ./Ordering.Application/Ordering.Application.csproj reference ./Ordering.Domain/Ordering.Domain.csproj
# Adiciona uma referência do projeto "Application" no projeto "Infrastructure"
dotnet add ./Ordering.Infrastructure/Ordering.Infrastructure.csproj reference ./Ordering.Application/Ordering.Application.csproj
# Adiciona uma referência do projeto "Application" no projeto "API"
dotnet add ./Ordering.API/Ordering.API.csproj reference ./Ordering.Application/Ordering.Application.csproj
# Adiciona uma referência do projeto "Infrastructure" no projeto "API"
dotnet add ./Ordering.API/Ordering.API.csproj reference ./Ordering.Infrastructure/Ordering.Infrastructure.csproj
Adicionados os pacotes nuget SendGrid e Microsoft.EntityFrameworkCore.SqlServer em Ordering.Infrastructure:
dotnet add package SendGrid
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Adicionados o pacote nuget Microsoft.EntityFrameworkCore.Tools em Ordering.API:
dotnet add package Microsoft.EntityFrameworkCore.Tools
O instrutor usou o comando Add-Migration InitialCreate
em Ordering.Infrastructure, porém como estou utilizando preciso adicionar a tool dotnet-ef (de preferência global, mas vou adicionar no projeto para ficar registrado em .config
) e para isso vou executar na pasta AspnetMicroservices
o comando:
dotnet tool install dotnet-ef
E agora para criar a migration vou executar em AspnetMicroservices/src/Services/Ordering/Ordering.Infrastructure
:
dotnet tool run dotnet-ef migrations add InitialCreate --startup-project '../Ordering.API/Ordering.API.csproj'
# Obs.: se a tool estivesse instalada globalmente eu poderia executar o seguinte comando (um pouco menor)
# dotnet ef migrations add InitialCreate --startup-project '../Ordering.API/Ordering.API.csproj'
Adiciona a imagem Microsoft SQL Server no docker-compose.
Para visualizar o banco o instrutor utilizou o ServerExplorer do VisualStudio, porém como estou utilizando vscode, eu utilizei a extensão SQLTools com o driver SQLTools Microsoft SQL Server/Azure.