| ... | @@ -14,59 +14,62 @@ Esta seção irá abordar a arquitetura selecionada para o Backend e Frontend, a | 
... | @@ -14,59 +14,62 @@ Esta seção irá abordar a arquitetura selecionada para o Backend e Frontend, a | 
| 
 | 
  - [Sumário](#sumário)
 | 
 | 
  - [Sumário](#sumário)
 | 
| 
 | 
  - [Arquitetura Geral da Aplicação](#arquitetura-geral-da-aplicação)
 | 
 | 
  - [Arquitetura Geral da Aplicação](#arquitetura-geral-da-aplicação)
 | 
| 
 | 
  - [Deploy](#deploy)
 | 
 | 
  - [Deploy](#deploy)
 | 
| 
 | 
    - [Recipes API](#recipes-api)
 | 
 | 
 | 
| 
 | 
    - [Diagrama de Deploy](#diagrama-de-deploy)
 | 
 | 
    - [Diagrama de Deploy](#diagrama-de-deploy)
 | 
| 
 | 
  - [Backend](#backend)
 | 
 | 
  - [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)
 | 
 | 
  - [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
 | 
 | 
## Arquitetura Geral da Aplicação
 | 
 | 
 | 
 | 
O projeto está dividido em duas grandes partes:
 | 
 | 
 | 
 | 
<ul>
 | 
 | 
 | 
 | 
  <li><b>Backend: </b>aplicação SpringBoot que contém os serviços que espelham as regras de negócio</li>
 | 
 | 
 | 
 | 
  <li><b>Frontend: </b>aplicação React com Typescript que representa a interface de usuário.</li>
 | 
 | 
 | 
 | 
</ul>
 | 
 | 
 | 
 | 
 | 
| 
 | 

 | 
 | 

 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
## Deploy
 | 
 | 
## Deploy
 | 
 | 
 | 
 | 
Para realizar o deploy do backend é feita primeiramente uma conexão ssh na instância do EC2. Após isso, obtemos a versão mais recente do código fonte do projeto e rodamos o docker-compose para buildar a imagem e rodar a aplicação em um container dokcer.
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
### Recipes API
 | 
 | 
O deploy do frontend é feito pelo console da AWS no serviço do S3. Realizamos o build da aplicação e jogamos a pasta gerada dentro do bucket que hospeda o site estático.
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
TBD
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
### Diagrama de Deploy
 | 
 | 
### Diagrama de Deploy
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 

 | 
 | 

 | 
 | 
 | 
 | 
#### DEV-OPS
 | 
 | 
 | 
 | 
<ul>
 | 
 | 
 | 
 | 
  <li><b>Docker: </b> Utilizado para criar uma imagem docker do sistema a fim de ser utilizada para rodar o sistema dentro de uma máquina da amazon.</li>
 | 
 | 
 | 
 | 
  <li><b>S3: </b> O serviço S3 da amazon foi utilizado para hospedar o frontend em forma de site estático dentro de um bucket.</li>
 | 
 | 
 | 
 | 
  <li><b>EC2: </b> Foi utilizada uma instância do EC2 de um C4-large para rodar o backend em uma imagem docker.</li>
 | 
 | 
 | 
 | 
  <li><b>Router 53: </b> Serviço da Amazon utilizado para redirecionar DNS para a aplicação no CloudFront.</li>
 | 
 | 
 | 
 | 
  <li><b>ACM: </b> Utilizado para geração do certificado digital para que pudesse ser utilizado o contexto HTTPS.</li>
 | 
 | 
 | 
 | 
  <li><b>Cloud Front: </b> Foi utilizado para vincular o certificado ao DNS, pois não tinha como fazer isso direto no bucket.</li>
 | 
 | 
 | 
 | 
</ul>
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
## Backend
 | 
 | 
## Backend
 | 
| 
 | 
 | 
 | 
É uma RESTful API construída utilizando Spring, que é um dos frameworks Java mais populares do mercado. Roda em uma instância na Amazon EC2. Para documentação e teste dos endpoints da aplicação, foi utilizada uma linguagem de descrição de interface, chamada Swagger, utilizando JSON. Referente a estrutura, utilizamos o Layers Pattern(padrão camadas), para decompor o sistema.
 | 
| 
 | 
<h3 id="back-end-def-tec">Definições de Tecnologias</h3>
 | 
 | 
Foi seguido o padrão de Component Based Architecture (Arquitetura Baseada em Componentes). A organização foi pensada a partir do conceito de web components, onde cada "parte" da tela é um componente independente, customizável e que pode ser reutilizável em qualquer outra parte da aplicação. 
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
TBD
 | 
 | 
<ul>
 | 
| 
 | 
 | 
 | 
  <li><b>config: </b>contém as configurações de cors e do Swagger.</li>
 | 
| 
 | 
<h3 id="back-end-mods-sis">Módulos do Sistema</h3>
 | 
 | 
  <li><b>controller: </b>é o ponto de entrada do backend, onde ficam definidos os endpoints da aplicação.</li>
 | 
| 
 | 
 | 
 | 
  <li><b>domain: </b>camada que contém entidades que espelham o banco de dados.</li>
 | 
| 
 | 
TBD
 | 
 | 
  <li><b>dto: </b>possui os objetos utilizados para transportar dados entre as camadas.</li>
 | 
| 
 | 
 | 
 | 
  <li><b>enums: </b>possui as enumerações utilizadas nos dtos ou entidades.</li>
 | 
| 
 | 
### Diagrama de Fluxo
 | 
 | 
  <li><b>message: </b>centraliza todas as mensagens que são devolvidas para o frontend.</li>
 | 
| 
 | 
 | 
 | 
  <li><b>repository: </b>é responsável por fazer toda comunicação com o banco de dados.</li>
 | 
| 
 | 
TBD
 | 
 | 
  <li><b>security: </b>define configurações de acesso aos endpoints e controla login e autenticação de usuários cadastrados.</li>
 | 
 | 
 | 
 | 
  <li><b>service: </b>camada que contém as regras de negócio.</li>
 | 
 | 
 | 
 | 
  <li><b>util: </b>possui classes que tem métodos que são utilizados em diversas services, como por exemplo o Validations.java que contém validações de campos de um objeto. Nessa camada também ficam as exceptions personalizadas e os handlers dessas exceptions.</li>
 | 
 | 
 | 
 | 
</ul>
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
## Frontend
 | 
 | 
## Frontend
 | 
 | 
 | 
 | 
Uma Progressive Web Application, ou seja, uma aplicação web que pode ser instalada utilizando a tecnologia Service Worker, presente nos principais navegadores web do mundo. Desenvolvido em React com linguagem Typescript e é armazenado na Amazon S3. Para estrutura, utilizamos uma espécie de padrão camadas, onde temos algumas camadas.
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
<ul>
 | 
 | 
 | 
 | 
  <li><b>assets: </b>é nesta camada que fica todo o conteúdo estático da nossa aplicação, como imagens e logos.</li>
 | 
 | 
 | 
 | 
  <li><b>components: </b>aqui ficam todos os fragmentos de tela que são reutilizados em mais de uma página.</li>
 | 
 | 
 | 
 | 
  <li><b>model: </b>nesta camada ficam definidas classes que espelham os objetos de request e de response do backend.</li>
 | 
 | 
 | 
 | 
  <li><b>pages: </b>contém as páginas da aplicação. Uma página normalmente é composta por diversos componentes.</li>
 | 
 | 
 | 
 | 
  <li><b>services: </b>contém as funções responsáveis por fazer a comunicação com o backend.</li>
 | 
 | 
 | 
 | 
  <li><b>styles: </b>contém os estilos gerais da aplicação.</li>
 | 
 | 
 | 
 | 
  <li><b>utils: </b>possui abstrações de funções que são reutilizadas em diversos componentes ou páginas.</li>
 | 
 | 
 | 
 | 
</ul>
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
<h3 id="front-end-def-tec">Definições de Tecnologias</h3>
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
TBD
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
<h3 id="front-end-mods-sis">Módulos do Sistema</h3>
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
TBD
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
### Diagramas de Componentes
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
TBD
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
### Diagrama do Sistema
 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
| 
 | 
TBD | 
 | 
 |