<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.