# Mongo DB

### **Configurações do MongoDB e Mongo Express**

Para o correto funcionamento do banco de dados **MongoDB** e da interface administrativa **Mongo Express** em ambiente de desenvolvimento, são necessários dois serviços: o **MongoDB** e o **Mongo Express**. A seguir, detalhamos as configurações de cada serviço:

<div id="bkmrk-"><div><div><div>---

</div></div></div></div>### **Serviço MongoDB**

O MongoDB é configurado como o banco de dados principal. Ele é configurado usando o **Docker**, e as variáveis de ambiente necessárias para a conexão estão definidas nos arquivos `.env.dev`, `.env` e `.env.production` que contém informações sensíveis, como nome do banco de dados e credenciais de acesso.

#### Configuração do MongoDB **(docker-compose)**

<div id="bkmrk--1"><div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary"><div class="overflow-y-auto p-4" dir="ltr">---

</div></div></div>```yaml
services:
  mongo: 
    image: mongo 
    env_file: 
      - .env.dev # Arquivo de variáveis de ambiente 
    ports: 
      - "27017:27017" # Expondo a porta padrão do MongoDB 
    volumes: 
      - dbdata-volume:/data/db # Volume persistente para dados 
    environment: 
      MONGO_INITDB_DATABASE: ${MONGO_INITDB_DATABASE} # Nome do banco de dados 
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} # Nome de usuário admin 
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} # Senha do usuário admin
```

<div id="bkmrk-imagem%3A-a-imagem-doc">- **Imagem**: A imagem Docker utilizada é a oficial do MongoDB (`mongo`).
- **Variáveis de Ambiente**: O arquivo `.env.dev` é responsável por fornecer as variáveis de ambiente, como o nome do banco de dados, o usuário admin e a senha.
- **Portas**: O MongoDB estará disponível na porta **27017**, a porta padrão.
- **Volumes**: O volume `dbdata-volume` garante que os dados do banco sejam persistidos entre reinicializações do container.
- **Variáveis de Ambiente**:
    
    
    - `MONGO_INITDB_DATABASE`: Define o nome do banco de dados inicial.
    - `MONGO_INITDB_ROOT_USERNAME`: Nome do usuário root/admin do MongoDB.
    - `MONGO_INITDB_ROOT_PASSWORD`: Senha para o usuário root/admin do MongoDB.

</div><div id="bkmrk--2"><div><div><div>---

</div></div></div></div>### **Serviço Mongo Express**

**Mongo Express** é uma interface web administrativa para o MongoDB, permitindo que você visualize e manipule dados diretamente via navegador. Ele também está configurado com Docker e se comunica com o banco de dados MongoDB através de uma URL de conexão específica.

#### Configuração do Mongo Express **(docker-compose)**

```yaml
services: 
  mongo-express: 
    image: mongo-express 
    ports: 
      - "8081:8081" # Expondo a porta para acesso via navegador 
    environment: 
    ME_CONFIG_MONGODB_URL: mongodb://${MONGO_INITDB_ROOT_USERNAME}:${MONGO_INITDB_ROOT_PASSWORD}@mongo:27017/${MONGO_INITDB_DATABASE}?authSource=admin # URL de conexão com o MongoDB 
    ME_CONFIG_BASICAUTH_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} # Usuário de autenticação básica 
    ME_CONFIG_BASICAUTH_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} # Senha de autenticação básica
```

<div id="bkmrk-yaml-copiareditar-se"><div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary"><div class="overflow-y-auto p-4" dir="ltr">- **Imagem**: A imagem Docker utilizada é a oficial do Mongo Express (`mongo-express`).

</div></div>- **Portas**: A interface do Mongo Express estará disponível na porta **8081**.
- **Variáveis de Ambiente**:
    
    
    - `ME_CONFIG_MONGODB_URL`: A URL de conexão com o banco MongoDB, que inclui o usuário e a senha definidos no MongoDB, o nome do banco e o endereço do serviço de banco de dados.
    - `ME_CONFIG_BASICAUTH_USERNAME` e `ME_CONFIG_BASICAUTH_PASSWORD`: Configurações de autenticação básica para acessar o Mongo Express. O nome de usuário e a senha são os mesmos definidos para o MongoDB.

</div>#### Explicação da URL de Conexão

A URL de conexão `mongodb://${MONGO_INITDB_ROOT_USERNAME}:${MONGO_INITDB_ROOT_PASSWORD}@mongo:27017/${MONGO_INITDB_DATABASE}?authSource=admin` segue a seguinte estrutura:

<div id="bkmrk-mongodb%3A%2F%2F%3A-protocol"><div id="bkmrk-eclipse-db%3A-containe">- **mongodb://**: Protocolo de conexão com o MongoDB.
- **${MONGO\_INITDB\_ROOT\_USERNAME}:${MONGO\_INITDB\_ROOT\_PASSWORD}**: As credenciais de acesso (usuário e senha) que são lidas a partir das variáveis de ambiente definidas.
- **@mongo:27017**: Nome do serviço Docker onde o MongoDB está rodando, seguido pela porta padrão (27017).
- **/${MONGO\_INITDB\_DATABASE}**: Nome do banco de dados que será acessado.
- **?authSource=admin**: Especifica o banco de dados de autenticação (admin).

  
</div></div><p class="callout info">**Exemplo:**  mongodb://root:admin123@eclipse-db:27017/eclipse?authSource=admin</p>

### **Estrutura de Funcionamento do Mongo**

Para as configurações do **Mongo** e seus modelos, são essas as patas importantes:

```bash
/api/
├── src/
    ├── config/ # Configurações da CONNECTION STRING
    │   ├── connectDb.ts
    ├── model/ # Modelos de todas as entidades
    │   ├── avaliacao
    │   ├── otp
    │   ├── peca
    │   ├── recurso
    │   ├── triagem
    │   ├── usuario
    ├── app.tsx # Criação do primerio Corregedor acontece aqui

```