|
|
## 1. Arquitetura do Sistema
|
|
|
### Visão geral
|
|
|
O projeto utiliza NestJS como framework backend, responsável por gerenciar a comunicação com o frontend e organizar a aplicação em módulos bem estruturados. Toda a infraestrutura do backend, incluindo a aplicação e o banco de dados, é executada em contêineres Docker, o que garante portabilidade, facilidade de configuração e isolamento entre os serviços.
|
|
|
|
|
|
Como sistema gerenciador de banco de dados foi escolhido o PostgreSQL, por ser robusto, amplamente utilizado em aplicações de produção e não possuir custos de licenciamento ou taxas de uso associadas.
|
|
|
|
|
|
### Arquitetura e Tecnologias do Backend
|
|
|
|
|
|
Esta seção detalha as principais tecnologias usadas para a arquitetura do servidor e a infraestrutura do projeto.
|
|
|
|
|
|
#### NestJS (Framework Backend)
|
|
|
|
|
|
O NestJS é o framework principal utilizado no backend. Suas responsabilidades-chave no projeto são:
|
|
|
|
|
|
* Gerenciar a comunicação entre as requisições do frontend e o servidor.
|
|
|
* Organizar a aplicação em módulos bem estruturados, facilitando a manutenção e a escalabilidade.
|
|
|
|
|
|
#### Docker (Infraestrutura e Contêineres)
|
|
|
|
|
|
Toda a infraestrutura de backend, incluindo a aplicação NestJS e o banco de dados, é executada utilizando Docker.
|
|
|
|
|
|
### Fluxo de Dados
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
flowchart TD
|
|
|
A(Frontend)
|
|
|
B(API-Middleware)
|
|
|
C{Verifica auth?}
|
|
|
X(Controller)
|
|
|
D(Camada de serviço)
|
|
|
E(Camada de repository)
|
|
|
F(Database)
|
|
|
G(Return 403 Forbidden)
|
|
|
|
|
|
A --> |HTTP request| B
|
|
|
B --> C
|
|
|
C -->|Sim| X
|
|
|
C -->|Nao| G
|
|
|
X --> D
|
|
|
D --> E
|
|
|
E --> F
|
|
|
F --> E
|
|
|
E --> D
|
|
|
D --> X
|
|
|
X --> |HTTP response| A
|
|
|
```
|
|
|
|
|
|
|
|
|
## 2. Banco de Dados
|
|
|
|
|
|
### Estratégia de migrações (Prisma Migrate)
|
|
|
|
|
|
Usamos Prisma Migrate com os comandos:
|
|
|
|
|
|
- **Desenvolvimento:**
|
|
|
```bash
|
|
|
npm run prisma:migrate:dev -- <nome>
|
|
|
Cria e aplica migração usando .env.development.
|
|
|
- **Deploy**:
|
|
|
```bash
|
|
|
npm run prisma:migrate:deploy
|
|
|
|
|
|
Aplica migrações existentes com o schema de produção.
|
|
|
|
|
|
## 3. Integrações externas
|
|
|
|
|
|
A autenticação é realizada via **Firebase Auth**. O frontend utiliza login social (Google, etc.) e recebe um **ID Token (JWT)** do Firebase. Esse token é então enviado ao backend, que valida sua autenticidade com o Firebase antes de autorizar o acesso.
|
|
|

|
|
|
## 4. Fluxo de Deploy / CI-CD
|
|
|

|
|
|
Branches usadas (main, develop, etc).
|
|
|
|
|
|
Pipeline de build/test/deploy (ex.: GitHub Actions). |