| <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": "[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. | ||
| --- | ||