Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • 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
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Gastrô
  • Wiki
  • Wiki
  • Codigo

Codigo · Changes

Page history
Update Codigo: tags authored Apr 03, 2025 by Guilherme Melos Vieira's avatar Guilherme Melos Vieira
Show whitespace changes
Inline Side-by-side
Codigo.md
View page @ 27094f97
<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>
<tr>
<th>
[Home](home)
</th>
<th>
[Escopo e Cronograma](escopo%20e%20cronograma)
</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%20de%20dados)
</th>
</tr>
</table>
A divisão da documentação vai ser feita como é feito no projeto: Backend e Frontend
......@@ -19,31 +46,32 @@ A divisão da documentação vai ser feita como é feito no projeto: Backend e F
## BACKEND
## Estrutura de Pastas
Essa foi a estrutura de pastas que escolhemos utilizar:
- 📂 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
- :open_file_folder: bite-alegre-backend
- :open_file_folder: .husky
- :open_file_folder: node_modules
- :open_file_folder: prisma
- :open_file_folder: src
- :open_file_folder: [controllers](#controllers)
- :open_file_folder: [repositories](#repositories)
- :open_file_folder: [routes](#routes)
- :open_file_folder: [services](#services)
- :open_file_folder: [utils](#utils)
- :page_facing_up: [index.ts](#index-ts)
- :page_facing_up: .dockerignore
- :page_facing_up: .env
- :page_facing_up: .gitignore
- :page_facing_up: .prettierignore
- :page_facing_up: .prettierrc.json
- :page_facing_up: docker-compose.yml
- :page_facing_up: Dockerfile
- :page_facing_up: eslint.config.js
- :page_facing_up: package-lock.json
- :page_facing_up: package.json
- :page_facing_up: README.md
- :page_facing_up: tsconfig.json
---
......@@ -51,59 +79,61 @@ Essa foi a estrutura de pastas que escolhemos utilizar:
A estrutura do projeto segue o padrão MVC e uma abordagem modular, garantindo melhor organização, manutenção e escalabilidade da aplicação.
Cada seção a seguir detalha os componentes principais de cada diretório e como eles se integram para formar a aplicação. 📌
Cada seção a seguir detalha os componentes principais de cada diretório e como eles se integram para formar a aplicação. :pushpin:
### :open_file_folder: Controllers
### 📂 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`)
#### :page_facing_up: Restaurant Controller (`restaurant-controller.ts`)
##### :tools: Métodos
##### 🛠 Métodos
- **`create(req: Request, res: Response)`**
Cria o restaurante;
- **`create(req: Request, res: Response)`** Cria o restaurante;
**Parâmetros:**
- `req` (Request) Requisição http
- `res` (Response) Resposta http
- **`list(req:Request, res: Response)`** Retorna todos os restaurantes;
- **`list(req:Request, res: Response)`**
Retorna todos os restaurantes;
**Parâmetros:**
**Parâmetros:**
- `req` (Request) Requisição http
- `res` (Response) Resposta http
- **`find(req:Request, res: Response)`** Procura um restaurante pelo seu id;
- **`find(req:Request, res: Response)`**
Procura um restaurante pelo seu id;
**Parâmetros:**
**Parâmetros:**
- `req` (Request) Requisição http
- `res` (Response) Resposta http
---
#### :page_facing_up: Tag Controller (`tag-controller.ts`)
---
##### :tools: Métodos
#### 📄 Tag Controller (`tag-controller.ts`)
- **`list(req: Request, res: Response)`**\
Retorna as tags de acordo com o tipo informado;
##### 🛠 Métodos
list: Retorna todas as tags.
**Parâmetros:**
- `req` (Request) Requisição http contendo o parâmetro `type`, que define o tipo de tags a serem retornadas
- `res` (Response) Resposta http
---
#### 📄 User Preferences Controller (`user-preferences-controller.ts`)
#### :page_facing_up: User Preferences Controller (`user-preferences-controller.ts`)
Gerencia as requisições relacionadas às preferências dos usuários.
##### 🛠 Métodos
##### :tools: Métodos
- **`listByUserId(req: Request, res: Response)`**
- **`listByUserId(req: Request, res: Response)`**\
Retorna as preferências de um usuário com base no seu ID.
**Parâmetros:**
......@@ -114,6 +144,7 @@ Gerencia as requisições relacionadas às preferências dos usuários.
- `500 Internal Server Error` – Falha ao recuperar as preferências do usuário.
**Exemplo de resposta:**
```json
{
"id": "123e4567-e89b-12d3-a456-426614174000",
......@@ -130,15 +161,17 @@ Gerencia as requisições relacionadas às preferências dos usuários.
}
]
}
```
---
#### 📄 User Controller (`user-controller.ts`)
#### :page_facing_up: User Controller (`user-controller.ts`)
Gerencia as requisições relacionadas aos usuários.
##### 🛠 Métodos
##### :tools: Métodos
- **`create(req: Request, res: Response)`**
- **`create(req: Request, res: Response)`**\
Cria um novo usuário com os dados fornecidos no corpo da requisição.
**Parâmetros:**
......@@ -180,193 +213,227 @@ Gerencia as requisições relacionadas aos usuários.
"profilePhoto": "https://example.com/photo.jpg",
"createdAt": "2025-03-30T20:00:00.000Z"
}
```
---
### 📂 Repositories
### :open_file_folder: 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`)
Repositório responsável pelo gerenciamento dos dados dos restaurantes(criação, buscas, etc.).
##### 🛠 Métodos
- **`create( profilePhoto, bannerPhoto, name, description, address, email, password, averagePrice, phone)`**
Cria um novo restaurante e salva no banco de dados.
#### :page_facing_up: Restaurant Repository (`restaurant-repository.ts`)
- **`findOne(id: string)`**
Busca por um restaurante pelo seu id.
- **`findAll()`**
Busca todos os restaurantes existentes.
Repositório responsável pelo gerenciamento dos dados dos restaurantes(criação, buscas, etc.).
- **`findByEmail(email: string)`**
Busca por um restaurante pelo seu email.
##### :tools: Métodos
- **`findTagsByIds(tagIds: string[])`**
Busca por todos os restaurantes com as tags informadas pelos seu ids.
- **`create( profilePhoto, bannerPhoto, name, description, address, email, password, averagePrice, phone)`** Cria um novo restaurante e salva no banco de dados.
- **`findOne(id: string)`** Busca por um restaurante pelo seu id.
- **`findAll()`** Busca todos os restaurantes existentes.
- **`findByEmail(email: string)`** Busca por um restaurante pelo seu email.
- **`findTagsByIds(tagIds: string[])`** Busca por todos os restaurantes com as tags informadas pelos seu ids.
---
#### 📄 Tag Repository (`tag-repository.ts`)
#### :page_facing_up: Tag Repository (`tag-repository.ts`)
##### 🛠 Métodos
##### :tools: Métodos
- **`findAll(type?: string)`**\
Retorna todas as tags. Se o parâmetro `type` for informado, filtra as tags pelo tipo correspondente.\
**Parâmetros:**
- `type` (opcional) – _string_ representando o tipo de tag para filtragem.
- **`findByType(type: TagType)`**\
Retorna as tags que correspondem ao tipo especificado.\
**Parâmetros:**
- `type` – _TagType_ (enum) que define o tipo da tag a ser retornada.
- **`findById(id: string)`**\
Busca uma tag pelo seu id.\
**Parâmetros:**
- `id` – _string_ que representa o identificador único da tag.
- **`getAllowedTagTypes()`**\
Retorna um array com todos os tipos permitidos de tags, conforme definidos no enum `TagType`.
---
#### 📄 User Preferences Repository (`user-preferences-repository.ts`)
#### :page_facing_up: User Preferences Repository (`user-preferences-repository.ts`)
Gerencia as preferências dos usuários.
##### 🛠 Métodos
- **`getUserPreferencesById(id: string)`**
##### :tools: Métodos
- **`getUserPreferencesById(id: string)`**\
Pega todas as preferências de um usuário.
---
#### 📄 User Repository (`user-repository.ts`)
#### :page_facing_up: 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.
##### :tools: Métodos
- **`findByEmail(email: string)`**
- **`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()`**
- **`findAll()`**\
Busca todos os usuários existentes.
- **`findById(id: string)`**
- **`findById(id: string)`**\
Busca um usuário pelo seu Id.
---
### 📂 Routes
### :open_file_folder: 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`)
#### :page_facing_up: Restaurant Route (`restaurant-route.ts`)
##### 🛤️ Rotas
- **`GET`** `/restaurants`
Retorna todos os restaurantes existentes.
##### :railway_track:️ Rotas
- **`POST`** `/restaurants`
- **`GET`** `/restaurants`\
Retorna todos os restaurantes existentes.
- **`POST`** `/restaurants`\
Cria um novo restaurante.
- **`GET`** `/restaurants/:id`
- **`GET`** `/restaurants/:id`\
Retorna um restaurante com o id especificado.
---
#### 📄 Tag Route (`tag-route.ts`)
#### :page_facing_up: Tag Route (`tag-route.ts`)
##### :railway_track:️ Rotas
##### 🛤️ Rotas
- **GET `/tags/:type?`**\
Rota responsável por retornar as tags, utilizando o método `list` do `TagController`.\
**Detalhes:**
- Se o parâmetro `type` for fornecido, a rota repassa esse valor para o controlador filtrar as tags conforme o tipo informado.
- Se o parâmetro não for especificado, o controlador retorna todas as tags disponíveis.
---
#### 📄 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
#### :page_facing_up: User Preferences Route (`user-preferences-route.ts`)
##### :railway_track:️ 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.
#### :page_facing_up: User Route (`user-route.ts`)
##### :railway_track:️ Rotas
- **`POST`** `/users`\
Descrição: cria um novo usuário.
---
### 📂 Services
### :open_file_folder: 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`)
#### :page_facing_up: Restaurant Service (`restaurant-service.ts`)
Contém métodos para gerenciar restaurantes
##### 🛠 Métodos
- **`createRestaurant(input: CreateRestaurantDto)`**
Cria um novo restaurante no sistema. O método realiza as seguintes etapas:
##### :tools: Métodos
- **`createRestaurant(input: CreateRestaurantDto)`** Cria um novo restaurante no sistema. O método realiza as seguintes etapas:
1. Verifica se os campos name, address, email, password e tagsIds foram preenchidos
2. Se o e-mail já estiver em uso, lança um erro indicando que o e-mail já está sendo utilizado.
3. Se uma das tags não for encrontrada lança um erro indicando que uma das tags não foi encontrada
4. O novo restaurante é criado no banco de dados com as informações fornecidas.
- **`getRestaurants()`** Retorna todos os restaurantes com os campos: id, description, profilePhoto, bannerPhoto, name, address, averagePrice e phone.
- **`getRestaurantById(id: string)`** Retorna os campos: id, description, profilePhoto, bannerPhoto, name, address, averagePrice e phone de um restaurante com o id especificado.
- **`getRestaurants()`**
Retorna todos os restaurantes com os campos: id, description, profilePhoto, bannerPhoto, name, address, averagePrice e phone.
---
- **`getRestaurantById(id: string)`**
Retorna os campos: id, description, profilePhoto, bannerPhoto, name, address, averagePrice e phone de um restaurante com o id especificado.
#### :page_facing_up: Tag Service (`tag-service.ts`)
---
##### :tools: Métodos
#### 📄 Tag Service (`tag-service.ts`)
- **`getTags(type?: string)`**\
Método assíncrono responsável por retornar as tags.\
**Parâmetros:**
- `type` (opcional) – _string_ que representa o tipo de tag desejado.
##### 🛠 Métodos
**Funcionamento:**
- **Com filtro:** Se o parâmetro `type` for informado, o método:
1. Converte o valor para letras maiúsculas (`formattedType`);
2. Obtém os tipos permitidos por meio de `TagRepository.getAllowedTagTypes()`;
3. Verifica se o `formattedType` está incluído nos tipos permitidos.
- Se não estiver, lança um erro informando `Invalid tag type: ${type}`;
- Caso esteja, retorna as tags filtradas utilizando `TagRepository.findByType(formattedType as TagType)`.
- **Sem filtro:** Se `type` não for informado, retorna todas as tags por meio de `TagRepository.findAll()`.
---
#### 📄 User Preferences Service (`user-preferences-service.ts`)
#### :page_facing_up: 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
##### :tools: Métodos
- **`createUser(profilePhoto: string, name: string, nickname: string, email: string, password: string, phone: string, gender: Gender, birthDate: Date)`**
- **`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`)
#### :page_facing_up: User Service (`user-service.ts`)
Contém métodos para gerenciar as preferências dos usuários.
##### 🛠 Métodos
##### :tools: Métodos
- **`getUserPreferences(id: string)`**
- **`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
### :open_file_folder: 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:**
:bulb: **Exemplo:**\
Um arquivo `formatDate.ts` pode conter uma função para converter um `Date` em uma string no formato `dd/mm/yyyy`.
---
### 📄 Index.ts
### :page_facing_up: 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.
---
\ No newline at end of file
Clone repository
  • Arquitetura
  • BD
  • BancoDeDados
  • Codigo
  • Design
    • Mockups
  • EAP
  • Escopo e Cronograma
  • Infraestrutura
  • Processo
  • Testes automatizados
  • banco de dados
  • configuracao
  • Home