# SaveInMed Seeder API

## Status (pronto x faltando)

**Pronto**
- Conteúdo descrito neste documento.

**Faltando**
- Confirmar no código o estado real das funcionalidades e atualizar esta seção conforme necessário.

---


Microserviço utilitário para popular o banco de dados com dados de teste para desenvolvimento e demonstração.

## ⚠️ AVISO IMPORTANTE

**Este serviço é DESTRUTIVO!** Ao rodar qualquer seed:
1. **REMOVE** todas as tabelas existentes (`companies`, `products`, `users`, etc.)
2. **RECRIA** as tabelas do zero.

### Campos da Tabela `companies`

O seeder cria a tabela `companies` com os seguintes campos:

| Campo | Tipo | Descrição |
|-------|------|-----------|
| `phone` | TEXT | Telefone de contato |
| `operating_hours` | TEXT | Horário de funcionamento |
| `is_24_hours` | BOOLEAN | Se funciona 24h |

> Para schema completo, veja [docs/database-schema.md](../docs/database-schema.md)

---

## 🎯 Modos de Operação

### 1. `mode=lean` (Desenvolvimento)
**Fluxo:** Limpa tudo > Cria tabelas > Cria 4 farmácias > **Cria Usuários para Login**.

Use este modo para desenvolvimento diário. Ele cria as seguintes credenciais de acesso:

| Farmácia | Função | Usuário | Senha |
|---|---|---|---|
| **Farmácia Central** | Dono | `dono1` | `123456` |
| | Colaborador | `colab1` | `123456` |
| | Entregador | `entregador1` | `123456` |
| **Farmácia Jundiaí** | Dono | `dono2` | `123456` |
| | Colaborador | `colab2` | `123456` |
| | Entregador | `entregador2` | `123456` |
| **Farmácia Jaiara** | Dono | `dono3` | `123456` |
| | Colaborador | `colab3` | `123456` |
| | Entregador | `entregador3` | `123456` |
| **Farmácia Universitária** | Dono | `dono4` | `123456` |
| | Colaborador | `colab4` | `123456` |
| | Entregador | `entregador4` | `123456` |
| **Global** | **Admin** | `admin` | `admin123` |

### 2. `mode=full` (Teste de Carga)
**Fluxo:** Limpa tudo > Cria tabelas > Gera ~400 farmácias e ~85k produtos.

**⚠️ Importante:** O modo FULL **NÃO** cria usuários de farmácia padrão para login, apenas o admin global pode existir (dependendo da implementação). Use apenas para testar performance de queries geográficas ou listagens massivas.

---

## 🚀 Como Rodar

### Pré-requisitos
- PostgreSQL rodando
- Go 1.22+

### 1. Configurar
Use o arquivo `.env.example` como base e configure as variáveis:

```bash
export DATABASE_URL=postgres://user:password@localhost:5432/saveinmed?sslmode=disable
export PORT=8216
```

### 2. Executar API
```bash
go run main.go
```

### 3. Disparar o Seed (Em outro terminal)

**Opção A: Resetar e Criar Dados de Dev (Lean)**
```bash
curl -X POST "http://localhost:8216/seed?mode=lean"
```
_Saída esperada:_
`"Lean seed completed. 4 Pharmacies. Users: 13. Pass: 123456 (admin: admin123)"`

**Opção B: Resetar e Criar Dados de Carga (Full)**
```bash
curl -X POST "http://localhost:8216/seed"
```

## 📜 Swagger/OpenAPI
O documento OpenAPI está disponível em:

```bash
curl http://localhost:8216/swagger.json
```

## 🐳 Docker (imagem otimizada)
Build:

```bash
docker build -t saveinmed-seeder-api .
```

Run:

```bash
docker run --rm -p 8216:8080 --env-file .env saveinmed-seeder-api
```

## ⚡ Fluxo Recomendado de Trabalho
1. Pare o backend principal (`backend-go`) para liberar conexões com o banco.
2. Rode o seeder: `go run main.go` em um terminal.
3. Dispare o curl: `curl -X POST "http://localhost:8216/seed?mode=lean"`.
4. Pare o seeder (Ctrl+C).
5. Inicie o backend principal novamente.
6. Faça login no painel com `dono1` / `123456`.
