# Versão 3

# Front-End



# Eclipse - Frontend

**Eclipse** é um software desenvolvido para a gestão completa do envio, avaliação e acompanhamento de relatórios no âmbito jurídico-administrativo. A plataforma oferece funcionalidades específicas para três tipos de usuários:

- **Defensores:** Criam e submetem triagens e peças processuais.
- **Avaliadores:** Avaliam peças e triagens enviadas.
- **Corregedor:** Gerencia usuários, aprovações e negações, além de supervisionar o sistema.

O sistema também oferece **notas automáticas**, critérios de avaliação e um fluxo para **solicitação de recursos**, promovendo transparência e controle.

---

### **Tecnologias**

- **Next.js** (App Router)
- **TypeScript**
- **Tailwind CSS**
- **NextAuth (Autenticação)**
- **Docker** (ambiente de desenvolvimento e produção)Usando Docker (ambiente de desenvolvimento)
- **HeroUI**: Biblioteca de componentes visuais modernos e acessíveis (botões, tabelas, modais, etc.), amplamente utilizada na interface do Eclipse para padronizar a experiência do usuário e facilitar/otimizar o desenvolvimento.
- **Tailwind CSS**: Utilizado em conjunto com HeroUI para estilização utilitária e responsiva.

---

## **Estrutura de Pastas**

```
eclipse/
├── app/                                  # Rotas e páginas (App Router)
│   ├── api/auth/[...nextauth]/route.ts   # Rota de autenticação (NextAuth)
│   ├── registrar/                        # Página de registro de usuáros
│   ├── (user-routes)/                    # Rotas específicas para usuários logados
│   └── (usuario)/                        # OTP e redefinição de senha
│
├── components/                           # Componentes utilizados no projeto
│   └── avaliador/                        # Componentes de tela do avaliador
│   └── corregedor/                       # Componentes de tela do corregedor
│   └── defensor/                         # Componentes de tela do defensor
│   └── inicial/                          # Componente de gerenciamento da Home
│   └── sidebar/                          # Componente de gerencialmento da troca entre telas
│
├── providers/                            # Contextos globais (auth, loading, sessão)
│   └── HeroProvider                      # Gerenciamento da biblioteca de User Interface que facilita a criação de componentes
│   └── LoadingProvider                   # Gerenciamento das funções de loading do software
│   └── ScreenProvider                    # Gerenciamento das trocas de componente em tela e seus parâmentros
│   └── SessionProvider                   # Gerenciamento das informações de sessão do usuário logado
│
├── public/                               # Arquivos estáticos(Imagens e Icones)
│
├── utils/                                # Funções utilitárias
│   └── NextAuthOptions                   # Configurações de autenticação de usuário
│   └── *.tsx                             # Demais utilitários
│
├── Dockerfile.*                          # Dockerfiles para build e produção
├── next.config.ts                        # Configurações do Next.js
└── tailwind.config.js                    # Configurações do Tailwind CSS
```

## **Autenticação**

A autenticação é gerenciada por **NextAuth** com a configuração definida em:

```
app/api/auth/[...nextauth]/route.ts
```

Suporta autenticação por e-mail/senha com fluxo de redefinição de senha via token e OTP.

---

## **Padrões de Código**

- Componentes funcionais com Hooks.
- Organização baseada em papéis de usuário.
- ESLint configurado com suporte a TypeScript.
- Estilização com Tailwind CSS.
- Uso de **HeroUI** para componentes reutilizáveis.

---

## **Colaboração**

#### Branches

- `main`: Produção
- `develop`: Desenvolvimento
- `feat--*`: Novas funcionalidades
- `fix--*`: Correções

---

## **Funcionalidades em Destaque**

- Triagens e submissões por defensores.
- Avaliação e notas automáticas.
- Acompanhamento de histórico.
- Fluxo de aprovação/negação com recurso e/ou usuários do sistema.
- Sistema robusto de autenticação e segurança.

---

## **Equipe de Desenvolvimento**

