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 -
.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 xseu 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": "joao@example.com", "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": "joao@email.com", "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
)


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