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

Last edited by Guilherme Melos Vieira Apr 03, 2025
Page history

Codigo

Home

Escopo e Cronograma

Processo

Design/Mockups

Configuração

Arquitetura

Infra

Código

BD

A divisão da documentação vai ser feita como é feito no projeto: Backend e Frontend

  • BACKEND
  • Estrutura de Pastas
  • Estrutura do Projeto
    • 📂 Controllers
      • 📄 Restaurant Controller (restaurant-controller.ts)
        • 🛠 Métodos
      • 📄 Tag Controller (tag-controller.ts)
        • 🛠 Métodos
      • 📄 User Preferences Controller (user-preferences-controller.ts)
        • 🛠 Métodos
      • 📄 User Controller (user-controller.ts)
        • 🛠 Métodos
    • 📂 Repositories
      • 📄 Restaurant Repository (restaurant-repository.ts)
        • 🛠 Métodos
      • 📄 Tag Repository (tag-repository.ts)
        • 🛠 Métodos
      • 📄 User Preferences Repository (user-preferences-repository.ts)
        • 🛠 Métodos
      • 📄 User Repository (user-repository.ts)
        • 🛠 Métodos
    • 📂 Routes
      • 📄 Restaurant Route (restaurant-route.ts)
        • 🛤️ Rotas
      • 📄 Tag Route (tag-route.ts)
        • 🛤️ Rotas
      • 📄 User Preferences Route (user-preferences-route.ts)
        • 🛤️ Rotas
      • 📄 User Route (user-route.ts)
        • 🛤️ Rotas
    • 📂 Services
      • 📄 Restaurant Service (restaurant-service.ts)
        • 🛠 Métodos
      • 📄 Tag Service (tag-service.ts)
        • 🛠 Métodos
      • 📄 User Preferences Service (user-preferences-service.ts)
        • 🛠 Métodos
      • 📄 User Service (user-service.ts)
        • 🛠 Métodos
    • 📂 Utils
    • 📄 Index.ts

BACKEND

Estrutura de Pastas

Essa foi a estrutura de pastas que escolhemos utilizar:

  • 📂 bite-alegre-backend
    • 📂 .husky
    • 📂 node_modules
    • 📂 prisma
    • 📂 src
      • 📂 controllers
      • 📂 repositories
      • 📂 routes
      • 📂 services
      • 📂 utils
      • 📄 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

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. 📌

📂 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
  • Tag Controller
  • User Preferences Controller
  • User Controller

📄 Restaurant Controller (restaurant-controller.ts)

🛠 Métodos
  • 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;

    Parâmetros:

    • req (Request) Requisição http
    • res (Response) Resposta http
  • find(req:Request, res: Response) Procura um restaurante pelo seu id;

    Parâmetros:

    • req (Request) Requisição http
    • res (Response) Resposta http

📄 Tag Controller (tag-controller.ts)

🛠 Métodos
  • list(req: Request, res: Response)
    Retorna as tags de acordo com o tipo informado;

    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)

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:

    {
      "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.
    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
  • Tag Repository
  • User Preferences 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.
  • 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)

🛠 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)

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
  • Tag Route
  • User Preferences Route
  • User Route

📄 Restaurant Route (restaurant-route.ts)

🛤️ Rotas
  • GET /restaurants
    Retorna todos os restaurantes existentes.
  • POST /restaurants
    Cria um novo restaurante.
  • GET /restaurants/:id
    Retorna um restaurante com o id especificado.

📄 Tag Route (tag-route.ts)

🛤️ 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

📄 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
  • Tag Service
  • User Preferences Service
  • User Service

📄 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:
    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.

📄 Tag Service (tag-service.ts)

🛠 Métodos
  • 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.

    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)

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.


Clone repository
  • Arquitetura
  • BD
  • BancoDeDados
  • Codigo
  • Design
    • Mockups
  • EAP
  • Escopo e Cronograma
  • Infraestrutura
  • Processo
  • Testes automatizados
  • banco de dados
  • configuracao
  • Home