---
# System prepended metadata

title: Untitled

---

<h1 align="center"> ChegaJá </h1>

Nessa página você encontrará as informações sobre a arquitetura de software do projeto.

* [Visão Geral](##Visão-geral)
* [Detalhamento dos módulos](##Detalhamento-dos-módulos)
* [Diagrama de implantação](##Diagrama-de-implantação)
* [Definição Tecnológica](##Definição-Tecnológica)

## Visão geral
O padrão arquitetural escolhido para a implementação do ChegaJá é o de camadas, no qual será acrescentada uma nova camada entre a camada de aplicação e a camada de negócios que é a camada implementada pelo padrão de projeto Facade.
Por tanto, a arquitetura será constituída de 4 camadas: Apresentação, Fachada, Negócios e Dados. A camada de Apresentação se comunicará com a fachada, que por sua vez se comunica com a camada de negócios, apresentando uma versão simplificada para a sua camada superior. A camada de negócios, além de se comunicar com a camada da fachada também se comunicará com a camada de dados.
Além disso, para realizar o rastreamento dos entregadores, haverá uma integração entre a camada de fachada e a API do Google Maps que irá intermediar a comunicação desta API com a camada de apresentação repassando a localização para que a camada de apresentação mostre essa informação na tela. Outro recurso externo utilizado é a Api do fireBase que se comunicará indiretamente com as camadas de apresentação e negócios passando pela camada da fachada.

<div style="text-align: center">
<img src="https://i.imgur.com/EPZO67D.png" width="50%">
</div>



## Detalhamento dos módulos 
**Camada de Apresentação**
A camada de apresentação será a responsável pelas interações do cliente com a aplicação. Esta camada está subdividida em dois módulos principais que representam os dois tipos de usuários que irão interagir com a aplicação:A Empresa e o Entregador.
<div style="text-align: center">
<img src="https://i.imgur.com/26EPdjL.png" width="70%">
</div>



**Camada de Fachada**
A camada fachada implementada pelo padrão de projeto **Facade** intermediará as requisições das API's(camada de negócio e Plataforma Google Maps) para a camada de apresentação, desse modo ela disponibilizará uma interface simples com o conjunto de funcionalides específicas para cada tipo de usuário do **ChegaJá** (Empresa, Entregador).

**Camada de Negócio**
Esta camada conterá uma REST API que será responsável por promover a comunicação entre as camadas do lado do cliente(Apresentação e Fachada) com a camada de dados. E para representação externa de dados será utilizado o formato JSON.

**Camada de Dados**
A camada de dados compreende a tecnologia de banco de dados reponsável por armazenar e gerenciar os dados relacionados a empresas, entregadores, entregas, etc.


## Diagrama de implantação 
A implantação do projeto é dividida em três partes (**Cliente**, **API** e **Banco de Dados**), como podemos ver na imagem abaixo:

<div style="text-align: center">
<img src="https://i.imgur.com/Dv0MCcp.png" width="70%">
</div>
    
A aplicação mobile do Cliente deverá se comunicar com a API do sistema, através de requisições realizadas, com o protocolo HTTP (*Hypertext Transfer Protocol*) e o protocolo de internet TCP IP.

Nas requisições HTTP, usam-se os HTTP Verbs (ou verbos HTTP). Esses verbos são *GET*, *POST*, *PUT*, *DELETE*. A tabela abaixo especifica o que cada tipo de requisição significa:


<div style="width: 50% !important;margin: auto;">
    
| Requisição | Descrição                                                   |
|------------|-------------------------------------------------------------|
| GET        | Solicita determinado recurso. Retorna dados para o cliente. |
| POST       | Envia determinado recurso ou dado para a API.               |
| PUT        | Substitui determinado recurso.                              |
| DELETE     | Apaga um recurso ou dado.                                   |

</div>


A API, ao receber essas requisições, deve se comunicar com o banco de dados, intermediando a interação entre Cliente e Base de Dados, realizando as operações desejadas.

## Definição Tecnológica
Nossa proposta é desenvolver uma aplicação que funcione no ambiente de dispositivos móveis, tanto no sistema Android como no sistema iOS, pela praticidade que estes dispositivos oferecem tanto para o entregador quanto para a empresa. 

Para tanto decidimos utilizar o framework Flutter, que utiliza a linguagem Dart, que nos possibilita a construção de aplicativos híbridos (que funcionam nas duas principais plataformas mobile) utilizando apenas uma base de código.

Junto a isso teremos uma API que cuidará de toda a regra de negócio e nos servirá os dados que precisaremos no aplicativo por meio de uma RESTFull API. Esta será construída por meio do framework Spring, que utiliza a linguagem Java. A utilização deste framework nos auxiliará no desenvolvimento por conter muitos padrões pré-definidos que nos trarão agilidade e produtividade, aliados a robustez e confiabilidade. (biblioteca de testes??)

Quanto ao banco de dados, decidimos utilizar o PostgreSQL que ficará instalado no servidor web junto com a API. Novamente sua escolha se justifica por ser um serviço de banco de dados amplamente utilizado em aplicações pelo mundo, de fácil utilização, implantação e escalabilidade de base de dados relacionais.

Abaixo temos um resumo geral dos frameworks e linguagens utilizados:

<div style="width: 50% !important;margin: auto;">
    
|                | Tecnologia | Linguagem |
| -------------- |:----------:|:---------:|
| Cliente        |  Flutter   |   Dart    |
| API            |   Spring   |   Java    |
| Banco de Dados | PostgreSQL |    SQL    |
    
</div>


Além disso, usaremos outros recursos de desenvolvimento:


<div style="width: 50% !important;margin: auto;">

|                            |    Recurso   |
|----------------------------|:------------:|
| Edição de código Flutter   |    VSCode    |
| Controle de versão         | Git e Github |
|Edição de código Spring     |Inteliji      |
|Implantação de API     |Heroku      |

</div>
    
## Resumo

Resumindo os tópicos mais importantes da arquitetura do projeto ChegaJá, temos:

- Arquitetura de Camadas: Apresentação (Cliente), Fachada, Negócios e Dados;
- Uso de dois padrões de projetos: Facade e Chain of Responsibility;
- Uso das tecnologias Flutter, PostgreeAQL e Spring;
- Implantações no Heroku.
