| <table> | A divisão da documentação vai ser feita como é feito no projeto: Backend e Frontend | ||
| <tr> | |||
| <th> [Home](home) </th> | ## BACKEND | ||
| <th> [Escopo e Cronograma](escopo e cronograma) </th> | |||
| <th> [Processo](processo) </th> | Nossa estrutura de pastas ficou desse jeito: | ||
| <th> [Design/Mockups](design/mockups) </th> | |||
| <th> [Configuração](configuracao) </th> | - 📂 bite-alegre-backend | ||
| <th> [Arquitetura](arquitetura) </th> | - 📂 .husky | ||
| <th> [Infra](infraestrutura) </th> | - 📂 node_modules | ||
| <th> [Código](codigo) </th> | - 📂 prisma | ||
| <th> [BD](banco de dados) </th> | - 📂 src | ||
| </tr> | - 📂 [controllers](#controllers) | ||
| </table> | - 📂 [repositories](#repositories) | ||
| - 📂 [routes](#routes) | |||
| # Código | - 📂 [services](#services) | ||
| \ No newline at end of file | - 📂 [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": "[email protected]", | |||
| "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": "[email protected]", | |||
| "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. | |||
| --- | |||