- **Desenvolvedores Fullstack:**
    
    
    - *João Vitor Viana Chaves*
    - *Gustavo Costa*
    - *Vinícius Jesus*
    - *Guilherme Barbosa*

- **Coordenação Técnica:**
    
    
    - *Guilherme*
    - *Layon*

# Back-End



# Swagger

## **Descrição Técnica do Backend**

O backend do projeto é estruturado de forma modular, com separação clara de responsabilidades entre rotas, serviços, middlewares e utilitários. A aplicação é desenvolvida utilizando **Node.js** com **Express** e toda a API está documentada de forma interativa utilizando o **Swagger UI**, acessível pelo endereço:

> 🔗 **[http://localhost:3008/api-docs/#/](http://localhost:3008/api-docs/#/)**

<p class="callout warning">**Lembre-se de ter o projeto rodando no docker para funcionar!**</p>

---

### **Estrutura de Diretórios**

```plaintext
/api/
├── src/
│   ├── docs/               # 📄 Configurações e definição dos endpoints no Swagger
│   │   └── swagger.ts
│
│   ├── middlewares/        # ⚙️ Middlewares diversos, incluindo o multer para uploads
│   │   └── multer.ts
│
│   ├── router/             # 🛣️ Definição de todas as rotas do sistema organizadas por domínio
│   │   ├── avaliador/
│   │   ├── corregedor/
│   │   ├── defensor/
│   │   ├── usuario/
│   │   └── router.ts       # Roteador principal que importa e agrupa os módulos acima
│
│   ├── services/           # 🧩 Regras de negócio e funcionalidades para cada tipo de usuário
│   │   ├── avaliador/
│   │   ├── corregedor/
│   │   ├── defensor/
│   │   └── usuario/
│
│   ├── utils/              # 🔧 Utilitários de suporte à aplicação
│   │   ├── opt/            # Envio de OTPs e recuperação de senha
│   │   ├── pdf/            # Operações de manipulação e leitura de PDFs
│   │   ├── validations/    # Validações como token, CPF, e campos diversos
│   │   └── ...             # Outros utilitários adicionais
│
│   └── app.tsx             # 🎯 Ponto de entrada da aplicação e inicialização dos serviços

```

---

### **Documentação Interativa com Swagger**

A API conta com documentação completa utilizando **Swagger**, onde é possível:

- Visualizar **todos os endpoints disponíveis**
- Ver os **parâmetros esperados** por cada rota
- Testar requisições diretamente pela interface
- Visualizar exemplos de **respostas de sucesso e erro**

#### Exemplo de rotas documentadas:

- **`POST /api/defensor/registrar/triagem`**  
    Registra uma triagem com múltiplos arquivos PDF, processo e protocolo.
- **`POST /api/avaliador/pecas/avaliar`**
    
    Permite que um avaliador avalie peças de um defensor.
- **`GET /api/usuario/email`**  
    Retorna as informações do email mascarado.
- **`POST /api/corregedor/pecas/aprovar`**  
    Permite ao corregedor aprovar ou reprovar uma triagem enviada.

Essas e outras rotas estão organizadas por grupos lógicos (Defensor, Avaliador, Corregedor, Usuário) dentro do Swagger UI.

---

### **Upload de Arquivos com Multer**

A aplicação utiliza o middleware **Multer** para lidar com uploads de arquivos (como PDFs), salvando-os em diretórios específicos com nomes padronizados conforme o campo da requisição.

A lógica para isso está implementada em:

```
src/middlewares/multer.ts
```

Esse middleware identifica dinamicamente o campo do arquivo (`fileRaf`, `fileProcesso_1`, etc.) e direciona o salvamento para a pasta correta, como por exemplo:

- `documentos/raf/`
- `documentos/processos/`
- `documentos/recursos/`
- `documentos/avaliacoes/`
- `documentos/relatorios`

# Mongo Express

**<span style="color: rgb(34, 34, 34); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Oxygen, Ubuntu, Roboto, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; font-size: 2.333em;">Interface Mongo Express</span>**

Além da API documentada via Swagger, o backend também conta com uma interface web para gerenciamento direto do banco de dados MongoDB utilizando o **Mongo Express** — uma ferramenta leve e funcional para visualização e execução de comandos no banco de forma gráfica.

---

### **Acesso à Interface Mongo Express**

A interface está disponível no seguinte endereço (ajustável conforme o ambiente de execução):

> 🔗 **[http://localhost:8081](http://localhost:8081/)**

<p class="callout warning">**Lembre-se de ter o projeto rodando no docker para funcionar!**</p>

<p class="callout info">**As credenciais de acesso ao Express são as variáves: <span style="color: rgb(224, 62, 45);">MONGO\_INITDB\_ROOT\_USERNAME </span>e<span style="color: rgb(224, 62, 45);"> MONGO\_INITDB\_ROOT\_PASSWORD </span>dos arquivos env**</p>

Através dela é possível:

- Visualizar todas as coleções disponíveis no banco
- Buscar documentos por filtros (queries MongoDB)
- Editar registros diretamente
- Remover dados manualmente (quando necessário para testes ou administração)
- Inserir novos documentos via interface visual
- Exportar dados para backup ou inspeção

---

### **Utilização no Contexto do Projeto**

A interface do **Mongo Express** é extremamente útil para:

- **Testes de integração e debug** durante o desenvolvimento
- **Administração rápida de dados**, sem a necessidade de linha de comando
- **Verificação de dados persistidos** via requisições realizadas na API
- **Criação manual de documentos**, útil durante o desenvolvimento de novas rotas

---

### **Segurança**

> ⚠️ Em ambiente de produção, o Mongo Express **não deve ser exposto publicamente** sem autenticação e/ou encapsulamento por VPN, proxy ou firewall.  
> No projeto atual, ele é **ativado apenas em ambientes de desenvolvimento**, sem acesso externo.

---

### **Integração com a API**

Durante o desenvolvimento, a interface Mongo Express serve como um complemento ao Swagger:

- Você faz uma requisição no **Swagger UI** (como POST `/api/avaliador/pecas/avaliar`)
- E pode **ver o resultado diretamente no Mongo Express**, conferindo como o documento foi persistido em `coleção: Avaliacao`

Exemplos de coleções visualizáveis:

- `Usuarios`
- `Triagem`
- `Peca`
- `Avaliacao`
- `Recurso`
- `Otps`

---

### **Passo a Passo de Uso**

O mongo express criar algumas tabelas por padrão, mas a que estará sendo usada, é a gerada pelo docker com o nome ***<span style="color: rgb(132, 63, 161);">eclipse,</span>*** como indicado na seta vermelha abaixo, basta clicar em <span style="color: rgb(45, 194, 107);">***View***</span> ou no próprio nome do database:

[![Slide_1.jpg](https://bookstack.ljit.com.br/uploads/images/gallery/2025-05/scaled-1680-/6BI3qutips2KKLC5-slide-1.jpg)](https://bookstack.ljit.com.br/uploads/images/gallery/2025-05/6BI3qutips2KKLC5-slide-1.jpg)

---

Apos clicar no database **eclipse**, temos acesso as *coleções* (entidades do banco), onde cada respectivo dado se encontra, no exemplo abaixo estaremos mostrando a coleção de <span style="color: rgb(45, 194, 107);">***usuários***</span>, mas você pode repetir o mesmo procedimento para as demais entidades:

[![Slide_2.jpg](https://bookstack.ljit.com.br/uploads/images/gallery/2025-05/scaled-1680-/dbg52ZPGnootbfa1-slide-2.jpg)](https://bookstack.ljit.com.br/uploads/images/gallery/2025-05/dbg52ZPGnootbfa1-slide-2.jpg)

---

Depois de abrir a coleção de ***<span style="color: rgb(45, 194, 107);">usuários</span>***, você verá todos os dados cadastrados no banco referentes a essa entidade com todos os campos declarados nas ***Models*** da pasta **api**, como demonstrado abaixo, você pode clicar em cada um dos dados da coleção para abri-la e/ou edita-la:

[![Slide_3.jpg](https://bookstack.ljit.com.br/uploads/images/gallery/2025-05/scaled-1680-/0kuEyY2kBiTnrZV1-slide-3.jpg)](https://bookstack.ljit.com.br/uploads/images/gallery/2025-05/0kuEyY2kBiTnrZV1-slide-3.jpg)

---

Aqui você poderá ver todos os <span style="text-decoration: underline;">atributos</span> e <span style="text-decoration: underline;">dados</span> do documento do qual clicou, bem como o nome dos campos e valores. Aqui você pode clicar em qualquer campo e alterar seu valor **(Não se esqueça de clicar em *<span style="color: rgb(45, 194, 107);">Save</span>* após as alterações)**, e clique em **<span style="color: rgb(241, 196, 15);">Back</span>** para voltar para a sessão de coleções:

[![Slide_4.jpg](https://bookstack.ljit.com.br/uploads/images/gallery/2025-05/scaled-1680-/neOTY5BRx3m5UkeW-slide-4.jpg)](https://bookstack.ljit.com.br/uploads/images/gallery/2025-05/neOTY5BRx3m5UkeW-slide-4.jpg)

# Banco de Dados



# 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

```

# Build



# Produção

*Para rodar o projeto em **produção**, é necessários um arquivo de ambiente. que deve possuir o nome "**.env"** e deve ser colocado na pasta ECLIPSE-V3*

<p class="callout warning">**A falta desse arquivo de ambiente pode acarretar em erros inesperados de build do docker!**</p>

---

<p class="callout danger">**Lembre de adicionar este arquivo na pasta <span style="color: rgb(185, 106, 217);">/ECLIPSE-V3</span>**</p>

### **.env:** 

```bash
# 🛢️ MONGO (usado pelo db)

MONGO_INITDB_ROOT_USERNAME=root # Nome do usuário root do banco
MONGO_INITDB_ROOT_PASSWORD=Senha-forte  # Gerar senha forte 
MONGO_INITDB_DATABASE=eclipse-db-deploy


# 🌐 API

API_PORT=3008
CONNECTION_STRING=mongodb://root:Senha-forte@eclipsev3-db-deploy:27017/eclipse-db-deploy?authSource=admin


# 🔐 Segurança

JWT_SECRET=Senha-forte # Necessário gerar uma chave forte
NEXTAUTH_SECRET=Senha-forte # Necessário gerar uma chave forte

# 🌐 CORS
#Adicionar domínios conforme necessário, separados por vírgula. 
#Exemplo: http://dominio1.com,http://dominio2.com,https://eclipse.defensoria.df.gov.br

CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173,http://localhost:80,http://localhost,http://eclipse-api,http://eclipse-api:5173,http://localhost:3008

# 💻 Next.js
NEXT_PUBLIC_APP_VERSION=3.3.09.25

NEXT_PUBLIC_API_URL=http://localhost:3008/api # trocar conforme o domínio
API_INTERNAL_URL=http://eclipse-api:3008 # URL interna para comunicação entre serviços
NEXTAUTH_URL=http://localhost:3000 # trocar conforme o domínio

#Exemplo de domínio -> NEXT_PUBLIC_API_URL=https://eclipse.defensoria.df.gov.br/api/v1
#                   -> NEXTAUTH_URL=https://eclipse.defensoria.df.gov.br


# 👮 Admin Inicial
BASE_ADMIN_PASSWORD=Senha-forte #Necessário gerar uma senha forte
BASE_ADMIN_EMAIL=admin@admin.com

# ✉️ E-mail
EMAIL_USER=admin123@gmail.com
PASSWORD_USER=senha-gerada
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false

# ⚙️ Ambiente
NODE_ENV=production

MOBILE_BASE_URL=http://localhost:3000 #env para rota mobile de verificação QRCode

```

<div id="bkmrk-%60%60%60env-%23-%F0%9F%8C%90-api-api_p"></div>---

<div id="bkmrk--3"></div>### **Rodando Docker**

<p class="callout info">**Lembre-se de criar o arquivo .<span style="color: rgb(230, 126, 35);">env</span> na <span style="text-decoration: underline;">pasta raíz!</span>**</p>

---

```bash
sudo docker compose up --build
```

---

<p class="callout warning">**AVISOS IMPORTANTES**</p>

<div id="bkmrk--6"></div>#### ❗ **Não utilize os valores padrões em produção! 

<div id="bkmrk-%E2%9D%97-n%C3%A3o-utilize-os-val"><div style="padding-left: 40px;">*Antes de subir o sistema para qualquer ambiente real, substitua os seguintes campos por valores seguros e válidos:*</div>- 🔐 **Segurança** (*Criptografia*):

<div style="padding-left: 40px;">***JWT\_SECRET*** e ***NEXTAUTH\_SECRET*** → Gere uma **chave segura** com pelo menos 32 caracteres.</div><div style="padding-left: 40px;">  
</div><div>- **👮 Corregedor Inicial**:

</div><div style="padding-left: 40px;">**BASE\_ADMIN\_EMAIL**→ Altere para um e-mail real e controlado por você.</div><div style="padding-left: 40px;">**BASE\_ADMIN\_PASSWORD**→ Crie uma **senha forte**.</div><div>  
</div></div><div id="bkmrk-%E2%9C%89%EF%B8%8F-envio-de-e-mails%3A">- ✉️ **Envio de E-mails:**

</div><div id="bkmrk-email_user-%E2%86%92-um-e-ma"><div style="padding-left: 40px;">**EMAIL\_USER** → Um e-mail **Gmail válido**.</div><div style="padding-left: 40px;">**PASSWORD\_USER** → A **senha de app** gerada em [https://myaccount.google.com/apppasswords](https://myaccount.google.com/apppasswords) com a verificação em duas etapas ativada.</div></div><div id="bkmrk--7" style="padding-left: 40px;"></div><div id="bkmrk-%F0%9F%9B%A2%EF%B8%8F-aten%C3%A7%C3%A3o-com-o-mon">- 🛢️ **Atenção com o MongoDB:**

</div><div id="bkmrk-se-voc%C3%AA-alterar-os-v"><div style="padding-left: 40px;">Se você alterar os valores de **MONGO\_INITDB\_ROOT\_USERNAME**, **MONGO\_INITDB\_ROOT\_PASSWORD** ou **MONGO\_INITDB\_DATABASE**, lembre-se de atualizar também o valor da **CONNECTION\_STRING** *<span style="text-decoration: underline;">manualmente</span>*.</div>  
<div style="padding-left: 40px;">❌ O arquivo **.env <span style="text-decoration: underline;">não</span>** suporta interpolação de variáveis. Por isso, a string de conexão não é gerada automaticamente com base nos valores acima.</div><div style="padding-left: 40px;">  
</div></div><p class="callout danger">**🔐 Nunca compartilhe arquivos .env com informações sensíveis publicamente (GitHub, fóruns etc.).**</p>

# Desenvolvimento

*Para rodar o projeto em **desenvolvimento**, é necessário um arquivo de ambiente que deve ser colocado na pasta raiz do projeto com o nome **.env.dev***

<p class="callout warning">**A falta desse arquivo de ambiente irá acarretar em erro de build do docker!**</p>

---

### **.env.dev:** 

```bash
# 🌐 API
API_PORT=3008

# 🛢️ MongoDB
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=admin123
MONGO_INITDB_DATABASE=eclipse-db
CONNECTION_STRING=mongodb://root:admin123@eclipse-db:27017/eclipse?authSource=admin

# 🔐 Segurança
JWT_SECRET=secret
NEXTAUTH_SECRET=secret

# 🌐 CORS
CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173,http://localhost:80,http://localhost,http://eclipse-api,http://eclipse-api:5173,http://localhost:3008

# 💻 Next.js
NEXT_PUBLIC_APP_VERSION=3.1.05.25
NEXT_PUBLIC_API_URL=http://localhost:3008/api
API_INTERNAL_URL=http://eclipse-api:3008
NEXTAUTH_URL=http://localhost:3000

# 👮 Admin Inicial
BASE_ADMIN_PASSWORD=admin123
BASE_ADMIN_EMAIL=admin@admin.com
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false

# ✉️ E-mail
EMAIL_USER=dominio-email@gmail.com
PASSWORD_USER=senha-gerada

# ⚙️ Ambiente
NODE_ENV=development
MOBILE_BASE_URL=http://localhost:3000

```

<div id="bkmrk-%60%60%60env-%23-%F0%9F%8C%90-api-api_p"></div>---

<div id="bkmrk--3"></div>### **Rodando Docker**

<p class="callout info">**Lembre-se de criar os arquivos .<span style="color: rgb(230, 126, 35);">env</span> na <span style="text-decoration: underline;">pasta raíz</span> e o <span style="color: rgb(22, 145, 121);">.env.production</span> na pasta <span style="text-decoration: underline;">/eclipse </span>antes!**</p>

---

```bash
sudo docker compose -f docker-compose.dev.yaml up --build
```

---

<p class="callout warning">**AVISOS IMPORTANTES**</p>

<div id="bkmrk--6"></div>#### ❗ **Não utilize os valores padrões em produção! 

<div id="bkmrk-%E2%9D%97-n%C3%A3o-utilize-os-val"><div style="padding-left: 40px;">*Antes de subir o sistema para qualquer ambiente real, substitua os seguintes campos por valores seguros e válidos:*</div>- 🔐 **Segurança** (*Criptografia*):

<div style="padding-left: 40px;">***JWT\_SECRET*** e ***NEXTAUTH\_SECRET*** → Gere uma **chave segura** com pelo menos 32 caracteres.</div><div style="padding-left: 40px;">  
</div><div>- **👮 Corregedor Inicial**:

</div><div style="padding-left: 40px;">**BASE\_ADMIN\_EMAIL**→ Altere para um e-mail real e controlado por você.</div><div style="padding-left: 40px;">**BASE\_ADMIN\_PASSWORD**→ Crie uma **senha forte**.</div><div>  
</div></div><div id="bkmrk-%E2%9C%89%EF%B8%8F-envio-de-e-mails%3A">- ✉️ **Envio de E-mails:**

</div><div id="bkmrk-email_user-%E2%86%92-um-e-ma"><div style="padding-left: 40px;">**EMAIL\_USER** → Um e-mail **Gmail válido**.</div><div style="padding-left: 40px;">**PASSWORD\_USER** → A **senha de app** gerada em [https://myaccount.google.com/apppasswords](https://myaccount.google.com/apppasswords) com a verificação em duas etapas ativada.</div></div><div id="bkmrk--7" style="padding-left: 40px;"></div><div id="bkmrk-%F0%9F%9B%A2%EF%B8%8F-aten%C3%A7%C3%A3o-com-o-mon">- 🛢️ **Atenção com o MongoDB:**

</div><div id="bkmrk-se-voc%C3%AA-alterar-os-v"><div style="padding-left: 40px;">Se você alterar os valores de **MONGO\_INITDB\_ROOT\_USERNAME**, **MONGO\_INITDB\_ROOT\_PASSWORD** ou **MONGO\_INITDB\_DATABASE**, lembre-se de atualizar também o valor da **CONNECTION\_STRING** *<span style="text-decoration: underline;">manualmente</span>*.</div>  
<div style="padding-left: 40px;">❌ O arquivo **.env <span style="text-decoration: underline;">não</span>** suporta interpolação de variáveis. Por isso, a string de conexão não é gerada automaticamente com base nos valores acima.</div><div style="padding-left: 40px;">  
</div></div><p class="callout danger">**🔐 Nunca compartilhe arquivos .env com informações sensíveis publicamente (GitHub, fóruns etc.).**</p>

# Artefatos



# .env

<div id="bkmrk-%23-%F0%9F%8C%90-api-api_port%3D300"><div>\# 🌐 API</div><div>API_PORT=3008</div>  
<div>\# 🛢️ MongoDB</div><div>MONGO_INITDB_ROOT_USERNAME=root</div><div>MONGO_INITDB_ROOT_PASSWORD=admin123</div><div>MONGO_INITDB_DATABASE=eclipse-db-deploy</div><div>CONNECTION_STRING=mongodb://root:admin123@eclipse-db-deploy:27017/eclipse?authSource=admin</div>  
<div>\# 🔐 Segurança</div><div>JWT_SECRET=secret</div><div>NEXTAUTH_SECRET=secret</div>  
<div>\# 🌐 CORS</div><div>CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173,http://localhost:80,http://localhost,http://eclipse-api,http://eclipse-api-deploy:5173</div>  
<div>\# 💻 Next.js</div><div>NEXT_PUBLIC_APP_VERSION=3.1.05.25</div><div>NEXT_PUBLIC_API_URL=http://localhost:3008/api/v1</div><div>NEXTAUTH_URL=http://localhost</div>  
<div>\# 👮 Admin Inicial</div><div>BASE_ADMIN_PASSWORD=admin123</div><div>BASE_ADMIN_EMAIL=admin@admin.com</div>  
<div>\# ✉️ E-mail</div><div>EMAIL_USER=dominio-email@gmail.com</div><div>PASSWORD_USER=senha-gerada</div>  
<div>\# ⚙️ Ambiente</div><div>NODE_ENV=production</div>  
</div>

# ENV EasyPanel

<div id="bkmrk-%23-%F0%9F%9B%A2%EF%B8%8F-mongo-%28usado-pe"><div>\# 🛢️ MONGO (usado pelo db)</div><div>MONGO_INITDB_ROOT_USERNAME=root</div><div>MONGO_INITDB_ROOT_PASSWORD=admin123</div><div>MONGO_INITDB_DATABASE=eclipse-db-deploy</div>  
  
<div>\# 🌐 API</div><div>API_PORT=3008</div><div>CONNECTION_STRING=mongodb://root:admin123@10.233.168.5:27017/eclipse?tls=false&amp;authSource=admin</div>  
  
<div>\# 🔐 Segurança</div>  
<div>JWT_SECRET=a7f3c19e6b2d8f40</div><div>NEXTAUTH_SECRET=3c9a5d1f0e72b6c8</div>  
<div>\# 🌐 CORS</div><div>CORS_ALLOWED_ORIGINS=https://eclipse.ljit.com.br,https://eclipseapi.ljit.com.br</div><div>\#CORS_ALLOW_ALL_ORIGINS=True</div>  
<div>\# 💻 Next.js</div><div>NEXT_PUBLIC_APP_VERSION=3.3.09.25</div>  
<div>NEXT_PUBLIC_API_URL=https://eclipseapi.ljit.com.br/api</div><div>NEXTAUTH_URL=https://eclipse.ljit.com.br</div>  
  
<div>\# 👮 Admin Inicial</div><div>BASE_ADMIN_PASSWORD=dpdf@2024</div><div>BASE_ADMIN_EMAIL=admin@admin.com</div>  
<div>\# ✉️ E-mail</div><div>EMAIL_USER=admin123@gmail.com</div><div>PASSWORD_USER=dpdf@2024</div><div>SMTP_HOST=smtp.gmail.com</div><div>SMTP_PORT=587</div><div>SMTP_SECURE=false</div>  
<div>\# ⚙️ Ambiente</div><div>NODE_ENV=production</div>  
</div>