https://youtu.be/ADU0R7Pjwzc?list=PLbq2QKd5ieAt0H551D_0E4bGIYRxbq5HL
Projeto contém
- Api Core
- Bibliotecas
- Teste do xUnit
- WebAPi: Aplicação API
- Manager: Regras de negócio
- Core: Modelo (Ainda será subdividida)
- Data: Responsável pela persistencia de dados, onde vai ficar a ORM.
- Swashbucle.AspNetCore (EM WebAPI)
https://youtu.be/v-Qc_ek-gwE?list=PLbq2QKd5ieAt0H551D_0E4bGIYRxbq5HL
- install-package Microsoft.EntityFrameworkCore (Em WebApi e Data)
- install-package Microsoft.EntityFrameworkCore.Design
- install-package Microsoft.EntityFrameworkCore.Tools
- install-package Microsoft.EntityFrameworkCore.SqlServer
- add-migration inicial (Cria as migrations)
- update-database (Executas as migrations criando a(s) tabela(s) no banco)
https://youtu.be/ADU0R7Pjwzc?list=PLbq2QKd5ieAt0H551D_0E4bGIYRxbq5HL
-
Primeiro Repository Criado: ClienteRepository.cs
- Vamos utilizar a Injeção de Dependencia que é uma ferramenta para Inversão de controle(SOLID), que serve para desacoplar as aplicações (Nada mais é que atribuir a iniciação de uma classe via construtor)
- Anotações iniciais anotadas nos métodos da classe ClienteRepository
- Devemos criar em Manager (regras/o 'contrato'): IClienteRepository
- Criação da IClienteManager : Que é responsavél por chamar o repositorio
- Criação da Clientemanager em Implementation
-
Em Program.cs: adicionar as linhas:
- builder.Services.AddScoped<IClienteRepository, ClienteRepository>();
- builder.Services.AddScoped<IClienteManager, ClienteManager>();
-
EM RESUMO:
- Criamos o Repository
- Criamos a Interface de Repository
- Apontamos O repository para manager (e criamos a Interface de manager)
- Add o escopos nos Program.cs
- utlizamos a manager em Controller
https://youtu.be/U56ly54RT-I?list=PLbq2QKd5ieAt0H551D_0E4bGIYRxbq5HL
- Implementar as tres ações em Repository
- Implementar as interfaces (IClienteRepository, IClienteManager)
- Implementar a Manager
- Implementar no Usuario Controller
-
Vamos validar os dados antes de serem inseridos na base de dados
-
Regra de negócio Validator em Manager
-
Vamos usar uma ferramenta para nos auxiliar com as validações
- Instalar o pacote na camada manager e também em API
- install-package FluentValidation.AspNetCore
- vamos criar mais campos no dmain cliente
- com a criação dos novos campos precisamos (DATA) 'add-migration adicionaCamposCliente' e 'update-database'
- Validação:
- RuleFor(RegraPara)
- Configurar a injeção de dependencia
- Adicionar no Startup(Program) o controller: .AddFluentValidation(p => p.RegisterValidatorsFromAssemblyContaining())
- Instalar o pacote na camada manager e também em API
https://youtu.be/jYTPRki83z0?list=PLbq2QKd5ieAt0H551D_0E4bGIYRxbq5HL
- Divisão de responsabilidades (Model View/DTO)
- Instalação do pacote AutoMapper no projeto
- API: install-package automapper e install-package automapper.extensions.microsoft.dependencyinjection
- MANAGER: somente... install-package automapper
- Vamos criar uma represetação do que precisamos receber do usuário que esta recebendo a API
- Na pasta 04.CL.Core Adicionar um novo projeto Class Library (.NET Standard) com o nome NovoCliente
- Essa classe será intermediária, aqui passa o que realmente a API espera receber do usuário
- No Projeto manager vamos criar a pasta appings com o arquivo NovoClienteMappingProfile
- Adicionar o serviço de automapper em Program/Startup
Devido a importancia da documentação, devemos usar todos recursos possíveis que o Swagger nos concede
- Em configurações da API
- Build/Criar:
- Gerar arquivo de documentação Xml
- Suprimir avisos específicos: 1591
- Build/Criar:
- O mesmo vai acontecer para os atributos do Cliente (NovoCliente)
- Configurar CL.Core.Shared
- Gerar o arquivo xml: CL.Core.Shared.xml dentro do projeto API
- Configurar CL.Core.Shared
- Dentro do projeto CL.WebApi
- install-package MicroElements.Swashbuckle.FluentValidation
Nossa aplicação é CodeFirst Criando e configurando a DatabaseConfig, com isso automatizamos a criação do banco (update-migration)
- Registrar logs da aplicação, instalação em WebApi: install-package Serilog.AspNetCore
- Para salvar em arquivo, vamos instalar: install-package SeriLog.Sinks.File
- Para rodar o log de modo assíncrono: install-package Serilog.Sinks.Async
- Utilizar arquivo de configuração por ambiente:
install-package Serilog.Settings.Configuration
- Registrar logs de tempo de execução:
install-package SerilogTimings
- Salvar logs no formato Json:
install-package Serilog.Formatting.Compact
- Logar as exceções com mais detalhes:
install-package Serilog.Exceptions
- AppSettings: Será gerado de foram distinta para produção e desenvolvimento, conforme configurãções feitas