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
Hide 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,69 +79,72 @@ 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)
Aqui estão os controllers e seus métodos:
#### 📄 Restaurant Controller (`restaurant-controller.ts`)
- [Restaurant Controller](#restaurant-controller)
- [Tag Controller](#tag-controller)
- [User Preferences Controller](#user-preferences-controller)
- [User Controller](#user-controller)
##### 🛠 Métodos
- **`create(req: Request, res: Response)`**
Cria o restaurante;
#### :page_facing_up: Restaurant Controller (`restaurant-controller.ts`)
**Parâmetros:**
- `req` (Request) Requisição http
- `res` (Response) Resposta http
##### :tools: Métodos
- **`list(req:Request, res: Response)`**
Retorna todos os restaurantes;
- **`create(req: Request, res: Response)`** Cria o restaurante;
**Parâmetros:**
**Parâmetros:**
- `req` (Request) Requisição http
- `res` (Response) Resposta http
- **`list(req:Request, res: Response)`** Retorna todos os restaurantes;
- **`find(req:Request, res: Response)`**
Procura um restaurante pelo seu id;
**Parâmetros:**
**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`)
#### :page_facing_up: Tag Controller (`tag-controller.ts`)
##### :tools: Métodos
##### 🛠 Métodos
list: Retorna todas as tags.
- **`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.
#### :page_facing_up: User Preferences Controller (`user-preferences-controller.ts`)
Gerencia as requisições relacionadas às preferências dos usuários.
##### :tools: Métodos
##### 🛠 Métodos
- **`listByUserId(req: Request, res: Response)`**\
Retorna as preferências de um usuário com base no seu ID.
- **`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
**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.
**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:**
**Exemplo de resposta:**
```json
{
"id": "123e4567-e89b-12d3-a456-426614174000",
......@@ -130,30 +161,32 @@ Gerencia as requisições relacionadas às preferências dos usuários.
}
]
}
```
---
#### 📄 User Controller (`user-controller.ts`)
Gerencia as requisições relacionadas aos usuários.
#### :page_facing_up: User Controller (`user-controller.ts`)
##### 🛠 Métodos
Gerencia as requisições relacionadas aos usuários.
- **`create(req: Request, res: Response)`**
Cria um novo usuário com os dados fornecidos no corpo da requisição.
##### :tools: Métodos
**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
- **`create(req: Request, res: Response)`**\
Cria um novo usuário com os dados fornecidos no corpo da requisição.
**Resposta:**
- `201 Created` – Usuário criado com sucesso, retorna os dados do usuário.
- `500 Internal Server Error` – Falha ao criar o usuário.
**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:
......@@ -167,7 +200,7 @@ Gerencia as requisições relacionadas aos usuários.
"gender": "MASCULINO",
"birthDate": "1990-05-15T00:00:00.000Z"
}
Exemplo de resposta:
{
"id": "123e4567-e89b-12d3-a456-426614174000",
......@@ -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
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).
### :open_file_folder: Repositories
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)
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).
#### 📄 Restaurant Repository (`restaurant-repository.ts`)
Repositório responsável pelo gerenciamento dos dados dos restaurantes(criação, buscas, etc.).
Aqui estão os repositórios disponíveis e seus métodos:
##### 🛠 Métodos
- **`create( profilePhoto, bannerPhoto, name, description, address, email, password, averagePrice, phone)`**
Cria um novo restaurante e salva no banco de dados.
- [Restaurant Repository](#restaurant-repository)
- [Tag Repository](#tag-repository)
- [User Preferences Repository](#user-preferences-repository)
- [User Repository](#user-repository)
- **`findOne(id: string)`**
Busca por um restaurante pelo seu id.
#### :page_facing_up: Restaurant Repository (`restaurant-repository.ts`)
- **`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`)
##### 🛠 Métodos
#### :page_facing_up: Tag Repository (`tag-repository.ts`)
##### :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`)
Gerencia as preferências dos usuários.
#### :page_facing_up: User Preferences Repository (`user-preferences-repository.ts`)
##### 🛠 Métodos
- **`getUserPreferencesById(id: string)`**
Pega todas as preferências de um usuário.
Gerencia as preferências dos usuários.
---
##### :tools: Métodos
#### 📄 User Repository (`user-repository.ts`)
Repositório responsável pelo gerenciamento dos dados dos usuários(criação, buscas, etc.).
- **`getUserPreferencesById(id: string)`**\
Pega todas as preferências de um usuário.
##### 🛠 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.
---
#### :page_facing_up: User Repository (`user-repository.ts`)
- **`findByEmail(email: string)`**
Busca um usuário pelo e-mail.
Repositório responsável pelo gerenciamento dos dados dos usuários(criação, buscas, etc.).
- **`findAll()`**
Busca todos os usuários existentes.
##### :tools: Métodos
- **`findById(id: string)`**
Busca um usuário pelo seu Id.
- **`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
### :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)
Aqui estão as routes disponíveis e seus métodos:
#### 📄 Restaurant Route (`restaurant-route.ts`)
- [Restaurant Route](#restaurant-route)
- [Tag Route](#tag-route)
- [User Preferences Route](#user-preferences-route)
- [User Route](#user-route)
##### 🛤️ Rotas
- **`GET`** `/restaurants`
Retorna todos os restaurantes existentes.
#### :page_facing_up: Restaurant Route (`restaurant-route.ts`)
- **`POST`** `/restaurants`
Cria um novo restaurante.
##### :railway_track:️ Rotas
- **`GET`** `/restaurants/:id`
- **`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`)
#### :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)
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)
#### :page_facing_up: Restaurant Service (`restaurant-service.ts`)
#### 📄 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.
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.
#### :page_facing_up: User Service (`user-service.ts`)
##### 🛠 Métodos
Contém métodos para gerenciar as preferências dos usuários.
- **`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`.
##### :tools: 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
### :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
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.
### :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