{
  "id": "migration-base-05-media",
  "title": "Migration base 05 — media",
  "description": "Estado atual do armazenamento de mídia polimórfica do Spatie Media Library.",
  "type": "migration-reference",
  "status": "implemented",
  "visibility": "public",
  "tags": [
    "sge/migrations",
    "sge/arquivos",
    "sge/banco-de-dados"
  ],
  "related": [
    "migration-16-generated-documents"
  ],
  "sourceRefs": [
    "https://github.com/sge-suite/sge/blob/master/database/migrations/2026_08_06_201414_create_media_table.php"
  ],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "> [!success] Estado\n> Implementada no arquivo `2026_08_06_201414_create_media_table.php` para o Spatie Media Library.\n\n## Contrato atual\n\n| Campo                                   | Regra                                                                               |\n| --------------------------------------- | ----------------------------------------------------------------------------------- |\n| `id`                                    | bigint, chave primária.                                                             |\n| `model_type` / `model_id`               | morph obrigatório e indexado.                                                       |\n| `uuid`                                  | nullable e único.                                                                   |\n| `collection_name`, `name`, `file_name`  | identificação do arquivo.                                                           |\n| `mime_type`, `disk`, `conversions_disk` | armazenamento/conversões.                                                           |\n| `size`                                  | unsigned integer grande.                                                            |\n| JSONs                                   | `manipulations`, `custom_properties`, `generated_conversions`, `responsive_images`. |\n| `order_column`                          | nullable e indexado.                                                                |\n| timestamps                              | nullable.                                                                           |\n\n## Uso no SGE\n\nTemplates DOCX podem usar `Media`. Documentos finais gerados e arquivos fornecidos pela concedente continuam fora do escopo, conforme [`generated_documents`](doc:migration-16-generated-documents).\n\n## Rollback atual\n\nO arquivo não define `down()`. Não remover a tabela em produção manualmente sem confirmar o impacto nos arquivos físicos e no banco.\n\n## Checklist\n\n- [x] Criar morphs e metadados de mídia.\n- [x] Criar campos JSON e discos de conversão.\n- [ ] Definir collections permitidas para templates.\n- [ ] Validar MIME, tamanho e extensão DOCX no upload.\n- [ ] Definir política de exclusão de mídia órfã.\n- [ ] Testar associação de template/version a `Media`.\n- [ ] Documentar discos locais e de produção.",
  "sections": [
    {
      "id": "contrato-atual",
      "level": 2,
      "title": "Contrato atual",
      "text": "| Campo                                   | Regra                                                                               | | --------------------------------------- | ----------------------------------------------------------------------------------- | | `id`                                    | bigint, chave primária.                                                             | | `model_type` / `model_id`               | morph obrigatório e indexado.                                                       | | `uuid`                                  | nullable e único.                                                                   | | `collection_name`, `name`, `file_name`  | identificação do arquivo.                                                           | | `mime_type`, `disk`, `conversions_disk` | armazenamento/conversões.                                                           | | `size`                                  | unsigned integer grande.                                                            | | JSONs                                   | `manipulations`, `custom_properties`, `generated_conversions`, `responsive_images`. | | `order_column`                          | nullable e indexado.                                                                | | timestamps                              | nullable.                                                                           |",
      "line": 4
    },
    {
      "id": "uso-no-sge",
      "level": 2,
      "title": "Uso no SGE",
      "text": "Templates DOCX podem usar `Media`. Documentos finais gerados e arquivos fornecidos pela concedente continuam fora do escopo, conforme [`generated_documents`](doc:migration-16-generated-documents).",
      "line": 18
    },
    {
      "id": "rollback-atual",
      "level": 2,
      "title": "Rollback atual",
      "text": "O arquivo não define `down()`. Não remover a tabela em produção manualmente sem confirmar o impacto nos arquivos físicos e no banco.",
      "line": 22
    },
    {
      "id": "checklist",
      "level": 2,
      "title": "Checklist",
      "text": "- [x] Criar morphs e metadados de mídia. - [x] Criar campos JSON e discos de conversão. - [ ] Definir collections permitidas para templates. - [ ] Validar MIME, tamanho e extensão DOCX no upload. - [ ] Definir política de exclusão de mídia órfã. - [ ] Testar associação de template/version a `Media`. - [ ] Documentar discos locais e de produção.",
      "line": 26
    }
  ],
  "sourcePath": "content/migration-base-05-media.md",
  "visuals": [],
  "apiVersion": 1
}
