Pular para conteúdo

Inicialização

Nosso aplicativo de referência será construído a partir do template Aplicação de Serviços Web do framework ABP. Documentos e detalhes sobre a utilização do inicializador de projetos do ABP podem ser conferidas na documentação do site oficial ⧉.

Uma visão geral dos componentes da aplicação pode ser vista na ilustração abaixo:

alt text

Este framework tem uma extensa documentação e é completamente funcional na versão community. Para os interesses desta aplicação, o utilitário de linha de comando é suficiente.

A versão de referência para este código pode ser obtida no git da Magna, no endereço POC Índices dotnet ⧉.

O utilitário pode ser instalado, caso não esteja ainda, através de linha de comando, da seguinte forma:

dotnet tool install -g Volo.Abp.Cli

Esta aplicação contará com as seguintes características:

  • Uma WebAPI sem front-end.
  • API REST baseado em OpenAPI
  • Entity framework como mecanismo de mapeamento objeto relacional.

Então, o comando de inicialização será o seguinte:

 abp new Magna.IndicePmo -t module --no-ui -d ef --dbms mysql --output-folder magna-indicepmo

Examinando a parametrização:

  • new: É o comando para criação de uma nova solução.
  • Magna.IndicePmo: é o nome da nossa solução
  • -t ou --template: Especifica o tipo de template utilizado. Nosso caso será module.
  • --no-ui: Especifica o tipo de interface visual. Nosso caso será nenhuma, portanto none.
  • -d ou --database-provider: Especifica o mecanismo de alto nível para acesso a banco de dados. Nosso caso será ef para utilizarmos o Entity Framework ⧉.
  • --dbms: Utilizaremos o MySQL, versão 8 ⧉.
  • --output-folder: Subdiretório magna-indicepmo.
  • --version: Versão do template de geração e da ferramenta. Utilizaremos a versão 8.0.2 ⧉

!!!Warning "Diretório de criação do projeto" Se a opção O comando --output-folder não for especificada, o utilitário criará a estrutura de projetos e o arquivo de solution no subdiretório aspnet-core.

Ao final da execução, teremos o diretório magna-indicepmo e alguns subdiretórios, conforme é possível ver na figura abaixo:

  • O subdiretório database contém comandos para inicialização de toda a solução compilada e os scripts de migração SQL embarcados em um container docker.
  • O subdiretório host contém projetos que serão os "executáveis" de nossa solução.
  • O subdiretório src contém os subdiretórios organizados de acordo com a finalidade.
  • O subdiretório test contém projetos pré-configurados para execução de testes do código recém-gerado.

Customização dos projetos gerados pelo template

O ABP gera muitos módulos e artefatos que, para os objetivos dessa POC, podem ser removidos. Sugere-se ao leitor mais atento o estudo de cada um deles e a compreensão de sua utilidade. Em particular, sugere-se o estudo do servidor de Autenticação. No diretório magna-indicepmo, encontramos o arquivo Magna.IndicePmo.sln. Este arquivo é o organizador de todos os projetos e podemos abri-lo no Visual Studio.

Solução gerada pelo ABP CLI

Desta versão removeremos:

  • Servidor de autenticação e dependências do MongoDB
  • Referências ao servidor de autenticação
  • Localization

Deixaremos comentado, para eventual interesse do leitor:

  • DataProtection e dependências de cache distribuído
  • CORS
  • Uso de auditoria
  • Redirecionamento para https

Migração e dataseeding

A sincronização de banco de dados e inclusão de informações de inicialização será criada num aplicativo separado. Isso é relevante para segregarmos sincronização do banco de dados da inicialização da aplicação como um todo.

Para isso criaremos um aplicativo utilitário do tipo console denominado Magna.IndicePmo.SincronizadorBd. Como será um aplicativo executável, também esse aplicativo deve ser criado no diretório hosts da aplicação.

É necessário configurar o DbContext e definir os serviços que executarão a migração e o dataseeding. O roteiro principal do Sincronizador será executado SincronizadorBdService que orquestrará tanto a execução das tarefas de migration do Entity Framework, quanto o roteiro de preenchimento inicial de dados.

Em seguida, é necessário configurar o funcionamento do aplicativo como um todo. A classe SincronizadorBdHostedService configurar o sincronizador para ser executado tanto como um aplicativo de linha de comando (console) quanto como um serviço hospedado (IHostedService).

Nesta etapa o aplicativo é apenas um conjunto de contratos! Mais adiante será de grande utilidade para o andamento das nossas tarefas.

Sincronizador BD - inicial

Para completar a inicialização do utilitário de sincronização de banco de dados é necessário inicializar a base de dados.

Inicialização do banco de dados

Sugere-se a criação manual do banco de dados MySql. Isso pode ser feito através de aplicativo apropriado. Neste documento utilizamos o dbeaver - versão community ⧉.

Não entraremos em detalhes sobre a criação do banco de dados, volumetria, backups, encodings ou refinamento de privilégios.

É suficiente apenas, a partir de um servidor MySQL, versão 8 ou superior:

  CREATE DATABASE `magna_igm_dotnet` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;

A criação de usuário habilitado para gerenciar este banco de dados:

  CREATE USER 'adminIndicesPmo'@'%' IDENTIFIED WITH authentication_plugin BY 'adm1n!Indic35PmO';

E a atribuição de permissões administrativas sobre banco de dados:

  GRANT ALL PRIVILEGES ON magna_igm_dotnet.* TO 'adminIndicesPmo'@'%';

Se tudo funcionou corretamente, uma nova base de dados será criada.

Criação base de dados **magna_igm_dotnet**

Configuração e execução da migration de inicialização

É necessário incluir as configurações recém-criadas na connection string do utilitário de sincronização.

Configurações de conexão

Embora não haja tabelas ou classes de interesse funcional ainda, podemos criar uma primeira migração para este novo banco de dados.

É necessário abrir o terminal de comando no diretório do utilitário de sincronização. A partir do diretório raiz da solução:

  cd host\Magna.IndicePmo.SincronizadorBd

Recomenda-se verificar se o utilitário de linha de comando entity framework já está instalado. Caso não esteja, a instalação pode ser feita da seguinte forma:

  dotnet tool install --global dotnet-ef

E finalmente, para gerar a migração inicial:

  dotnet ef migrations Add Initial 

EF Core Initial Migration

Este comando:

  • Recompilará o utilitário de sincronização e as suas respectivas dependências.
  • Irá gerar um modelo dos objetos da aplicação e os armazenará em um diretório denominado Migrations

Primeira migração

Finalmente, o utilitário de migração será executado e uma primeira "versão" do esquema em banco de dados será criada.

Primeira execução sincronizador

Verificando a criação do esquema ...

Criação primeira versão esquema

A versão correspondente desta fase ⧉

Execução do host

Finalmente, podemos executar o host. O resultado esperado é apenas a inicialização da aplicação REST API, com o front-end padrão do swagger.

Tela inicial API - Swagger

Isto encerra a fase de inicialização do projeto .net!

Iniciaremos agora a fase de implementação das funcionalidades propriamente ditas.