Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • Wiki Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Create a new issue
  • Jobs
  • Issue Boards
Collapse sidebar
  • Pagges
  • WikiWiki
  • Wiki
  • Arquitetura

Last edited by Guilherme de Moraes Machado Pereira Silva Apr 12, 2025
Page history

Arquitetura

Home Escopo Processo Design/Mockups Configuração Arquitetura Gerência Código BD Qualidade Frontend Backend Analytics

Arquitetura

Descrição

Esta seção da documentação visa apresentar os padrões arquiteturais gerais do projeto, bem como a infraestrutura adotada.

Visando ao desenvolvimento de um aplicativo Mobile optamos por elegir o React Native como forma de criar um aplicativo para IOS e Android, consoante requisitado pelos stakeholders do projeto. A escolha baseou-se no fato de que não temos tempó suficiente para desenvolver dois aplicativos para as duas plataformas de maneira concomitante, tendo em vista que temos somente um semestre para o desenolvivmento e a curva de aprendizado para aprender tecnologias distintas para o front-end mobile é muito maior do que utilizar o React Native com Expo por exemplo.

Para o back-end optamos por NestJS e NodeJS e TypeScript como tecnologias de desenvolvimento de código, levando em consideração que o nosso front-end será também escrito em TypeScript e, logo, teremos mais facilidade no aprendizado de somente uma tecnologia para todo o desenvolvimento do projeto. Ademais, a curva de aprendizado e o custo de implementação de código têm a tendência de ser menor com a utilização destas tecnologias em relação à utilização de uma stack com Java e Spring Boot por exemplo.

Sumário

  • Arquitetura E2E
  • Arquitetura de Infraestrutura

Arquitetura E2E

O projeto Pagges adota uma arquitetura baseada no padrão Model-View-Controller (MVC), promovendo a separação clara entre a camada de apresentação, lógica de negócio e persistência de dados.

🔧 Backend

A estrutura do backend foi construída utilizando o framework NestJS, com foco em modularidade e escalabilidade. A organização de pastas está dividida da seguinte forma:

Essa estrutura permite manter a responsabilidade de cada parte bem delimitada, com fácil manutenção e escalabilidade do sistema.

🧰 Tecnologias Utilizadas


📱 Frontend

O frontend foi desenvolvido utilizando Expo com React Native e segue uma organização baseada em responsabilidades, focada em componentes reutilizáveis, separação de lógica, interface e dados:

Essa estrutura favorece a manutenção e escalabilidade do projeto conforme novas funcionalidades são incorporadas.

🧰 Tecnologias Utilizadas


Arquitetura de Infraestrutura

Diagrama_ArquiteturaPagges

Como podemos visualizar na figura supracitada iremos utilizar os serviços EC2 (t3.medium) e um repositório ECR para armazenar as imagens Docker do back-end.

Abaixo também podemos visualizar estimativa de custos criada na AWS Pricing Calculator

Pagges-Estimativa-Custo_AWS.pdf

A infraestrutura do projeto foi construída utilizando Docker para conteinerização dos serviços, AWS EC2 para hospedagem do backend e AWS ECR para versionamento e distribuição das imagens Docker.

🖥️ Serviços Utilizados

  • AWS EC2: Instância configurada para rodar os containers Docker que executam o backend, banco de dados e testes automatizados.
  • AWS ECR: Repositório de imagens Docker utilizado para armazenar e versionar builds da aplicação.
  • Docker: Ferramenta de conteinerização utilizada para empacotar a aplicação backend e suas dependências.

🔁 Fluxo de Deploy

  • Alterações na branch main disparam o pipeline do GitLab CI/CD.
  • O backend é empacotado em uma imagem Docker e enviado ao AWS ECR.
  • A nova imagem é utilizada para atualizar o container rodando na instância AWS EC2.

📋 Boas práticas no desenvolvimento

O que são códigos de status HTTP?

Sempre que uma requisição é feita a um servidor web, ele retorna um cabeçalho HTTP com um código de status, que indica o resultado da operação. Esses códigos são agrupados em cinco classes:

  • 1xx – Informativo
  • 2xx – Sucesso
  • 3xx – Redirecionamento
  • 4xx – Erro do cliente
  • 5xx – Erro do servidor

Códigos mais utilizados

Código Significado Descrição
200 OK A requisição foi bem-sucedida.
201 Created Um novo recurso foi criado com sucesso.
204 No Content Requisição bem-sucedida, mas sem conteúdo a retornar.
400 Bad Request Requisição malformada pelo cliente.
401 Unauthorized Autenticação necessária para acessar o recurso.
403 Forbidden Acesso ao recurso negado, mesmo autenticado.
404 Not Found O recurso requisitado não foi encontrado.
405 Method Not Allowed Método HTTP não permitido para o recurso.
500 Internal Server Error Erro genérico no servidor.
502 Bad Gateway Gateway ou proxy recebeu resposta inválida do servidor de origem.

Principais métodos HTTP usados no backend

  • GET: Requisita dados do servidor (leitura).
  • POST: Envia dados para criação de um novo recurso.
  • PUT: Atualiza um recurso existente (ou cria, se não existir).
  • PATCH: Atualiza parcialmente um recurso.
  • DELETE: Remove um recurso do servidor.

Clone repository
  • Arquitetura Pagges
  • Arquitetura
  • Banco de Dados
  • design
    • mockups
  • escopo e cronograma
  • Home