|
|
<table>
|
|
|
<tr>
|
|
|
<th> [Home](home) </th>
|
|
|
<th> [Escopo e Cronograma](escopo e cronograma) </th>
|
|
|
<th> [Processo](processo) </th>
|
|
|
<th> [Design/Mockups](design/mockups) </th>
|
|
|
<th> [Configuração](configuracao) </th>
|
|
|
<th> [Arquitetura](arquitetura) </th>
|
|
|
<th> [Infra](infraestrutura) </th>
|
|
|
<th> [Código](codigo) </th>
|
|
|
<th> [BD](banco de dados) </th>
|
|
|
</tr>
|
|
|
</table>
|
|
|
|
|
|
# Código |
|
|
\ No newline at end of file |
|
|
A divisão da documentação vai ser feita como é feito no projeto: Backend e Frontend
|
|
|
|
|
|
## BACKEND
|
|
|
|
|
|
Nossa estrutura de pastas ficou desse jeito:
|
|
|
|
|
|
- 📂 bite-alegre-backend
|
|
|
- 📂 .husky
|
|
|
- 📂 node_modules
|
|
|
- 📂 prisma
|
|
|
- 📂 src
|
|
|
- 📂 [controllers](#controllers)
|
|
|
- 📂 [repositories](#repositories)
|
|
|
- 📂 [routes](#routes)
|
|
|
- 📂 [services](#services)
|
|
|
- 📂 [utils](#utils)
|
|
|
- 📄 [index.ts](#index-ts)
|
|
|
- 📄 .dockerignore
|
|
|
- 📄 .env
|
|
|
- 📄 .gitignore
|
|
|
- 📄 .prettierignore
|
|
|
- 📄 .prettierrc.json
|
|
|
- 📄 docker-compose.yml
|
|
|
- 📄 Dockerfile
|
|
|
- 📄 eslint.config.js
|
|
|
- 📄 package-lock.json
|
|
|
- 📄 package.json
|
|
|
- 📄 README.md
|
|
|
- 📄 tsconfig.json
|
|
|
|
|
|
---
|
|
|
|
|
|
## Estrutura do Projeto
|
|
|
|
|
|
### 📂 Controllers
|
|
|
A pasta `controllers` contém os controladores da aplicação. Os controladores são responsáveis por receber as requisições dos clientes (frontend do App), processar os dados e chamar os serviços necessários para executar a lógica de negócio. Atuam como intermediários entre as rotas e os serviços.
|
|
|
|
|
|
Aqui estão os controllers e seus métodos:
|
|
|
- [Restaurant Controller](#restaurant-controller)
|
|
|
- [Tag Controller](#tag-controller)
|
|
|
- [User Preferences Controller](#user-preferences-controller)
|
|
|
- [User Controller](#user-controller)
|
|
|
|
|
|
#### 📄 Restaurant Controller (`restaurant-controller.ts`)
|
|
|
...
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
...
|
|
|
---
|
|
|
|
|
|
#### 📄 Tag Controller (`tag-controller.ts`)
|
|
|
...
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
...
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 📄 User Preferences Controller (`user-preferences-controller.ts`)
|
|
|
Gerencia as requisições relacionadas às preferências dos usuários.
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
|
|
|
- **`listByUserId(req: Request, res: Response)`**
|
|
|
Retorna as preferências de um usuário com base no seu ID.
|
|
|
|
|
|
**Parâmetros:**
|
|
|
- `id` (string) – ID do usuário
|
|
|
|
|
|
**Resposta:**
|
|
|
- `200 OK` – Preferências do usuário recuperadas com sucesso, retorna uma lista de tags associadas.
|
|
|
- `500 Internal Server Error` – Falha ao recuperar as preferências do usuário.
|
|
|
|
|
|
**Exemplo de resposta:**
|
|
|
```json
|
|
|
{
|
|
|
"id": "123e4567-e89b-12d3-a456-426614174000",
|
|
|
"name": "Local",
|
|
|
"type": "Local",
|
|
|
"userPreferences": [
|
|
|
{
|
|
|
"userId": "abc123",
|
|
|
"preference": "Reservado"
|
|
|
},
|
|
|
{
|
|
|
"userId": "def456",
|
|
|
"preference": "Familiar"
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 📄 User Controller (`user-controller.ts`)
|
|
|
Gerencia as requisições relacionadas aos usuários.
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
|
|
|
- **`create(req: Request, res: Response)`**
|
|
|
Cria um novo usuário com os dados fornecidos no corpo da requisição.
|
|
|
|
|
|
**Parâmetros:**
|
|
|
- `profilePhoto` (string) – URL da foto de perfil
|
|
|
- `name` (string) – Nome completo do usuário
|
|
|
- `nickname` (string) – Apelido do usuário
|
|
|
- `email` (string) – Endereço de e-mail
|
|
|
- `password` (string) – Senha do usuário
|
|
|
- `phone` (string) – Número de telefone
|
|
|
- `gender` (enum: `MASCULINO` | `FEMININO` | `NAO_QUERO_INFORMAR` | `OUTRO`) – Gênero do usuário
|
|
|
- `birthDate` (Date) – Data de nascimento
|
|
|
|
|
|
**Resposta:**
|
|
|
- `201 Created` – Usuário criado com sucesso, retorna os dados do usuário.
|
|
|
- `500 Internal Server Error` – Falha ao criar o usuário.
|
|
|
|
|
|
```json
|
|
|
Exemplo de requisição:
|
|
|
{
|
|
|
"profilePhoto": "https://example.com/photo.jpg",
|
|
|
"name": "João Silva",
|
|
|
"nickname": "joaos",
|
|
|
"email": "joao@example.com",
|
|
|
"password": "senhaSegura123",
|
|
|
"phone": "+55 11 98765-4321",
|
|
|
"gender": "MASCULINO",
|
|
|
"birthDate": "1990-05-15T00:00:00.000Z"
|
|
|
}
|
|
|
|
|
|
Exemplo de resposta:
|
|
|
{
|
|
|
"id": "123e4567-e89b-12d3-a456-426614174000",
|
|
|
"name": "João Silva",
|
|
|
"nickname": "joaos",
|
|
|
"email": "joao@email.com",
|
|
|
"phone": "+55 11 99999-9999",
|
|
|
"gender": "MASCULINO",
|
|
|
"birthDate": "1990-01-01T00:00:00.000Z",
|
|
|
"profilePhoto": "https://example.com/photo.jpg",
|
|
|
"createdAt": "2025-03-30T20:00:00.000Z"
|
|
|
}
|
|
|
|
|
|
---
|
|
|
|
|
|
### 📂 Repositories
|
|
|
A pasta `repositories` armazena os repositórios da aplicação, que são responsáveis por interagir com o banco de dados. Aqui se definem métodos para buscar, salvar e modificar dados usando Prisma(ORM).
|
|
|
|
|
|
Aqui estão os repositórios disponíveis e seus métodos:
|
|
|
- [Restaurant Repository](#restaurant-repository)
|
|
|
- [Tag Repository](#tag-repository)
|
|
|
- [User Preferences Repository](#user-preferences-repository)
|
|
|
- [User Repository](#user-repository)
|
|
|
|
|
|
#### 📄 Restaurant Repository (`restaurant-repository.ts`)
|
|
|
...
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
...
|
|
|
---
|
|
|
|
|
|
#### 📄 Tag Repository (`tag-repository.ts`)
|
|
|
...
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
...
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 📄 User Preferences Repository (`user-preferences-repository.ts`)
|
|
|
Gerencia as preferências dos usuários.
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
- **`getUserPreferencesById(id: string)`**
|
|
|
Pega todas as preferências de um usuário.
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 📄 User Repository (`user-repository.ts`)
|
|
|
Repositório responsável pelo gerenciamento dos dados dos usuários(criação, buscas, etc.).
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
- **`createUser( profilePhoto: string, name: string, nickname: string, email: string, hashedPassword: string, phone: string, gender: Gender, birthDate: Date)`**
|
|
|
Cria um novo usuário e salva no banco com a senha criptografada.
|
|
|
|
|
|
- **`findByEmail(email: string)`**
|
|
|
Busca um usuário pelo e-mail.
|
|
|
|
|
|
- **`findAll()`**
|
|
|
Busca todos os usuários existentes.
|
|
|
|
|
|
- **`findById(id: string)`**
|
|
|
Busca um usuário pelo seu Id.
|
|
|
|
|
|
---
|
|
|
|
|
|
### 📂 Routes
|
|
|
A pasta `routes` contém as definições de rotas da API. Essas rotas direcionam as requisições para os respectivos controladores. Para cada entidade cria-se um arquivo de rota separado para organizar melhor o código. Toda as rotas da aplicação se iniciam por `/api`
|
|
|
|
|
|
Aqui estão as routes disponíveis e seus métodos:
|
|
|
- [Restaurant Route](#restaurant-route)
|
|
|
- [Tag Route](#tag-route)
|
|
|
- [User Preferences Route](#user-preferences-route)
|
|
|
- [User Route](#user-route)
|
|
|
|
|
|
#### 📄 Restaurant Route (`restaurant-route.ts`)
|
|
|
...
|
|
|
|
|
|
##### 🛤️ Rotas:
|
|
|
...
|
|
|
---
|
|
|
|
|
|
#### 📄 Tag Route (`tag-route.ts`)
|
|
|
...
|
|
|
|
|
|
##### 🛤️ Rotas:
|
|
|
...
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 📄 User Preferences Route (`user-preferences-route.ts`)
|
|
|
##### 🛤️ Rotas:
|
|
|
- **`GET`** `/user_preferences/:user_id`
|
|
|
Descrição: Retorna todas as preferências de um usuário pelo seu ID.
|
|
|
Parâmetros: `user_id` (string) – Obrigatório
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 📄 User Route (`user-route.ts`)
|
|
|
##### 🛤️ Rotas:
|
|
|
- **`POST`** `/users`
|
|
|
Descrição: cria um novo usuário.
|
|
|
|
|
|
---
|
|
|
|
|
|
### 📂 Services
|
|
|
A pasta `services` contém a lógica(regra de negócio) da aplicação. Os serviços são responsáveis por processar os dados antes de serem armazenados ou retornados ao usuário. Servem para manter os controladores mais enxutos e organizados.
|
|
|
|
|
|
Aqui estão os services disponíveis e seus métodos:
|
|
|
- [Restaurant Service](#restaurant-service)
|
|
|
- [Tag Service](#tag-service)
|
|
|
- [User Preferences Service](#user-preferences-service)
|
|
|
- [User Service](#user-service)
|
|
|
|
|
|
#### 📄 Restaurant Service (`restaurant-service.ts`)
|
|
|
...
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
...
|
|
|
---
|
|
|
|
|
|
#### 📄 Tag Service (`tag-service.ts`)
|
|
|
...
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
...
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 📄 User Preferences Service (`user-preferences-service.ts`)
|
|
|
Contém métodos para gerenciar a criação de usuários, incluindo a verificação de duplicidade de e-mails e a criação de um novo usuário no banco de dados.
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
|
|
|
- **`createUser(profilePhoto: string, name: string, nickname: string, email: string, password: string, phone: string, gender: Gender, birthDate: Date)`**
|
|
|
Cria um novo usuário no sistema. O método realiza as seguintes etapas:
|
|
|
1. Verifica se já existe um usuário com o e-mail fornecido.
|
|
|
2. Se o e-mail já estiver em uso, lança um erro indicando que o e-mail já está sendo utilizado.
|
|
|
3. Se o e-mail não estiver em uso, a senha fornecida é criptografada.
|
|
|
4. O novo usuário é criado no banco de dados com as informações fornecidas.
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 📄 User Service (`user-service.ts`)
|
|
|
Contém métodos para gerenciar as preferências dos usuários.
|
|
|
|
|
|
##### 🛠 Métodos:
|
|
|
|
|
|
- **`getUserPreferences(id: string)`**
|
|
|
Recupera as preferências associadas a um usuário com base no ID fornecido. O método realiza as seguintes etapas:
|
|
|
1. Verifica se o usuário com o ID fornecido existe no banco de dados.
|
|
|
2. Se o usuário não for encontrado, retorna uma mensagem de erro indicando que o usuário não existe.
|
|
|
3. Se o usuário for encontrado, o método busca as preferências associadas a esse usuário.
|
|
|
4. Caso as preferências existam, elas são retornadas. Se não houver preferências, retorna `null`.
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
### 📂 Utils
|
|
|
A pasta `utils` armazena funções auxiliares e utilitárias que podem ser reutilizadas em diferentes partes do código. Aqui você pode colocar funções genéricas, como formatação de datas, manipulação de strings e logs.
|
|
|
|
|
|
💡 **Exemplo:**
|
|
|
Um arquivo `formatDate.ts` pode conter uma função para converter um `Date` em uma string no formato `dd/mm/yyyy`.
|
|
|
|
|
|
---
|
|
|
|
|
|
### 📄 Index.ts
|
|
|
O `index.ts` é o ponto de entrada da aplicação. Aqui se inicia o servidor Express, conecta-se ao banco de dados e carrega todas as rotas.
|
|
|
|
|
|
---
|
|
|
|