Documentação do negócio
Documentação técnica
\mathbb{ARQUITETURA}
Esta seção é dedicada a apresentar a arquitetura definida para o projeto.
Sendo esta dividida nas seguintes partes:
Ambos os projetos seguiram os princípios de Clean Architecture[1][2], e cada repositório possui uma arquitetura em camada que condiz com a sua finalidade. Ambos são descritos melhor nos tópicos abaixo.
⚙ Backend
Stacks definidas:
As camadas do sistema estão descritas abaixo.
Controllers
São responsáveis por prover serviços, e por conectar os demais módulos pertinentes do sistema, com a aplicação backend.
Services
Camada intermediária da aplicação, a qual define a comunicação entre Controllers e Repositories, provendo uma conversão mútua da lógica de sistema, com a lógica de negócio.
Repositories
Define as lógicas diretamente estruturadas com a troca de dados, entre a aplicação backend e o banco de dados.
Prisma
Este ficheiro define a camada de Models, a qual tem por função detalhar o formato dos dados transitados com o banco de dados. E o mesmo, é assim denominado por fazer uso do Prisma, uma biblioteca de ORM (Object Relational Mapping) que provê serviços de query para simplificar a gerência sobre o banco de dados.
Link para o Repositório: Backend
📱 Mobile
Stacks definidas:
As camadas do sistema estão descritas abaixo.
Components
Descrevem elementos visuais independentes, os quais possuem uma lógica descrita internamente, em cada componente. Também há componentes que se utilizam de outros componentes, tornando-se um componente de maior complexidade. Os componentes asseguram que o código seja desacoplado, flexível, reutilizável, e de fácil manutenção. Atualmente, é usual organizá-los em uma página para a estruturação dela.
Hooks
Assim como Components, os Hooks permitem reunir diversas lógicas para um único código, proporcionando características idênticas aos Components, ou seja, código desacoplado, flexível, reutilizável, e de fácil manutenção.
Pages
São as telas da aplicação. Onde reunimos os Components e Hooks a fim de organizar os módulos do sistema na página.
Services
É a camada responsável por dispor serviços para a aplicação. Dentre eles, estão as funcionalidades do Firebase.
Link para o Repositório: Mobile
💻 Web
Stacks definidas:
As camadas do sistema estão descritas abaixo.
Components
Descrevem elementos visuais independentes, os quais possuem uma lógica descrita internamente, em cada componente. Também há componentes que se utilizam de outros componentes, tornando-se um componente de maior complexidade. Os componentes asseguram que o código seja desacoplado, flexível, reutilizável, e de fácil manutenção. Atualmente, é usual organizá-los em uma página para a estruturação dela.
Contexts
Permite estrututrar os dados da aplicação e facilitar o uso para as demais camadas. De maneira geral, ele torna "global" o acesso aos dados,
Hooks
Assim como Components, os Hooks permitem reunir diversas lógicas para um único código, proporcionando características idênticas aos Components, ou seja, código desacoplado, flexível, reutilizável, e de fácil manutenção.
Pages
São as telas da aplicação. Onde reunimos os Components e Hooks a fim de organizar os módulos do sistema na página.
Services
É a camada responsável por dispor serviços para a aplicação. Dentre eles, estão as funcionalidades do Firebase.
Types
Descrevem as entidades da aplicação, que descrevem a lógica de negócio do sistema.
Link para o Repositório: Web
🚀 Diagrama de Deploy
O diagrama a seguir apresenta a arquitetura em alto nível e o processo de deploy da infraestrutura do projeto:
A cada nova versão gerada na branch main dos repositórios Web e Backend, os respectivos códigos serão envolvidos em um container Docker e movidos ao Gitlab Runner do qual realiza a etapa de build e direciona a aplicação executável para cada instância da AWS.
O repositório do Mobile não necessita estar em um servidor, por conta do sistema poder ser executado em um ou vários dispositivos mobiles. E devido ao framework do Expo, é possível executar o App em diversos sistemas mobiles, como iOS, Android, e também permite portá-lo em uma versão Web.
Os principais módulos do sistema vão dispor de conexões distintas entre sí, das quais sofrerão alterações mediante o andamento dos projetos.
Arquivo XML para o Diagrams.net
💸 Orçamento AWS
Essa sessão apresenta o orçamento da infraestrutura na AWS. O orçamento foi feito utilizando a ferramenta AWS Pricing Calculator e busca estimar o custo financeiro para manter a infraestrutura do projeto pelo período de 1 semestre, sendo este a duração do projeto e da disciplina da AGES.
O PDF gerado através do AWS Pricing Calculator com o orçamento para a infraestrutura do projeto pode ser encontrado nesse link: My_Estimate_-_AWS_Pricing_Calculator.pdf
A seguir serão apresentados os componentes (serviços da AWS) que irão compor a infraestrutura do projeto:
-
AWS Advance EC2 instance (t4g.nano)
-
AWS Advance EC2 instance (t2.medium)
Resumo Geral: Para manter a infraestrutura do projeto por 1 semestre, esse será o custo financeiro estimado a cada mês e ao final do semestre:
- Custo Imediato: 549.25 USD
- Custo Mensal: 3.07 USD
- Custo Semestral: 18,42 USD
Referências
[1] MARTIN, Robert. Clean Architecture: A Craftsman's Guide to Software Structure and Design. Pearson, 2017.
[2] MARTIN, Robert. The Clean Architecture. 2012. Disponível em: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html Acesso em: 24 nov. 2023.