> ## Documentation Index
> Fetch the complete documentation index at: https://docs.assessiq.digital/llms.txt
> Use this file to discover all available pages before exploring further.

# Banco de Dados

> Configuração do PostgreSQL com Prisma para desenvolvimento e produção.

## Opções de Banco

| Opção                 | Indicado para               | Custo              |
| --------------------- | --------------------------- | ------------------ |
| **Neon**              | Produção + Preview branches | Free tier generoso |
| **Supabase**          | Produção + realtime         | Free tier          |
| **PostgreSQL local**  | Desenvolvimento             | Gratuito           |
| **PostgreSQL no VPS** | Self-hosted + baixo custo   | Está no VPS        |

<Tip>
  O **Neon** é o banco recomendado porque suporta branches de banco de dados — você pode ter uma branch `preview` para testes e `main` para produção, análogo ao Git.
</Tip>

***

## Configuração com Neon

1. Crie uma conta em [neon.tech](https://neon.tech)
2. Crie um novo projeto
3. Copie as duas strings de conexão:
   * **Pooled** → `DATABASE_URL`
   * **Direct** → `DATABASE_URL_UNPOOLED`

```env theme={null}
DATABASE_URL="postgresql://user:pass@ep-xxx-yyy.us-east-1.aws.neon.tech/neondb?sslmode=require"
DATABASE_URL_UNPOOLED="postgresql://user:pass@ep-xxx-yyy.us-east-1.aws.neon.tech/neondb?sslmode=require"
```

***

## Comandos Prisma

| Comando                      | Descrição                                    |
| ---------------------------- | -------------------------------------------- |
| `pnpm prisma migrate dev`    | Cria e aplica migration em desenvolvimento   |
| `pnpm prisma migrate deploy` | Aplica migrations pendentes em produção      |
| `pnpm prisma migrate reset`  | Reseta o banco e re-aplica tudo (apenas dev) |
| `pnpm prisma db seed`        | Popula com dados iniciais                    |
| `pnpm prisma studio`         | UI visual para o banco                       |
| `pnpm prisma generate`       | Regenera o Prisma Client                     |
| `pnpm prisma db push`        | Sincroniza schema sem criar migrations       |

***

## Schema Principal

O schema está em `prisma/schema.prisma`. Os modelos principais são:

```prisma theme={null}
model Organization { ... }   // Multi-tenant
model User { ... }            // Autenticação + roles
model Teacher { ... }         // Perfil de professores
model Student { ... }         // Perfil de alunos
model Candidate { ... }       // Perfil de candidatos
model Form { ... }            // Testes/Formulários
model Question { ... }        // Questões do teste
model Option { ... }          // Opções de múltipla escolha
model Submission { ... }      // Respostas e resultados
model TestAssignment { ... }  // Aplicação de teste (token único)
```

***

## Backup do Banco

### Backup via pg\_dump (VPS)

```bash theme={null}
pg_dump $DATABASE_URL > backup_$(date +%Y%m%d).sql
```

### Backup via plataforma

Acesse **Admin → Gerenciamento de Dados → Gerar Backup** para exportar um JSON completo via API da plataforma.

***

## Soft Delete

Modelos que suportam soft delete têm o campo `deletedAt: DateTime?`. Registros excluídos não são removidos do banco — apenas marcados com a data de exclusão e filtrados automaticamente nas queries.
