# Migrations — Diário Oficial

Total: **33 migrations** (o inventário antigo listava 29; faltavam 1 de `path` e 3 de `generation_*`).
Banco: **PostgreSQL** (uso de `public.`, `to_char`, `ALTER COLUMN ... USING`).

## Tabelas Principais

| # | Migration | Tabela | Descrição |
|:-:|-----------|--------|-----------|
| 1 | `2023_01_16_152754` | `diario_certificados` | Certificados digitais (`name`, `path`, `cert`, `pkey`) |
| 2 | `2023_01_17_151845` | `diarios` | Tabela principal (+ FKs `id_certificado`, `id_complemento` self) |
| 3 | `2023_01_17_152132` | `diario_areas` | Áreas (migration **insere 8 áreas**) |
| 4 | `2023_01_17_152336` | `diario_sub_areas` | Subáreas (migration **insere 11 subáreas**) |
| 5 | `2023_01_17_152557` | `diario_has_areas` | Pivot diários ↔ áreas/matérias |
| 6 | `2023_05_31_144619` | `diario_configs` | Configurações globais |
| 7 | `2025_09_20_010852` | `diario_adendos` | Adendos (`title`, `path`, `order`, `diario_id`) — **sem model** |

## Alterações de Tabelas (ALTs)

| # | Migration | Tabela | O que adiciona / altera |
|:-:|-----------|--------|-------------------------|
| 8 | `2023_01_31_091405` | `diarios` | Converte `edicao` para `int` via `USING edicao::int` |
| 9 | `2023_02_06_152058` | `diario_sub_areas` | Insere subárea `LEI` |
| 10 | `2023_02_14_094019` | `resources` / `menu_orders` | Insere recursos `diario-area` e `diario-subarea` |
| 11 | `2023_05_31_144619` | `diario_configs` | FK `certificado_padrao` |
| 12 | `2024_07_03_221222` | `diarios` | Torna `lei_validadora` nullable |
| 13 | `2024_07_31_025708` | `diario_has_areas` | Adiciona `columns_number` (bigint, default 1) |
| 14 | `2024_09_17_090831` | `diarios` | Adiciona `permission_edit` (bool, default true) |
| 15 | `2024_10_31_022347` | `diarios` | Adiciona `columns_number` (guardado) e `has_line` |
| 16 | `2024_11_19_100001` | `diario_configs` | Adiciona `logo_position` e `header_img` (FK `archives`, ON DELETE SET NULL) |
| 17 | `2025_01_29_004016` | `diario_has_areas` | Adiciona `position` (ordenação, default 0) |
| 18 | `2025_09_19_160837` | `diarios` | Adiciona `line_style`, `line_color` |
| 19 | `2025_09_19_164216` | `diarios` | Adiciona `cover_image_id` (FK `archives`, ON DELETE CASCADE) |
| 20 | `2025_09_22_022119` | `diario_has_areas` | Adiciona `adendo_id`, `type` (varchar 50, default `text`) e torna `conteudo` nullable |
| 21 | `2025_09_22_143133` | `diario_has_areas` | Adiciona `file_in` (bool, default true) |
| 22 | `2025_09_22_203749` | `diario_has_areas` | **NÃO LISTADA na wiki antiga** — adiciona `path` e **remove `adendo_id`** |
| 23 | `2026_07_07_100002` | `diarios` | Adiciona `generation_status`, `generation_error`, `generation_started_at`, `generation_completed_at` |
| 24 | `2026_07_07_100004` | `diarios` | Adiciona `generation_progress` (texto JSON) |

## Views do Banco

Todas via `CREATE OR REPLACE VIEW` (PostgreSQL).

| # | Migration | View | Descrição |
|:-:|-----------|------|-----------|
| 25 | `2023_04_10_090049` | `diario_oficial` | View principal do DataTable |
| 26 | `2023_04_19_091650` | `diario_oficial` | Update (troca semântica `status`/`status_name`) |
| 27 | `2023_05_22_142218` | `diario_oficial_pdf` | Dados para o PDF (configs via JOIN + certificado) |
| 28 | `2023_05_29_133343` | `areas_do_diario` | View de áreas (`value`, `titulo`, `id`) |
| 29 | `2023_05_29_135015` | `sub_areas_do_diario` | View de subáreas (mesma forma) |
| 30 | `2023_09_18_110912` | `diario_oficial_pdf` | Update: configs via subqueries escalares |
| 31 | `2024_09_17_092831` | `diario_oficial` | Update com `permission_edit` |
| 32 | `2025_10_23_233343` | `areas_do_diario_two` | **Recriação idêntica** (sem mudança de schema) |
| 33 | `2025_10_23_235015` | `sub_areas_do_diario_two` | **Recriação idêntica** |
| — | `2026_07_07_100003` | `diario_oficial` | Update com `generation_status` (view **atual**) |

### Colunas finais da view `diario_oficial`

`value` (edição), `autor`, `data_publicacao` (`DD/MM/YYYY`), `status` (texto `Ativado`/`Desativado`),
`status_name` (`'true'`/`'false'`), `id`, `permission_edit`, `generation_status`, `download_link`.

### Tabela `diario_has_areas` (estado final)

`id`, `titulo`, `id_diario`, `id_area`, `id_subarea`, `conteudo` (nullable), `columns_number`,
`position`, `type` (`text`/`file`), `file_in`, **`path`**, `deleted_at`, timestamps.
O antigo `adendo_id` **não existe** mais no banco (adicionado na #20 e removido na #22).

## Notas sobre Resiliência

- **Soft Deletes**: todas as tabelas do módulo usam `deleted_at`.
- **Views versionadas**: novas views ganham sufixo `_two` quando recriadas.
- **Updates graduais**: alterações de schema em migrations separadas; colunas não são removidas
  (exceto `adendo_id`, removida e substituída por `path`).

> Para o schema consolidado coluna a coluna e o efeito colateral em `resources`/`menu_orders`,
> ver `19-INVENTARIO_COMPLETO.md`.
