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
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 (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: Retorna todas as tags.
📄 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 (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
📄 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.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
📄 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.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:- Verifica se os campos name, address, email, password e tagsIds foram preenchidos
- Se o e-mail já estiver em uso, lança um erro indicando que o e-mail já está sendo utilizado.
- Se uma das tags não for encrontrada lança um erro indicando que uma das tags não foi encontrada
- 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
📄 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:- Verifica se já existe um usuário com o e-mail fornecido.
- Se o e-mail já estiver em uso, lança um erro indicando que o e-mail já está sendo utilizado.
- Se o e-mail não estiver em uso, a senha fornecida é criptografada.
- 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:- Verifica se o usuário com o ID fornecido existe no banco de dados.
- Se o usuário não for encontrado, retorna uma mensagem de erro indicando que o usuário não existe.
- Se o usuário for encontrado, o método busca as preferências associadas a esse usuário.
- 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.
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.