... | ... | @@ -7,52 +7,141 @@ |
|
|
|
|
|
Esta seção irá abordar a arquitetura selecionada para o Backend e Frontend, além dos dados relativos ao deploy.
|
|
|
|
|
|
## Sumário
|
|
|
|
|
|
- [Arquitetura do Sistema](#arquitetura-do-sistema)
|
|
|
- [Descrição](#descrição)
|
|
|
- [Sumário](#sumário)
|
|
|
- [Arquitetura Geral da Aplicação](#arquitetura-geral-da-aplicação)
|
|
|
- [Deploy](#deploy)
|
|
|
- [Recipes API](#recipes-api)
|
|
|
- [Diagrama de Deploy](#diagrama-de-deploy)
|
|
|
- [Backend](#backend)
|
|
|
- [Definições de Tecnologias](#back-end-def-tec)
|
|
|
- [Módulos do Sistema](#back-end-mods-sis)
|
|
|
- [Diagrama de Fluxo](#diagrama-de-fluxo)
|
|
|
- [Frontend](#frontend)
|
|
|
- [Definições de Tecnologias](#front-end-def-tec)
|
|
|
- [Módulos do Sistema](#front-end-mods-sis)
|
|
|
- [Diagramas de Componentes](#diagramas-de-componentes)
|
|
|
- [Diagrama do Sistema](#diagrama-do-sistema)
|
|
|
|
|
|
## Arquitetura Geral da Aplicação
|
|
|
# Sumário
|
|
|
[Descrição](#descrição)
|
|
|
- [Tecnologias](#Tecnologias)
|
|
|
- [Spring Boot](#spring-boot-backend)
|
|
|
- [ReactJs](#React.js-frontend)
|
|
|
- [Firebase](#firebase-authentication-autenticação)
|
|
|
- [GitLab](#gitlab-integração-contínua)
|
|
|
- [Docker](#docker-conteinerização)
|
|
|
- [Comunicação entre as tecnologias utilizadas](#comunicação-entre-as-tecnologias-utilizadas)
|
|
|
- [Modelo Arquitetural](#modelo-arquitetural-rest)
|
|
|
- [Definições do modelo](#definições-do-modelo-arquitetural-rest)
|
|
|
- [Fluxograma](#-em-alto-nível-de-chamadas-de-uma-api-rest)
|
|
|
- [Estrutura de Arquivos do Backend](#estrutura-de-arquivos-do-backend)
|
|
|
- [Estrutura de Arquivos do Frontend](#estrutura-de-arquivos-do-frontend)
|
|
|
- [Diagrama comunicação entre pacotes](#diagrama-comunicação-pacotes)
|
|
|
- [Diagrama de deploy](#diagrama-de-deploy)
|
|
|
|
|
|
TBD
|
|
|
# Tecnologias
|
|
|
|
|
|
## Deploy
|
|
|
<div align="center">
|
|
|
<img src="uploads/tec.png" width="1500">
|
|
|
</div>
|
|
|
|
|
|
### Recipes API
|
|
|
### Spring Boot (Backend)
|
|
|
|
|
|
TBD
|
|
|
Spring Boot é uma microestrutura de código aberto mantida por uma empresa chamada Pivotal. Ele fornece aos desenvolvedores Java uma plataforma para começar a usar um aplicativo Spring de nível de produção configurável automaticamente. Com ele, os desenvolvedores podem começar rapidamente sem perder tempo na preparação e configuração de seu aplicativo Spring. No contexto do projeto _Amparo_ foi escolhido como a tecnologia a ser usada para o desenvolvimento do backend.
|
|
|
|
|
|
### Diagrama de Deploy
|
|
|
|
|
|
TBD
|
|
|
### PostgreSQL (Banco de Dados)
|
|
|
|
|
|
## Backend
|
|
|
O PostgreSQL é um sistema de banco de dados relacional orientado a objetos poderoso e de código aberto, com mais de 30 anos de desenvolvimento ativo, que tem uma alta confiabilidade, robustez de recursos e desempenho. No contexto do projeto _Amparo_ é a tecnologia escolhida para o banco de dados da aplicação.
|
|
|
|
|
|
<h3 id="back-end-def-tec">Definições de Tecnologias</h3>
|
|
|
|
|
|
TBD
|
|
|
### Docker (Conteinerização)
|
|
|
|
|
|
<h3 id="back-end-mods-sis">Módulos do Sistema</h3>
|
|
|
Docker é um conjunto de produtos de plataforma como serviço (PaaS) que usam virtualização de nível de sistema operacional para entregar software em pacotes chamados contêineres. No contexto do projeto _Amparo_ foi escolhido é ferramenta de conteinerização do artefatos que irão ser executados em maquinas EC2 no AWS.
|
|
|
|
|
|
TBD
|
|
|
### React.js (Frontend)
|
|
|
|
|
|
### Diagrama de Fluxo
|
|
|
O React (também denominado React.js ou ReactJS) é uma biblioteca front-end JavaScript de código aberto com foco em criar interfaces de usuário em páginas web. No contexto do projeto _Amparo_ foi escolhido como a tecnologia a ser usada para o desenvolvimento do frontend.
|
|
|
|
|
|
### GitLab
|
|
|
O GitLab é um gerenciador de repositório de software baseado em git, com suporte a Wiki, gerenciamento de tarefas e CI/CD. GitLab é similar ao GitHub, mas o GitLab permite que os desenvolvedores armazenem o código em seus próprios servidores, ao invés de servidores de terceiros.
|
|
|
|
|
|
|
|
|
## Comunicação entre as tecnologias utilizadas
|
|
|
|
|
|
<div align="center">
|
|
|
<img src="uploads/comuni[.png" width="1500">
|
|
|
</div>
|
|
|
|
|
|
# Modelo Arquitetural REST
|
|
|
|
|
|
Para o escopo deste projeto foi desenvolvido uma API REST. REST API é uma interface de programação de aplicativo (API ou API da web) que está em conformidade com as restrições do estilo de arquitetura REST e permite a interação com serviços da web, REST significa transferência de estado representacional. A aplicação em React serve como nosso cliente rest, responsavél por lidar com a requisições a serviço REST. O Serviço REST é a api desenvolvida com o Spring Boot onde são definidos os endpoints para a realização das requisições pelo cliente.
|
|
|
|
|
|
## Definições do Modelo Arquitetural REST
|
|
|
|
|
|
* Arquitetura cliente-servidor: A interface do usuário do site / aplicativo deve ser separada da solicitação / armazenamento de dados, para que cada parte possa ser dimensionada individualmente.
|
|
|
|
|
|
* Statelessness: a comunicação deve ter no contexto do cliente armazenado no servidor. Isso significa que cada solicitação ao servidor deve ser feita com todos os dados necessários e nenhuma suposição deve ser feita se o servidor possui dados de solicitações anteriores.
|
|
|
|
|
|
* Sistema em camadas: o cliente não deve saber se está se comunicando diretamente com o servidor ou com algum intermediário. Esses servidores intermediários (sejam proxy ou balanceadores de carga) permitem escalabilidade e segurança do servidor subjacente.
|
|
|
|
|
|
## Fluxograma em alto nível de chamadas de uma API REST
|
|
|
|
|
|
<div align="center">
|
|
|
<img src="uploads/arquitetura.png" width="1500">
|
|
|
</div>
|
|
|
|
|
|
|
|
|
# Estrutura de Arquivos do Backend
|
|
|
|
|
|
# Estrutura de Arquivos do Backend
|
|
|
|
|
|
```
|
|
|
alpha-backend/
|
|
|
└── src/
|
|
|
├── main/
|
|
|
│ ├── java/
|
|
|
│ │ └── br.com.alpha.api/
|
|
|
│ │ ├── api/
|
|
|
│ │ │ ├── controller/
|
|
|
│ │ │ │ └── ExampleController.ja
|
|
|
│ │ │ └── ExampleApi.java
|
|
|
│ │ ├── config/
|
|
|
│ │ │ └── ExampleConfig.java
|
|
|
│ │ ├── dto/
|
|
|
│ │ │ └── ExampleDto.java
|
|
|
│ │ ├── exception/
|
|
|
│ │ │ └── ExampleException.java
|
|
|
│ │ ├── handler/
|
|
|
│ │ │ └── ExampleHandler.java
|
|
|
│ │ ├── mapper/
|
|
|
│ │ │ └── ExampleMapper.java
|
|
|
│ │ ├── model/
|
|
|
│ │ │ ├── entity/
|
|
|
│ │ │ │ └── ExampleEntity.ja
|
|
|
│ │ │ └── enumeration/
|
|
|
│ │ │ └── enum.java
|
|
|
│ │ ├── repository/
|
|
|
│ │ │ └── ExampleRepository.java
|
|
|
│ │ ├── service/
|
|
|
│ │ │ ├── ExampleService.java
|
|
|
│ │ │ └── impl/
|
|
|
│ │ │ └── ExampleServiceImpl.java
|
|
|
│ │ ├── validator/
|
|
|
│ │ │ ├── ExampleValidator.java
|
|
|
│ │ │ └──
|
|
|
│ └── resources
|
|
|
│ └── application.yml
|
|
|
└── test/
|
|
|
```
|
|
|
|
|
|
### Explicativo dos diretórios do backend
|
|
|
|
|
|
**web**: Impelementação dos endpoints da aplicação, no direitorio _controller_ estão os contratos do endpoints que possuem as anotações do swagger para documentação da api no código.
|
|
|
|
|
|
**config**: Arquivos anotados com anotação @Configuration, para indicar as classes que serão usadas para configurações e definições de beans.
|
|
|
|
|
|
**dto**: Classes java para comunicação rest entre a backend e o front, com a finalidade de não expor as classes de domínios.
|
|
|
|
|
|
**exception**: Classes customizadas para lançamento de exceção.
|
|
|
|
|
|
**handler**: Classe responsável por lidar e formatar as exceções lançadas no backened para melhor entendimento do erro no frontend.
|
|
|
|
|
|
**model**: Classes que descrevem o nosso modelo de domínio, sendo a representação visual de classes conceituais ou objetos do mundo real em um domínio de interesse, também representam as entidades da modelagem do banco de dados.
|
|
|
|
|
|
**Repository**: Interface JPA para comunicação com o banco de dados.
|
|
|
|
|
|
**service**: Classes responsáveis pela lógica de negócio.
|
|
|
|
|
|
**validator**: Classes com o intuito de validar os dados das requisições que vem do cliente.
|
|
|
|
|
|
**resources**: Recursos e configurações de propriedades da aplicação.
|
|
|
|
|
|
TBD
|
|
|
|
|
|
## Frontend
|
|
|
|
... | ... | @@ -71,3 +160,7 @@ TBD |
|
|
### Diagrama do Sistema
|
|
|
|
|
|
TBD
|
|
|
### Diagrama de Deploy
|
|
|
<div align="center">
|
|
|
<img src="uploads/diagramadeploy.png" width="1500">
|
|
|
</div> |
|
|
\ No newline at end of file |