@seedgrid/ai-toolkit 0.0.0-stage → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +151 -2
- package/dist/adapters/claude.js +114 -0
- package/dist/adapters/codex.js +108 -0
- package/dist/adapters/index.js +17 -0
- package/dist/adapters/shared.js +142 -0
- package/dist/adapters/types.js +1 -0
- package/dist/cli.js +203 -0
- package/dist/commands/common.js +98 -0
- package/dist/commands/doctor.js +290 -0
- package/dist/commands/init.js +9 -0
- package/dist/commands/install.js +107 -0
- package/dist/commands/remove.js +54 -0
- package/dist/commands/review.js +127 -0
- package/dist/commands/status.js +73 -0
- package/dist/commands/update.js +8 -0
- package/dist/commands/validate.js +27 -0
- package/dist/core/apply.js +181 -0
- package/dist/core/blocks.js +64 -0
- package/dist/core/content.js +528 -0
- package/dist/core/env.js +40 -0
- package/dist/core/frontmatter.js +29 -0
- package/dist/core/hash.js +14 -0
- package/dist/core/inspect.js +51 -0
- package/dist/core/lock.js +124 -0
- package/dist/core/paths.js +65 -0
- package/dist/core/plan.js +242 -0
- package/dist/core/tools.js +62 -0
- package/dist/core/types.js +11 -0
- package/dist/core/updates.js +121 -0
- package/docs/arquitetura.md +80 -0
- package/docs/compatibilidade.md +50 -0
- package/docs/formato.md +155 -0
- package/docs/instalacao.md +105 -0
- package/docs/manutencao.md +115 -0
- package/package.json +43 -4
- package/seedgridKB/SeedGrid/Extensions/Catalogo-de-enums.md +161 -0
- package/seedgridKB/SeedGrid/Extensions/Catalogo-de-propriedades.md +971 -0
- package/seedgridKB/SeedGrid/Extensions/Indice.md +63 -0
- package/seedgridKB/SeedGrid/Extensions/ai-pricing/Configuracao.md +124 -0
- package/seedgridKB/SeedGrid/Extensions/ai-pricing/Enums.md +40 -0
- package/seedgridKB/SeedGrid/Extensions/ai-pricing/Exemplos.md +97 -0
- package/seedgridKB/SeedGrid/Extensions/ai-pricing/Visao-geral.md +114 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Configuracao-Rust.md +69 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Configuracao.md +88 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Enums.md +33 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Exemplos.md +121 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Rust.md +126 -0
- package/seedgridKB/SeedGrid/Extensions/apikeys/Visao-geral.md +111 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Configuracao-Rust.md +93 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Configuracao.md +127 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Enums.md +66 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Exemplos.md +151 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Rust.md +120 -0
- package/seedgridKB/SeedGrid/Extensions/audit/Visao-geral.md +114 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Configuracao-Rust.md +136 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Configuracao.md +319 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Enums.md +131 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Exemplos.md +210 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Rust.md +135 -0
- package/seedgridKB/SeedGrid/Extensions/backup/Visao-geral.md +150 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Configuracao-Rust.md +86 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Configuracao.md +243 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Enums.md +165 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Exemplos.md +205 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Rust.md +109 -0
- package/seedgridKB/SeedGrid/Extensions/billing/Visao-geral.md +181 -0
- package/seedgridKB/SeedGrid/Extensions/broker/Configuracao-Rust.md +40 -0
- package/seedgridKB/SeedGrid/Extensions/broker/Visao-geral.md +114 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Configuracao-Rust.md +73 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Configuracao.md +112 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Enums.md +36 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Exemplos.md +149 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Rust.md +81 -0
- package/seedgridKB/SeedGrid/Extensions/cache/Visao-geral.md +90 -0
- package/seedgridKB/SeedGrid/Extensions/commons/Configuracao.md +107 -0
- package/seedgridKB/SeedGrid/Extensions/commons/Enums.md +105 -0
- package/seedgridKB/SeedGrid/Extensions/commons/Exemplos.md +141 -0
- package/seedgridKB/SeedGrid/Extensions/commons/Visao-geral.md +99 -0
- package/seedgridKB/SeedGrid/Extensions/exchange/Configuracao.md +122 -0
- package/seedgridKB/SeedGrid/Extensions/exchange/Enums.md +29 -0
- package/seedgridKB/SeedGrid/Extensions/exchange/Exemplos.md +82 -0
- package/seedgridKB/SeedGrid/Extensions/exchange/Visao-geral.md +118 -0
- package/seedgridKB/SeedGrid/Extensions/filemanagement/Configuracao-Rust.md +110 -0
- package/seedgridKB/SeedGrid/Extensions/filemanagement/Configuracao.md +157 -0
- package/seedgridKB/SeedGrid/Extensions/filemanagement/Exemplos.md +157 -0
- package/seedgridKB/SeedGrid/Extensions/filemanagement/Rust.md +70 -0
- package/seedgridKB/SeedGrid/Extensions/filemanagement/Visao-geral.md +88 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Configuracao-Rust.md +124 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Configuracao.md +195 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Enums.md +71 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Exemplos.md +149 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Rust.md +139 -0
- package/seedgridKB/SeedGrid/Extensions/login-tenancy/Visao-geral.md +130 -0
- package/seedgridKB/SeedGrid/Extensions/notification/Configuracao.md +141 -0
- package/seedgridKB/SeedGrid/Extensions/notification/Enums.md +52 -0
- package/seedgridKB/SeedGrid/Extensions/notification/Exemplos.md +141 -0
- package/seedgridKB/SeedGrid/Extensions/notification/Visao-geral.md +113 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Configuracao-Rust.md +67 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Configuracao.md +94 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Enums.md +79 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Exemplos.md +172 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Rust.md +107 -0
- package/seedgridKB/SeedGrid/Extensions/privacy/Visao-geral.md +90 -0
- package/seedgridKB/SeedGrid/Extensions/realtime/Configuracao-Rust.md +72 -0
- package/seedgridKB/SeedGrid/Extensions/realtime/Configuracao.md +104 -0
- package/seedgridKB/SeedGrid/Extensions/realtime/Exemplos.md +104 -0
- package/seedgridKB/SeedGrid/Extensions/realtime/Rust.md +69 -0
- package/seedgridKB/SeedGrid/Extensions/realtime/Visao-geral.md +105 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao-Rust.md +68 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Configuracao.md +186 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Enums.md +96 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Exemplos.md +229 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Rust.md +80 -0
- package/seedgridKB/SeedGrid/Extensions/resilience/Visao-geral.md +112 -0
- package/seedgridKB/SeedGrid/Extensions/runtime/Configuracao-Rust.md +90 -0
- package/seedgridKB/SeedGrid/Extensions/runtime/Visao-geral.md +114 -0
- package/seedgridKB/SeedGrid/Extensions/security/Configuracao-Rust.md +327 -0
- package/seedgridKB/SeedGrid/Extensions/security/Configuracao.md +510 -0
- package/seedgridKB/SeedGrid/Extensions/security/Enums.md +95 -0
- package/seedgridKB/SeedGrid/Extensions/security/Exemplos.md +218 -0
- package/seedgridKB/SeedGrid/Extensions/security/Rust.md +203 -0
- package/seedgridKB/SeedGrid/Extensions/security/Visao-geral.md +131 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Configuracao-Rust.md +188 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Configuracao.md +345 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Enums.md +117 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Exemplos.md +205 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Rust.md +161 -0
- package/seedgridKB/SeedGrid/Extensions/subdomain-tenancy/Visao-geral.md +142 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Configuracao-Rust.md +75 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Configuracao.md +152 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Enums.md +198 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Exemplos.md +173 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Rust.md +83 -0
- package/seedgridKB/SeedGrid/Extensions/whatsapp/Visao-geral.md +99 -0
- package/seedgridKB/SeedGrid/Mapa-dos-repositorios.md +112 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/Indice.md +323 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/buttons/API.md +257 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/buttons/Exemplos.md +307 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/buttons/Visao-geral.md +51 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/datatable/API.md +174 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/datatable/Exemplos.md +236 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/datatable/Visao-geral.md +76 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/digits/API.md +339 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/digits/Exemplos.md +311 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/digits/Visao-geral.md +57 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/editor/API.md +125 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/editor/Exemplos.md +116 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/editor/Visao-geral.md +86 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/API.md +490 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/Exemplos.md +544 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/feedback-e-exibicao/Visao-geral.md +69 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/API.md +113 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/Exemplos.md +159 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/fundamentos/Visao-geral.md +92 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/API.md +516 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Exemplos.md +629 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/gadgets/Visao-geral.md +80 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/API.md +615 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/Exemplos.md +384 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-selecao/Visao-geral.md +111 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/API.md +661 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Exemplos.md +312 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/inputs-texto/Visao-geral.md +123 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/layout/API.md +1090 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/layout/Exemplos.md +1172 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/layout/Visao-geral.md +98 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/Visao-geral.md +98 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-apikeys.md +118 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-audit.md +88 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-backup.md +131 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-billing-platform.md +132 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-billing-user.md +120 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-login-tenancy.md +119 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-security.md +427 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-self-enter.md +104 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/modulos/fe-subdomain-tenancy.md +110 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/API.md +490 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Exemplos.md +561 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/navegacao-e-overlay/Visao-geral.md +82 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/Visao-geral.md +68 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-commons.md +61 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-core.md +140 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-playground.md +112 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/pacotes/fe-theme.md +97 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/providers/API.md +177 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/providers/Exemplos.md +332 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/providers/Visao-geral.md +106 -0
- package/seedgridKB/SeedGrid/SeedGrid-components/showcase.md +70 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/arquiteto.md +53 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/backend-java.md +45 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/backend-rust.md +43 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/frontend-react.md +41 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/qa.md +44 -0
- package/seedgridKB/SeedGrid/Toolkit/agents/revisor.md +40 -0
- package/seedgridKB/SeedGrid/Toolkit/references/fluxo-de-trabalho.md +78 -0
- package/seedgridKB/SeedGrid/Toolkit/references/glossario.md +15 -0
- package/seedgridKB/SeedGrid/Toolkit/references/modos-shared-native.md +27 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/backend-java-seedgrid.md +54 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/coordenacao.md +39 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/formato-entrega.md +29 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/frontend-seedgrid.md +47 -0
- package/seedgridKB/SeedGrid/Toolkit/rules/personalizacao-local.md +22 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/planejar-mudanca/SKILL.md +38 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/revisar-codigo/SKILL.md +33 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/revisar-codigo/references/checklist.md +25 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-backend-crud/SKILL.md +29 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-bump/SKILL.md +26 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/SKILL.md +221 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/agents/openai.yaml +4 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/checklist.md +31 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/patterns.md +185 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-crud/references/routing.md +66 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/SKILL.md +56 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/agents/openai.yaml +4 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/references/checklist.md +32 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-new-screen/references/steps.md +114 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/seedgrid-review/SKILL.md +61 -0
- package/seedgridKB/SeedGrid/Toolkit/skills/validar-mudanca/SKILL.md +29 -0
- package/seedgridKB/SeedGrid/Toolkit/templates/decisao-arquitetura.md +29 -0
- package/seedgridKB/SeedGrid/Toolkit/templates/especificacao-tarefa.md +32 -0
- package/seedgridKB/SeedGrid/Toolkit/templates/relatorio-validacao.md +30 -0
- package/seedgridKB/SeedGrid/Versoes.md +64 -0
- package/seedgridKB/SeedGrid/Visao-geral.md +35 -0
- package/seedgridKB/manifest.json +142 -0
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, extension, backup, configuracao]
|
|
3
|
+
fonte: java/seedgrid-quarkus-ext-backup
|
|
4
|
+
branch: main
|
|
5
|
+
commit: 3bed4075ea
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Configuração — backup (Quarkus)
|
|
10
|
+
|
|
11
|
+
Voltar: [[SeedGrid/Extensions/backup/Visao-geral|Visão geral do backup]] · [[SeedGrid/Extensions/backup/Exemplos|Exemplos]] · [[SeedGrid/Extensions/backup/Enums|Enums]] · [[SeedGrid/Extensions/backup/Rust|Porte Rust]]
|
|
12
|
+
|
|
13
|
+
## 1. Cabeçalho
|
|
14
|
+
|
|
15
|
+
| Item | Valor |
|
|
16
|
+
|---|---|
|
|
17
|
+
| Prefixo | `seedgrid.backup` |
|
|
18
|
+
| Classe de config | `BackupConfig` (`@ConfigMapping(prefix = "seedgrid.backup")`) com grupos `NotificationConfig`, `MailerConfig`, `CsvConfig`, `FilesystemConfig`, `S3Config`, `MinioConfig`, `AzureBlobConfig`, `GoogleDriveConfig`, `OnedriveConfig`, `GcsConfig` |
|
|
19
|
+
| Registro | `BackupProcessor#config()` → `ConfigMappingBuildItem(BackupConfig.class, "seedgrid.backup")` |
|
|
20
|
+
| Mecanismo | SmallRye `@ConfigMapping` + `@WithDefault`; dois intervalos lidos também por expressão `@Scheduled(every = "{...}")` |
|
|
21
|
+
| Fase | **Runtime** (ConfigMapping em módulo runtime; não há `@ConfigRoot` nem `*BuildTimeConfig`) |
|
|
22
|
+
| Valores pré-configurados | `runtime/src/main/resources/META-INF/microprofile-config.properties` (ordinal 100) define valores e **aliases de env var** para várias chaves; o `application.properties` do host (ordinal 250) e env vars (ordinal 300) sobrescrevem |
|
|
23
|
+
| Outros mecanismos procurados | `@ConfigProperty`, `ConfigProvider.getConfig()`, `getValue/getOptionalValue`, `Config` injetado, `@IfBuildProperty`/`@LookupIfProperty`/`@UnlessBuildProperty`: **nenhum encontrado** no runtime/deployment (Confirmado por grep) |
|
|
24
|
+
|
|
25
|
+
Abreviações de origem usadas nas tabelas (todas relativas a `seedgrid-platform`):
|
|
26
|
+
- **BC** = `java/seedgrid-quarkus-ext-backup/runtime/src/main/java/br/com/seedgrid/backup/configs/BackupConfig.java`
|
|
27
|
+
- **MP** = `java/seedgrid-quarkus-ext-backup/runtime/src/main/resources/META-INF/microprofile-config.properties`
|
|
28
|
+
- **buildStorageConfig** = método privado homônimo duplicado em `services/ExportService`, `controllers/ExportController`, `exporters/CsvZipExporter`, `exporters/SqlDumpZipExporter` (monta o `Map` passado ao `FileStorageRegistry` do filemanagement)
|
|
29
|
+
|
|
30
|
+
> **Padrão efetivo**: quando o MP define um valor, ele vale como padrão efetivo mesmo que a interface não tenha `@WithDefault` (ex.: `minio.region`, `mailer.*`). Na coluna Padrão indico ambos quando diferem. Valores vazios (`${ENV:}`) resultam em ausência (`Optional.empty()`) — **Inferência** (regra SmallRye: valor vazio = propriedade não definida).
|
|
31
|
+
|
|
32
|
+
## 2. Propriedades da extensão
|
|
33
|
+
|
|
34
|
+
### 2.1 Execução, fila e retenção
|
|
35
|
+
|
|
36
|
+
| Propriedade | Tipo | Valores aceitos | Padrão | Obrigatória | Comportamento | Uso | Relações | Fase | Origem |
|
|
37
|
+
|---|---|---|---|---|---|---|---|---|---|
|
|
38
|
+
| `seedgrid.backup.storage` | String | `filesystem`, `s3`, `minio`, `azure-blob`, `google-drive`, `onedrive`, `gcs` (switch com `toLowerCase`) | `filesystem` (`@WithDefault`; MP: `${SEEDGRID_BACKUP_STORAGE:filesystem}`) | Não | Backend onde os ZIPs são gravados; outro valor → `IllegalArgumentException("Unknown storage type")` ao gravar. Na leitura/exclusão o tipo é re-derivado do `storageKey` (URI) do artefato, não desta chave | Gravação de artefatos | Exige o grupo de chaves do backend escolhido (2.5) | Runtime | BC `storage()`; consumo `ExportService#createStorageServiceAdapter`, `CsvZipExporter#storeExport`, `SqlDumpZipExporter` |
|
|
39
|
+
| `seedgrid.backup.async-enabled` | boolean | `true`/`false` | `true` | Não | `true`: ao criar o job dispara thread de plataforma daemon `seedgrid-backup-export-<jobId>`. `false`: job fica `QUEUED` até o scheduler de fila | Criação de job | `queue-poll-interval`, `max-concurrent-exports` | Runtime | BC `asyncEnabled()`; consumo `ExportService#createExportJob` |
|
|
40
|
+
| `seedgrid.backup.max-concurrent-exports` | int | inteiro ≥ 0 | `1` (BC e MP) | Não | Teto **global** (somando todos os tenants) de jobs `RUNNING` para o scheduler iniciar novos jobs `QUEUED`; slots divididos entre tenants (`max(1, slots/tenants)`). Não limita o caminho assíncrono direto (`async-enabled=true`) — **Confirmado** (só lido no scheduler) | Scheduler de fila | `queue-poll-interval` | Runtime | BC `maxConcurrentExports()`; consumo `BackupSchedulerService#processQueuedExports` |
|
|
41
|
+
| `seedgrid.backup.queue-poll-interval` | String (duração do Quarkus Scheduler) | ex.: `30s`, `5m`, `PT30S` | `30s` (BC e MP) | Não | Intervalo do `@Scheduled(every = "{seedgrid.backup.queue-poll-interval}")`. A interface só declara; a leitura efetiva é pela expressão do scheduler | Scheduler de fila | `async-enabled` | Runtime (startup do scheduler) | BC `queuePollInterval()` (sem chamada direta); consumo `BackupSchedulerService#processQueuedExports` (anotação) |
|
|
42
|
+
| `seedgrid.backup.retention-days` | int | inteiro (dias) | `7` (BC e MP) | Não | Ao concluir (`DONE`), `expiresAt = agora + N dias`. A limpeza diária (cron fixo `0 1 0 * * ?`) apaga job + artefatos com `expiresAt < agora`. Alterar não afeta jobs já concluídos | Retenção | — | Runtime | BC `retentionDays()`; consumo `ExportService#executeExport`; limpeza `BackupSchedulerService#cleanExpiredExports` |
|
|
43
|
+
| `seedgrid.backup.excluded-domain-entity-packages` | `Optional<List<String>>` (lista separada por vírgula) | prefixos de pacote Java | — (vazio) | Não | Entidades JPA cujo pacote começa com algum prefixo são puladas no escopo `DOMAIN` (evita consultar entidades de outra persistence unit, ex. `seedgrid-audit-postgresql` quando a estratégia ativa de auditoria é outra) | Export `DOMAIN` | escopo `DOMAIN` | Runtime | BC `excludedDomainEntityPackages()`; consumo `ExtractDataService` (construtor, `isExcludedFromDomainExport`) |
|
|
44
|
+
|
|
45
|
+
### 2.2 Notificação
|
|
46
|
+
|
|
47
|
+
| Propriedade | Tipo | Valores aceitos | Padrão | Obrigatória | Comportamento | Uso | Relações | Fase | Origem |
|
|
48
|
+
|---|---|---|---|---|---|---|---|---|---|
|
|
49
|
+
| `seedgrid.backup.notification.enabled` | boolean | `true`/`false` | `true` (BC e MP) | Não | Liga o scheduler de notificação e entra em `EmailExportNotificationService#isEnabled()` | Notificação | `mailer.from`, `mailer.host` | Runtime | BC `NotificationConfig#enabled()`; consumo `NotificationSchedulerService#processNotifications`, `EmailExportNotificationService#isEnabled` |
|
|
50
|
+
| `seedgrid.backup.notification.poll-interval` | String (duração do Quarkus Scheduler) | ex.: `5m`, `PT5M` | `5m` (BC e MP) | Não | Intervalo do `@Scheduled(every = "{seedgrid.backup.notification.poll-interval}")` | Notificação | — | Runtime | BC `NotificationConfig#pollInterval()` (sem chamada direta); consumo anotação em `NotificationSchedulerService#processNotifications` |
|
|
51
|
+
| `seedgrid.backup.notification.max-retries` | int | inteiro | `3` (BC e MP) | Não | Jobs `DONE` com `notificationAttempts < max-retries` são (re)notificados; sucesso → `DONE_NOTIFIED` | Notificação | `retry-delay` | Runtime | BC `NotificationConfig#maxRetries()`; consumo `NotificationSchedulerService#processTenant` → `ExportJobRepository#findReadyForNotification` |
|
|
52
|
+
| `seedgrid.backup.notification.retry-delay` | `java.time.Duration` | ISO-8601 (ex. `PT15M`) ou formato curto SmallRye (Inferência) | `PT15M` (BC e MP) | Não | Espera mínima desde `lastNotificationAttempt` antes de nova tentativa | Notificação | `max-retries` | Runtime | BC `NotificationConfig#retryDelay()`; consumo `NotificationSchedulerService#processTenant` |
|
|
53
|
+
|
|
54
|
+
### 2.3 Mailer (notificação padrão por e-mail via Vert.x Mail)
|
|
55
|
+
|
|
56
|
+
O `EmailExportNotificationService` cria um `io.vertx.ext.mail.MailClient` próprio a partir destas chaves (`@PostConstruct init`) **se** `isEnabled()` = `notification.enabled && mailer.from presente && mailer.host presente`.
|
|
57
|
+
|
|
58
|
+
| Propriedade | Tipo | Valores aceitos | Padrão | Obrigatória | Comportamento | Uso | Relações | Fase | Origem |
|
|
59
|
+
|---|---|---|---|---|---|---|---|---|---|
|
|
60
|
+
| `seedgrid.backup.mailer.from` | `Optional<String>` | e-mail | interface: —; MP: `${SEEDGRID_BACKUP_MAILER_FROM:noreply@example.com}` | Condicional (necessária para enviar; ausente → notificação desabilitada) | Remetente (From). Sem ela `notifyReady` lança `IllegalStateException` | E-mail | `mailer.host`, `notification.enabled` | Runtime | BC `MailerConfig#from()`; consumo `EmailExportNotificationService#notifyReady`, `#isEnabled` |
|
|
61
|
+
| `seedgrid.backup.mailer.host` | `Optional<String>` | hostname SMTP | interface: —; MP: `${SEEDGRID_BACKUP_MAILER_HOST:smtp.gmail.com}` | Condicional (idem) | Host SMTP (`MailConfig#setHostname`) | E-mail | `mailer.port` | Runtime | BC `MailerConfig#host()`; consumo `EmailExportNotificationService#init`, `#isEnabled` |
|
|
62
|
+
| `seedgrid.backup.mailer.port` | `Optional<Integer>` | porta | interface: —; MP: `${SEEDGRID_BACKUP_MAILER_PORT:587}` | Não | Porta SMTP | E-mail | `start-tls` | Runtime | BC `MailerConfig#port()`; consumo `EmailExportNotificationService#init` |
|
|
63
|
+
| `seedgrid.backup.mailer.start-tls` | `Optional<String>` | `REQUIRED`, `OPTIONAL`, `DISABLED` (case-insensitive; outro valor é ignorado silenciosamente) | interface: —; MP: `${SEEDGRID_BACKUP_MAILER_START_TLS:REQUIRED}` | Não | `MailConfig#setStarttls` | E-mail | `port` | Runtime | BC `MailerConfig#startTls()`; consumo `EmailExportNotificationService#init` |
|
|
64
|
+
| `seedgrid.backup.mailer.username` | `Optional<String>` | texto | interface: —; MP: `${SEEDGRID_BACKUP_MAILER_USERNAME:}` (vazio) | Não (depende do SMTP) | Usuário SMTP | E-mail | `password` | Runtime | BC `MailerConfig#username()`; consumo `EmailExportNotificationService#init` |
|
|
65
|
+
| 🔒 `seedgrid.backup.mailer.password` | `Optional<String>` | texto | interface: —; MP: `${SEEDGRID_BACKUP_MAILER_PASSWORD:}` (vazio) | Não (depende do SMTP) | Senha SMTP | E-mail | `username` | Runtime | BC `MailerConfig#password()`; consumo `EmailExportNotificationService#init` |
|
|
66
|
+
| `seedgrid.backup.mailer.auth-methods` | `Optional<String>` | métodos SMTP AUTH separados por espaço | interface: —; MP: `${SEEDGRID_BACKUP_MAILER_AUTH_METHODS:PLAIN LOGIN}`; código: ausente/branco → `PLAIN LOGIN` | Não | Fixa os métodos de AUTH (evita XOAUTH2 automático do Vert.x com Gmail, que derruba o socket com 535) | E-mail | — | Runtime | BC `MailerConfig#authMethods()`; consumo `EmailExportNotificationService#init` |
|
|
67
|
+
|
|
68
|
+
> ⚠️ **Confirmado pelo código + MP**: como `from` e `host` têm fallback no MP, `isEnabled()` é `true` por padrão — o mail client é criado contra `smtp.gmail.com` sem credenciais e o scheduler tentará enviar (e falhar, registrando `notificationError`) até `max-retries`. Para hosts sem SMTP: `seedgrid.backup.notification.enabled=false` ou fornecer um `ExportNotificationService` próprio.
|
|
69
|
+
|
|
70
|
+
### 2.4 CSV (exporter `CSV_ZIP`)
|
|
71
|
+
|
|
72
|
+
| Propriedade | Tipo | Valores aceitos | Padrão | Obrigatória | Comportamento | Uso | Relações | Fase | Origem |
|
|
73
|
+
|---|---|---|---|---|---|---|---|---|---|
|
|
74
|
+
| `seedgrid.backup.csv.delimiter` | String | só o 1º caractere é usado no CSV | `,` | Não | Delimitador (`charAt(0)`); string inteira gravada no manifest (`csvOptions.delimiter`) | `CSV_ZIP` | — | Runtime | BC `CsvConfig#delimiter()`; consumo `CsvZipExporter#generateCsv`, `#buildManifest` |
|
|
75
|
+
| `seedgrid.backup.csv.quote-char` | String | só o 1º caractere é usado | `"` | Não | Caractere de aspas; também gravado no manifest | `CSV_ZIP` | — | Runtime | BC `CsvConfig#quoteChar()`; consumo `CsvZipExporter#generateCsv`, `#buildManifest` |
|
|
76
|
+
| `seedgrid.backup.csv.encoding` | String | nome de charset Java (ex. `UTF-8`, `ISO-8859-1`) | `UTF-8` | Não | Encoding dos bytes de cada `data/<tabela>.csv` | `CSV_ZIP` | — | Runtime | BC `CsvConfig#encoding()`; consumo `CsvZipExporter#generateCsvFiles` |
|
|
77
|
+
|
|
78
|
+
### 2.5 Storage (repassado ao `seedgrid-filemanagement`)
|
|
79
|
+
|
|
80
|
+
Cada chave é copiada para o `Map<String,String>` de config do storage (nome da chave do mapa entre parênteses) em **buildStorageConfig**, somente quando `storage` (ou o tipo do `storageKey`) corresponde ao backend. A validação/uso final é feita pelas factories do filemanagement (`java/seedgrid-quarkus-lib-filemanagement/src/main/java/br/com/seedgrid/filemanagement/factories/*StorageFactory#create`), que lançam `StorageConfigurationException` na primeira gravação/leitura quando falta chave obrigatória — **Confirmado**. Ver [[SeedGrid/Extensions/filemanagement/Configuracao|Configuração do filemanagement]].
|
|
81
|
+
|
|
82
|
+
| Propriedade | Tipo | Valores aceitos | Padrão | Obrigatória | Comportamento | Uso | Relações | Fase | Origem |
|
|
83
|
+
|---|---|---|---|---|---|---|---|---|---|
|
|
84
|
+
| `seedgrid.backup.filesystem.base-path` | String | caminho de diretório | `/var/seedgrid/files` (BC; MP: `${SEEDGRID_BACKUP_FILESYSTEM_BASE:/var/seedgrid/files}`) | Não (tem padrão; vazio → erro) | (`base-path`) diretório raiz, criado se não existir (precisa ser gravável); artefatos vão em `<schema>/exports/` | `storage=filesystem` | `storage` | Runtime | BC `FilesystemConfig#basePath()`; consumo buildStorageConfig |
|
|
85
|
+
| `seedgrid.backup.s3.bucket` | `Optional<String>` | nome de bucket | — | Condicional (`storage=s3`) | (`bucket`) | `storage=s3` | `storage` | Runtime | BC `S3Config#bucket()`; consumo buildStorageConfig |
|
|
86
|
+
| `seedgrid.backup.s3.region` | `Optional<String>` | região AWS | — (factory: `us-east-1`) | Não | (`region`) | `storage=s3` | — | Runtime | BC `S3Config#region()`; consumo buildStorageConfig |
|
|
87
|
+
| 🔒 `seedgrid.backup.s3.access-key` | `Optional<String>` | texto | — | Não (sem o par access/secret usa a cadeia padrão de credenciais do AWS SDK) | (`access-key`) | `storage=s3` | `secret-key` | Runtime | BC `S3Config#accessKey()`; consumo buildStorageConfig |
|
|
88
|
+
| 🔒 `seedgrid.backup.s3.secret-key` | `Optional<String>` | texto | — | Não (idem) | (`secret-key`) | `storage=s3` | `access-key` | Runtime | BC `S3Config#secretKey()`; consumo buildStorageConfig |
|
|
89
|
+
| `seedgrid.backup.s3.endpoint` | `Optional<String>` | URL | — | Não | (`endpoint`) endpoint S3-compatível | `storage=s3` | — | Runtime | BC `S3Config#endpoint()`; consumo buildStorageConfig |
|
|
90
|
+
| `seedgrid.backup.minio.bucket` | `Optional<String>` | nome de bucket | — (MP: `${SEEDGRID_BACKUP_MINIO_BUCKET:}`) | Condicional (`storage=minio`) | (`bucket`) | `storage=minio` | `storage` | Runtime | BC `MinioConfig#bucket()`; consumo buildStorageConfig |
|
|
91
|
+
| `seedgrid.backup.minio.region` | `Optional<String>` | região | interface: —; MP: `${SEEDGRID_BACKUP_MINIO_REGION:us-east-1}` (factory também usa `us-east-1`) | Não | (`region`) | `storage=minio` | — | Runtime | BC `MinioConfig#region()`; consumo buildStorageConfig |
|
|
92
|
+
| 🔒 `seedgrid.backup.minio.access-key` | `Optional<String>` | texto | — (MP: `${SEEDGRID_BACKUP_MINIO_ACCESS_KEY:}`) | Condicional (`storage=minio`) | (`access-key`) | `storage=minio` | `secret-key` | Runtime | BC `MinioConfig#accessKey()`; consumo buildStorageConfig |
|
|
93
|
+
| 🔒 `seedgrid.backup.minio.secret-key` | `Optional<String>` | texto | — (MP: `${SEEDGRID_BACKUP_MINIO_SECRET_KEY:}`) | Condicional (`storage=minio`) | (`secret-key`) | `storage=minio` | `access-key` | Runtime | BC `MinioConfig#secretKey()`; consumo buildStorageConfig |
|
|
94
|
+
| `seedgrid.backup.minio.endpoint` | `Optional<String>` | URL | — (MP: `${SEEDGRID_BACKUP_MINIO_ENDPOINT:}`) | Condicional (`storage=minio`) | (`endpoint`) | `storage=minio` | — | Runtime | BC `MinioConfig#endpoint()`; consumo buildStorageConfig |
|
|
95
|
+
| 🔒 `seedgrid.backup.azure-blob.connection-string` | `Optional<String>` | connection string Azure | — | Condicional (opção 1, alternativa a account-name+key) | (`connection-string`) | `storage=azure-blob` | `account-name`/`account-key` | Runtime | BC `AzureBlobConfig#connectionString()`; consumo buildStorageConfig |
|
|
96
|
+
| `seedgrid.backup.azure-blob.container` | `Optional<String>` | nome de container | — | Condicional (`storage=azure-blob`) | (`container`) | `storage=azure-blob` | — | Runtime | BC `AzureBlobConfig#container()`; consumo buildStorageConfig |
|
|
97
|
+
| `seedgrid.backup.azure-blob.account-name` | `Optional<String>` | texto | — | Condicional (opção 2) | (`account-name`) | `storage=azure-blob` | `account-key` | Runtime | BC `AzureBlobConfig#accountName()`; consumo buildStorageConfig |
|
|
98
|
+
| 🔒 `seedgrid.backup.azure-blob.account-key` | `Optional<String>` | texto | — | Condicional (opção 2) | (`account-key`) | `storage=azure-blob` | `account-name` | Runtime | BC `AzureBlobConfig#accountKey()`; consumo buildStorageConfig |
|
|
99
|
+
| `seedgrid.backup.google-drive.root-folder-id` | `Optional<String>` | ID de pasta | — | Condicional (`storage=google-drive`) | (`root-folder-id`) | `storage=google-drive` | — | Runtime | BC `GoogleDriveConfig#rootFolderId()`; consumo buildStorageConfig |
|
|
100
|
+
| 🔒 `seedgrid.backup.google-drive.credentials-file` | `Optional<String>` | caminho de JSON de service account | — | Condicional (opção 1) | (`credentials-file`) | `storage=google-drive` | `credentials-json` | Runtime | BC `GoogleDriveConfig#credentialsFile()`; consumo buildStorageConfig |
|
|
101
|
+
| 🔒 `seedgrid.backup.google-drive.credentials-json` | `Optional<String>` | JSON | — | Condicional (opção 2) | (`credentials-json`) | `storage=google-drive` | `credentials-file` | Runtime | BC `GoogleDriveConfig#credentialsJson()`; consumo buildStorageConfig |
|
|
102
|
+
| `seedgrid.backup.onedrive.client-id` | `Optional<String>` | texto | — | Condicional (`storage=onedrive`) | (`client-id`) | `storage=onedrive` | — | Runtime | BC `OnedriveConfig#clientId()`; consumo buildStorageConfig |
|
|
103
|
+
| 🔒 `seedgrid.backup.onedrive.client-secret` | `Optional<String>` | texto | — | Condicional (`storage=onedrive`) | (`client-secret`) | `storage=onedrive` | — | Runtime | BC `OnedriveConfig#clientSecret()`; consumo buildStorageConfig |
|
|
104
|
+
| `seedgrid.backup.onedrive.tenant-id` | `Optional<String>` | tenant Azure AD | — | Condicional (`storage=onedrive`) | (`tenant-id`) | `storage=onedrive` | — | Runtime | BC `OnedriveConfig#tenantId()`; consumo buildStorageConfig |
|
|
105
|
+
| `seedgrid.backup.onedrive.root-folder-path` | String | caminho | `/seedgrid/files` | Não | (`root-folder-path`) sempre enviado | `storage=onedrive` | — | Runtime | BC `OnedriveConfig#rootFolderPath()`; consumo buildStorageConfig |
|
|
106
|
+
| `seedgrid.backup.gcs.bucket` | `Optional<String>` | bucket | — | Condicional (`storage=gcs`) | (`bucket`) | `storage=gcs` | — | Runtime | BC `GcsConfig#bucket()`; consumo buildStorageConfig |
|
|
107
|
+
| `seedgrid.backup.gcs.project-id` | `Optional<String>` | projeto GCP | — | Condicional (`storage=gcs`) | (`project-id`) | `storage=gcs` | — | Runtime | BC `GcsConfig#projectId()`; consumo buildStorageConfig |
|
|
108
|
+
| 🔒 `seedgrid.backup.gcs.credentials-file` | `Optional<String>` | caminho | — | Não (opcional; a factory não exige credenciais) | (`credentials-file`) | `storage=gcs` | `credentials-json` | Runtime | BC `GcsConfig#credentialsFile()`; consumo buildStorageConfig |
|
|
109
|
+
| 🔒 `seedgrid.backup.gcs.credentials-json` | `Optional<String>` | JSON | — | Não (opcional, alternativa a `credentials-file`) | (`credentials-json`) | `storage=gcs` | `credentials-file` | Runtime | BC `GcsConfig#credentialsJson()`; consumo buildStorageConfig |
|
|
110
|
+
|
|
111
|
+
Total de propriedades públicas: **46** (6 execução + 4 notificação + 7 mailer + 3 CSV + 26 storage).
|
|
112
|
+
|
|
113
|
+
### 2.6 Variáveis de ambiente
|
|
114
|
+
|
|
115
|
+
| Fonte | Variável | Propriedade |
|
|
116
|
+
|---|---|---|
|
|
117
|
+
| Alias explícito no MP (Confirmado) | `SEEDGRID_BACKUP_STORAGE` | `seedgrid.backup.storage` |
|
|
118
|
+
| Alias explícito no MP (Confirmado) | `SEEDGRID_BACKUP_FILESYSTEM_BASE` (**sem** `_PATH`) | `seedgrid.backup.filesystem.base-path` |
|
|
119
|
+
| Alias explícito no MP (Confirmado) | `SEEDGRID_BACKUP_MINIO_BUCKET`, `_REGION`, `_ACCESS_KEY`, `_SECRET_KEY`, `_ENDPOINT` | `seedgrid.backup.minio.*` |
|
|
120
|
+
| Alias explícito no MP (Confirmado) | `SEEDGRID_BACKUP_MAILER_FROM`, `_HOST`, `_PORT`, `_START_TLS`, `_USERNAME`, `_PASSWORD`, `_AUTH_METHODS` | `seedgrid.backup.mailer.*` |
|
|
121
|
+
| Regra MicroProfile (Inferência) | ex.: `SEEDGRID_BACKUP_RETENTION_DAYS`, `SEEDGRID_BACKUP_MAX_CONCURRENT_EXPORTS`, `SEEDGRID_BACKUP_ASYNC_ENABLED` | chaves de um único segmento após o prefixo |
|
|
122
|
+
|
|
123
|
+
Para chaves com hífen em grupo (`azure-blob.*`, `google-drive.*`) a forma env (`SEEDGRID_BACKUP_AZURE_BLOB_ACCOUNT_KEY`) é ambígua entre `.` e `-`; a resolução depende do SmallRye casar com o nome do mapping — **Não confirmado**. O MP sugere (comentado) env vars de terceiros como `AWS_ACCESS_KEY_ID`, `AZURE_STORAGE_CONNECTION_STRING`, `GOOGLE_DRIVE_CREDENTIALS_JSON`, `ONEDRIVE_CLIENT_SECRET`, `GCS_CREDENTIALS_JSON`; elas **só valem se o host copiar** essas linhas (estão comentadas).
|
|
124
|
+
|
|
125
|
+
## 3. Propriedades de frameworks / outras extensões
|
|
126
|
+
|
|
127
|
+
### 3.1 Definidas pela extensão no `microprofile-config.properties` (ordinal 100 — o host pode sobrescrever)
|
|
128
|
+
|
|
129
|
+
| Propriedade | Valor definido | Observação |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| `quarkus.flyway.locations` | `db/migration/backup` | ⚠️ define a datasource Flyway **default**; num host com migrations próprias o `application.properties` do host prevalece e precisa incluir `db/migration/backup` — Inferência |
|
|
132
|
+
| `quarkus.flyway.table` | `flyway_schema_history_backup` | idem |
|
|
133
|
+
| `quarkus.flyway.migrate-at-start` | `true` | |
|
|
134
|
+
| `quarkus.flyway.baseline-on-migrate` | `true` | |
|
|
135
|
+
| `quarkus.flyway.baseline-version` | `0` | |
|
|
136
|
+
| `quarkus.hibernate-orm.database.generation` | `none` | |
|
|
137
|
+
|
|
138
|
+
### 3.2 Exigidas/relacionadas
|
|
139
|
+
|
|
140
|
+
| Propriedade | Motivo |
|
|
141
|
+
|---|---|
|
|
142
|
+
| `quarkus.datasource.*` (PostgreSQL) | entidades `ExportJob`/`ExportArtifact`, `information_schema`; obrigatória no host |
|
|
143
|
+
| `seedgrid.ratelimit.export-create.enabled` / `.permits` / `.window` / `.min-spacing` (e demais chaves do rate limiter) | override do `@SeedGridRateLimit(configKey = "export-create", permits = 10, window = 1h)` do `POST /exports`; lidas por `RateLimitService` da extensão resilience — ver [[SeedGrid/Extensions/resilience/Configuracao|Configuração do resilience]] |
|
|
144
|
+
| `seedgrid.filemanagement.*` | config do storage subjacente (o teste define `seedgrid.filemanagement.filesystem.base-path`) — ver [[SeedGrid/Extensions/filemanagement/Configuracao|Configuração do filemanagement]] |
|
|
145
|
+
|
|
146
|
+
## 4. Propriedades usadas só em testes
|
|
147
|
+
|
|
148
|
+
`runtime/src/test/resources/application.properties` e `ExportAsyncFlowIT.AsyncEnabledProfile#getConfigOverrides`:
|
|
149
|
+
|
|
150
|
+
| Propriedade | Valor | Finalidade |
|
|
151
|
+
|---|---|---|
|
|
152
|
+
| `quarkus.datasource.db-kind` | `postgresql` | DevServices |
|
|
153
|
+
| `quarkus.datasource.devservices.enabled` | `true` | |
|
|
154
|
+
| `quarkus.datasource.devservices.image-name` | `postgres:16-alpine` | |
|
|
155
|
+
| `quarkus.datasource.devservices.db-name` | `seedgrid_backup` | |
|
|
156
|
+
| `quarkus.datasource.username` / `password` | `<SEGREDO:test-db-credentials>` | credenciais locais de teste |
|
|
157
|
+
| `quarkus.hibernate-orm.database.generation` | `none` | |
|
|
158
|
+
| `quarkus.flyway.migrate-at-start` / `clean-at-start` | `true` / `true` | |
|
|
159
|
+
| `quarkus.flyway.locations` | `classpath:db/testdata/backup` | migrations de teste (V400, V402, V405 auditoria, V406 entidade de exemplo, V490 seed) |
|
|
160
|
+
| `quarkus.flyway.schemas` | `public` | |
|
|
161
|
+
| `quarkus.http.test-port` | `0` | |
|
|
162
|
+
| `quarkus.log.category."br.com.seedgrid".level` | `INFO` | |
|
|
163
|
+
| `seedgrid.filemanagement.filesystem.base-path` | `${java.io.tmpdir}/seedgrid-backup-tests` | |
|
|
164
|
+
| `seedgrid.backup.storage` | `filesystem` | |
|
|
165
|
+
| `seedgrid.backup.filesystem.base-path` | `${java.io.tmpdir}/seedgrid-backup-tests` | |
|
|
166
|
+
| `seedgrid.backup.async-enabled` | `false` (override `true` em `ExportAsyncFlowIT`) | execução determinística |
|
|
167
|
+
| `quarkus.index-dependency.seedgrid-filemanagement.group-id` / `.artifact-id` | `br.com.seedgrid` / `seedgrid-filemanagement` | indexar beans do filemanagement |
|
|
168
|
+
| `quarkus.arc.exclude-types` | storages cloud do filemanagement (+ `TestTenantProvider` em `ExportAsyncFlowIT`) | evitar dependências cloud |
|
|
169
|
+
|
|
170
|
+
## 5. Aliases, obsoletas, renomeações
|
|
171
|
+
|
|
172
|
+
- Alias de env `SEEDGRID_BACKUP_FILESYSTEM_BASE` (nome diferente do padrão MicroProfile `..._BASE_PATH`). **Confirmado** (MP).
|
|
173
|
+
- Nenhuma propriedade obsoleta/renomeada encontrada.
|
|
174
|
+
|
|
175
|
+
## 6. Configuração mínima (`application.properties`)
|
|
176
|
+
|
|
177
|
+
```properties
|
|
178
|
+
# Datasource PostgreSQL do host (obrigatório)
|
|
179
|
+
quarkus.datasource.db-kind=postgresql
|
|
180
|
+
quarkus.datasource.jdbc.url=jdbc:postgresql://<host>:5432/<db>
|
|
181
|
+
quarkus.datasource.username=<usuario>
|
|
182
|
+
quarkus.datasource.password=<SEGREDO:db-password>
|
|
183
|
+
|
|
184
|
+
# Storage local (padrão filesystem)
|
|
185
|
+
seedgrid.backup.filesystem.base-path=/var/seedgrid/files
|
|
186
|
+
|
|
187
|
+
# Sem SMTP configurado: desligue a notificação para não tentar smtp.gmail.com
|
|
188
|
+
seedgrid.backup.notification.enabled=false
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## 7. Configuração completa comentada
|
|
192
|
+
|
|
193
|
+
```properties
|
|
194
|
+
# ---------- Execução ----------
|
|
195
|
+
# filesystem | s3 | minio | azure-blob | google-drive | onedrive | gcs
|
|
196
|
+
seedgrid.backup.storage=filesystem
|
|
197
|
+
# true: thread daemon por job; false: só o scheduler de fila executa
|
|
198
|
+
seedgrid.backup.async-enabled=true
|
|
199
|
+
# teto global de jobs RUNNING usado pelo scheduler de fila
|
|
200
|
+
seedgrid.backup.max-concurrent-exports=1
|
|
201
|
+
# intervalo do scheduler de fila (Quarkus Scheduler: 30s, 5m, PT30S...)
|
|
202
|
+
seedgrid.backup.queue-poll-interval=30s
|
|
203
|
+
# dias até expirar o artefato (limpeza diária às 00:01)
|
|
204
|
+
seedgrid.backup.retention-days=7
|
|
205
|
+
# prefixos de pacote de entidades fora do export DOMAIN (lista separada por vírgula)
|
|
206
|
+
seedgrid.backup.excluded-domain-entity-packages=<pacote.a>,<pacote.b>
|
|
207
|
+
|
|
208
|
+
# ---------- Notificação ----------
|
|
209
|
+
seedgrid.backup.notification.enabled=true
|
|
210
|
+
seedgrid.backup.notification.poll-interval=5m
|
|
211
|
+
seedgrid.backup.notification.max-retries=3
|
|
212
|
+
seedgrid.backup.notification.retry-delay=PT15M
|
|
213
|
+
|
|
214
|
+
# ---------- Mailer (Vert.x Mail) ----------
|
|
215
|
+
seedgrid.backup.mailer.from=<remetente@dominio>
|
|
216
|
+
seedgrid.backup.mailer.host=<smtp.host>
|
|
217
|
+
seedgrid.backup.mailer.port=587
|
|
218
|
+
# REQUIRED | OPTIONAL | DISABLED
|
|
219
|
+
seedgrid.backup.mailer.start-tls=REQUIRED
|
|
220
|
+
seedgrid.backup.mailer.username=<usuario-smtp>
|
|
221
|
+
seedgrid.backup.mailer.password=<SEGREDO:smtp-password>
|
|
222
|
+
seedgrid.backup.mailer.auth-methods=PLAIN LOGIN
|
|
223
|
+
|
|
224
|
+
# ---------- CSV ----------
|
|
225
|
+
seedgrid.backup.csv.delimiter=,
|
|
226
|
+
seedgrid.backup.csv.quote-char="
|
|
227
|
+
seedgrid.backup.csv.encoding=UTF-8
|
|
228
|
+
|
|
229
|
+
# ---------- Storage: filesystem ----------
|
|
230
|
+
seedgrid.backup.filesystem.base-path=/var/seedgrid/files
|
|
231
|
+
|
|
232
|
+
# ---------- Storage: s3 ----------
|
|
233
|
+
seedgrid.backup.s3.bucket=<bucket>
|
|
234
|
+
seedgrid.backup.s3.region=<regiao>
|
|
235
|
+
seedgrid.backup.s3.access-key=<SEGREDO:s3-access-key>
|
|
236
|
+
seedgrid.backup.s3.secret-key=<SEGREDO:s3-secret-key>
|
|
237
|
+
seedgrid.backup.s3.endpoint=<url-opcional>
|
|
238
|
+
|
|
239
|
+
# ---------- Storage: minio ----------
|
|
240
|
+
seedgrid.backup.minio.bucket=<bucket>
|
|
241
|
+
seedgrid.backup.minio.region=us-east-1
|
|
242
|
+
seedgrid.backup.minio.access-key=<SEGREDO:minio-access-key>
|
|
243
|
+
seedgrid.backup.minio.secret-key=<SEGREDO:minio-secret-key>
|
|
244
|
+
seedgrid.backup.minio.endpoint=<url-minio>
|
|
245
|
+
|
|
246
|
+
# ---------- Storage: azure-blob (connection-string OU account-name+account-key) ----------
|
|
247
|
+
seedgrid.backup.azure-blob.connection-string=<SEGREDO:azure-connection-string>
|
|
248
|
+
seedgrid.backup.azure-blob.container=<container>
|
|
249
|
+
seedgrid.backup.azure-blob.account-name=<conta>
|
|
250
|
+
seedgrid.backup.azure-blob.account-key=<SEGREDO:azure-account-key>
|
|
251
|
+
|
|
252
|
+
# ---------- Storage: google-drive (credentials-file OU credentials-json) ----------
|
|
253
|
+
seedgrid.backup.google-drive.root-folder-id=<folder-id>
|
|
254
|
+
seedgrid.backup.google-drive.credentials-file=<caminho/service-account.json>
|
|
255
|
+
seedgrid.backup.google-drive.credentials-json=<SEGREDO:google-drive-credentials-json>
|
|
256
|
+
|
|
257
|
+
# ---------- Storage: onedrive ----------
|
|
258
|
+
seedgrid.backup.onedrive.client-id=<client-id>
|
|
259
|
+
seedgrid.backup.onedrive.client-secret=<SEGREDO:onedrive-client-secret>
|
|
260
|
+
seedgrid.backup.onedrive.tenant-id=<tenant-id>
|
|
261
|
+
seedgrid.backup.onedrive.root-folder-path=/seedgrid/files
|
|
262
|
+
|
|
263
|
+
# ---------- Storage: gcs (credentials-file OU credentials-json) ----------
|
|
264
|
+
seedgrid.backup.gcs.bucket=<bucket>
|
|
265
|
+
seedgrid.backup.gcs.project-id=<projeto>
|
|
266
|
+
seedgrid.backup.gcs.credentials-file=<caminho/service-account.json>
|
|
267
|
+
seedgrid.backup.gcs.credentials-json=<SEGREDO:gcs-credentials-json>
|
|
268
|
+
|
|
269
|
+
# ---------- Rate limit do POST /exports (extensão resilience) ----------
|
|
270
|
+
seedgrid.ratelimit.export-create.permits=10
|
|
271
|
+
seedgrid.ratelimit.export-create.window=PT1H
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## 8. Receitas
|
|
275
|
+
|
|
276
|
+
**Execução só pela fila (sem threads ad hoc), 2 jobs simultâneos no máximo**
|
|
277
|
+
```properties
|
|
278
|
+
seedgrid.backup.async-enabled=false
|
|
279
|
+
seedgrid.backup.max-concurrent-exports=2
|
|
280
|
+
seedgrid.backup.queue-poll-interval=15s
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
**MinIO via variáveis de ambiente (aliases do MP)**
|
|
284
|
+
```
|
|
285
|
+
SEEDGRID_BACKUP_STORAGE=minio
|
|
286
|
+
SEEDGRID_BACKUP_MINIO_ENDPOINT=<url-minio>
|
|
287
|
+
SEEDGRID_BACKUP_MINIO_BUCKET=<bucket>
|
|
288
|
+
SEEDGRID_BACKUP_MINIO_ACCESS_KEY=<SEGREDO:minio-access-key>
|
|
289
|
+
SEEDGRID_BACKUP_MINIO_SECRET_KEY=<SEGREDO:minio-secret-key>
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**E-mail de "backup pronto" via SMTP corporativo**
|
|
293
|
+
```properties
|
|
294
|
+
seedgrid.backup.mailer.from=<backup@dominio>
|
|
295
|
+
seedgrid.backup.mailer.host=<smtp.dominio>
|
|
296
|
+
seedgrid.backup.mailer.port=587
|
|
297
|
+
seedgrid.backup.mailer.start-tls=REQUIRED
|
|
298
|
+
seedgrid.backup.mailer.username=<usuario>
|
|
299
|
+
seedgrid.backup.mailer.password=<SEGREDO:smtp-password>
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
**Auditoria em MongoDB, entidades JPA do audit-postgresql no classpath**
|
|
303
|
+
```properties
|
|
304
|
+
seedgrid.backup.excluded-domain-entity-packages=br.com.seedgrid.audit.postgresql.entities
|
|
305
|
+
```
|
|
306
|
+
(pacote das entidades JPA do módulo `seedgrid-audit-postgresql`: `AuditLogEntity`, `AuditLogEntitiesEntity`, `AuditLogUsersEntity`)
|
|
307
|
+
|
|
308
|
+
**Retenção de 30 dias e CSV para Excel pt-BR**
|
|
309
|
+
```properties
|
|
310
|
+
seedgrid.backup.retention-days=30
|
|
311
|
+
seedgrid.backup.csv.delimiter=;
|
|
312
|
+
seedgrid.backup.csv.encoding=ISO-8859-1
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## 9. Dúvidas e lacunas
|
|
316
|
+
|
|
317
|
+
- `queue-poll-interval`/`notification.poll-interval` são `String` sem validação na interface; formatos aceitos são os do Quarkus Scheduler (`every`). Aceitação de `off`/`disabled` para desligar o trigger: **Não confirmado** nesta versão.
|
|
318
|
+
- `max-concurrent-exports` não limita jobs disparados diretamente com `async-enabled=true` (Confirmado pela leitura; impacto em carga não testado).
|
|
319
|
+
- O MP da extensão define `quarkus.flyway.*` para a datasource default — interação com hosts que usam várias extensões SeedGrid com Flyway não verificada.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags: [seedgrid, extension, backup, enum]
|
|
3
|
+
fonte: java/seedgrid-quarkus-ext-backup
|
|
4
|
+
branch: main
|
|
5
|
+
commit: 3bed4075ea
|
|
6
|
+
analisado-em: 2026-10-14
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Enums — backup (Quarkus)
|
|
10
|
+
|
|
11
|
+
Voltar: [[SeedGrid/Extensions/backup/Visao-geral|Visão geral do backup]] · [[SeedGrid/Extensions/backup/Configuracao|Configuração]] · [[SeedGrid/Extensions/backup/Exemplos|Exemplos]] · [[SeedGrid/Extensions/backup/Rust|Porte Rust]]
|
|
12
|
+
|
|
13
|
+
Nenhum enum desta extensão é tipo de propriedade de configuração (`BackupConfig` não usa enums; `mailer.start-tls` é `String`). Todos aparecem em DTOs REST e/ou colunas persistidas.
|
|
14
|
+
|
|
15
|
+
## 1. Índice
|
|
16
|
+
|
|
17
|
+
| Enum | Pacote/arquivo (`runtime/src/main/java/br/com/seedgrid/backup/`) | Usado em | Público? |
|
|
18
|
+
|---|---|---|---|
|
|
19
|
+
| [[SeedGrid/Extensions/backup/Enums#ExportStatus\|ExportStatus]] | `domains/ExportStatus.java` | `ExportJob.status` (coluna `export_jobs.status`), `ExportResponse.status`, `ExportJobRepository` | Sim |
|
|
20
|
+
| [[SeedGrid/Extensions/backup/Enums#ExportScope\|ExportScope]] | `domains/ExportScope.java` | `ExportRequest.scope`, `ExportResponse.scope`, `ExportJob.scope` (`export_jobs.scope`), `ExportContext.getScope()` (SPI) | Sim |
|
|
21
|
+
| [[SeedGrid/Extensions/backup/Enums#BackupFormat\|BackupFormat]] | `domains/BackupFormat.java` | `ExportRequest.format`, `ExportResponse.format`, `ExportJob.format` (`export_jobs.format`), SPI `BackupExporter#format()` | Sim |
|
|
22
|
+
| [[SeedGrid/Extensions/backup/Enums#ExportArtifact.ArtifactType\|ExportArtifact.ArtifactType]] | `entities/ExportArtifact.java` | `ExportArtifact.artifactType` (`export_artifacts.artifact_type`), `ExportResponse.artifacts[].type` | Sim |
|
|
23
|
+
| [[SeedGrid/Extensions/backup/Enums#ExportResult.ArtifactType\|ExportResult.ArtifactType]] | `spi/ExportResult.java` | `ExportResult.ArtifactData.type` (retorno do SPI `BackupExporter#export`) | Sim |
|
|
24
|
+
|
|
25
|
+
## ExportStatus
|
|
26
|
+
|
|
27
|
+
Arquivo: `domains/ExportStatus.java` — FQN `br.com.seedgrid.backup.domains.ExportStatus`.
|
|
28
|
+
|
|
29
|
+
| Valor | Significado | Efeito / onde é tratado | Observações |
|
|
30
|
+
|---|---|---|---|
|
|
31
|
+
| `REQUESTED` | Pedido recebido, ainda não enfileirado | `ExportJob#onCreate` atribui se `status` for nulo; `claimJob` aceita `REQUESTED`/`QUEUED`; conta como `isInProgress()` (permite cancelar) | **Confirmado**. O `createExportJob` já grava `QUEUED` (`ExportService:132`), então na prática o job nunca nasce `REQUESTED` pelo fluxo REST; o valor só aparece se algo persistir um job sem status |
|
|
32
|
+
| `QUEUED` | Na fila de processamento | Status inicial gravado por `createExportJob`; `BackupSchedulerService#processQueuedExports` (via `findQueuedJobs`) inicia; `claimJob` → `RUNNING` | **Confirmado** |
|
|
33
|
+
| `RUNNING` | Export em execução | Gravado em `claimJob`; conta para `max-concurrent-exports` (`ExportJobRepositoryImpl#countRunningJobs`); `isInProgress()` | **Confirmado** |
|
|
34
|
+
| `DONE` | Concluído, pronto para download | Gravado em `executeExport` (com `expiresAt = agora + retention-days`); download permitido; `findReadyForNotification` só seleciona jobs `DONE` | **Confirmado** |
|
|
35
|
+
| `DONE_NOTIFIED` | Concluído e solicitante notificado | Gravado por `NotificationSchedulerService` após `notifyReady` com sucesso; download permitido; terminal | **Confirmado** |
|
|
36
|
+
| `FAILED` | Falhou | `markJobFailed` (qualquer exceção do pipeline, inclusive `ExportValidationException` do exporter); terminal; `GET .../download` → `410` | **Confirmado** |
|
|
37
|
+
| `EXPIRED` | Artefato expirou | Existe no enum e conta como terminal não baixável (`410` no download), mas **nenhum código grava `EXPIRED`**: a limpeza por retenção (`BackupSchedulerService#cleanExpiredExports`) apaga job + artefatos em vez de marcar. Um job `DONE` com `expiresAt` vencido ainda não limpo fica `DONE`, mas `ExportJob#isDownloadable()` retorna `false` (`isExpired()`) | **Confirmado** (busca por `ExportStatus.EXPIRED` sem ocorrências fora do enum) |
|
|
38
|
+
| `CANCELLED` | Cancelado | Gravado por `cancelExportJob` (só se `isInProgress()`); terminal; `DELETE` posterior exclui job + artefatos | **Confirmado** |
|
|
39
|
+
|
|
40
|
+
**Campos e métodos** (construtor `(code, displayName, downloadable, terminal)`):
|
|
41
|
+
|
|
42
|
+
| Valor | `getCode()` | `getDisplayName()` | `isDownloadable()` | `isTerminal()` | `isInProgress()` |
|
|
43
|
+
|---|---|---|---|---|---|
|
|
44
|
+
| `REQUESTED` | `requested` | Export requested | não | não | sim |
|
|
45
|
+
| `QUEUED` | `queued` | Queued for processing | não | não | sim |
|
|
46
|
+
| `RUNNING` | `running` | Export in progress | não | não | sim |
|
|
47
|
+
| `DONE` | `done` | Ready for download | sim | não | não |
|
|
48
|
+
| `DONE_NOTIFIED` | `done-notified` | Ready for download and notified | sim | sim | não |
|
|
49
|
+
| `FAILED` | `failed` | Export failed | não | sim | não |
|
|
50
|
+
| `EXPIRED` | `expired` | Export expired | não | sim | não |
|
|
51
|
+
| `CANCELLED` | `cancelled` | Export cancelled | não | sim | não |
|
|
52
|
+
|
|
53
|
+
`fromCode(String)` compara `code` ignorando caixa e lança `IllegalArgumentException("Unknown export status code: ...")`; **nenhum código da extensão o chama** (Confirmado) — existe só como API do enum.
|
|
54
|
+
|
|
55
|
+
**Serialização**
|
|
56
|
+
- JSON: nome da constante (`"DONE_NOTIFIED"`); sem `@JsonValue`/`@JsonProperty` (Confirmado). `ExportResponse.status` sai assim.
|
|
57
|
+
- Banco: `@Enumerated(EnumType.STRING)` em `ExportJob.status`; coluna `status VARCHAR(20)` (V400). **Não há CHECK constraint** sobre os valores — só `chk_progress`. O comentário SQL da V400 lista `REQUESTED, QUEUED, RUNNING, DONE, FAILED, EXPIRED, CANCELLED` (**omite `DONE_NOTIFIED`**, só no comentário; o valor cabe em 20 caracteres e é gravado normalmente).
|
|
58
|
+
|
|
59
|
+
**Transições confirmadas no código**
|
|
60
|
+
|
|
61
|
+
```mermaid
|
|
62
|
+
stateDiagram-v2
|
|
63
|
+
[*] --> QUEUED: createExportJob
|
|
64
|
+
REQUESTED --> RUNNING: claimJob
|
|
65
|
+
QUEUED --> RUNNING: claimJob
|
|
66
|
+
RUNNING --> DONE: executeExport ok
|
|
67
|
+
RUNNING --> FAILED: exceção
|
|
68
|
+
QUEUED --> FAILED: exceção
|
|
69
|
+
DONE --> DONE_NOTIFIED: notificação enviada
|
|
70
|
+
REQUESTED --> CANCELLED: cancelExportJob
|
|
71
|
+
QUEUED --> CANCELLED: cancelExportJob
|
|
72
|
+
RUNNING --> CANCELLED: cancelExportJob
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
(O comentário do Javadoc do enum mostra `FAILED → EXPIRED`; esse caminho **não** existe no código.)
|
|
76
|
+
|
|
77
|
+
**Onde é usado**: endpoints `GET /exports`, `GET /exports/{jobId}`, `GET /exports/{jobId}/download` (`410` quando terminal e não baixável), `DELETE /exports/{jobId}`; propriedades que o influenciam: `async-enabled`, `max-concurrent-exports`, `retention-days`, `notification.*` — ver [[SeedGrid/Extensions/backup/Configuracao|Configuração]]; entidade `ExportJob`; evento `SgUserEvent` (`data.status`: `"DONE"` ou `"FAILED"`).
|
|
78
|
+
|
|
79
|
+
## ExportScope
|
|
80
|
+
|
|
81
|
+
Arquivo: `domains/ExportScope.java` — FQN `br.com.seedgrid.backup.domains.ExportScope`.
|
|
82
|
+
|
|
83
|
+
| Valor | Significado | Efeito / onde é tratado | Observações |
|
|
84
|
+
|---|---|---|---|
|
|
85
|
+
| `DOMAIN` | Entidades de negócio (metamodel JPA) | `ExtractDataService` extrai entidades JPA, pulando pacotes de `seedgrid.backup.excluded-domain-entity-packages`; ambos exporters aceitam | **Confirmado**. Exporta `data/<entidade>.csv` / `.sql` |
|
|
86
|
+
| `RAW` | Tabelas do schema via `information_schema` | `ExtractDataService`; exclui `export_jobs`/`export_artifacts` | **Confirmado** |
|
|
87
|
+
| `CUSTOM` | Seleção de módulos (feature futura) | **Aceito pela API** (`POST /exports` retorna `201`), mas `validate()` dos dois exporters lança `ExportValidationException` e `switch` lança `ExportException`; como a validação ocorre em `executeExport`, o job termina `FAILED` com `errorMessage` ("CUSTOM scope not yet implemented for CSV/SQL dump export") | **Confirmado**. Existe no enum, mas nenhum código o trata com sucesso |
|
|
88
|
+
|
|
89
|
+
**Campos**: `(code, displayName, description)`; `getCode()` = `domain`/`raw`/`custom`; `fromCode(String)` ignora caixa e lança `IllegalArgumentException`, **não chamado** pela extensão.
|
|
90
|
+
|
|
91
|
+
**Serialização**: JSON pelo nome (`"DOMAIN"`); `ExportRequest.scope` é `@NotNull` (sem escopo → erro de validação). Banco: `@Enumerated(EnumType.STRING)` em `ExportJob.scope`, `scope VARCHAR(20)`, **sem CHECK constraint**; comentário SQL lista `DOMAIN, RAW, CUSTOM`.
|
|
92
|
+
|
|
93
|
+
**Onde é usado**: `POST /exports` (corpo), `ExportContext.getScope()`, manifest (`scope`), entidade `ExportJob`.
|
|
94
|
+
|
|
95
|
+
## BackupFormat
|
|
96
|
+
|
|
97
|
+
Arquivo: `domains/BackupFormat.java` — FQN `br.com.seedgrid.backup.domains.BackupFormat`.
|
|
98
|
+
|
|
99
|
+
| Valor | Significado | Efeito / onde é tratado | Observações |
|
|
100
|
+
|---|---|---|---|
|
|
101
|
+
| `CSV_ZIP` | ZIP com CSVs por tabela/entidade (portabilidade) | `CsvZipExporter#format()`; usa `seedgrid.backup.csv.*` | **Confirmado** |
|
|
102
|
+
| `SQL_DUMP_ZIP` | ZIP com `INSERT`s por tabela (restore técnico) | `SqlDumpZipExporter#format()`; `csv.*` não se aplica | **Confirmado**. O Javadoc fala em "schema, constraints, indexes, sequences", mas o exporter gera apenas `data/<tabela>.sql` com INSERTs (Confirmado em `SqlDumpZipExporter`) |
|
|
103
|
+
|
|
104
|
+
**Campos**: `(code, displayName, mimeType)`; `getCode()` = `csv-zip` / `sql-dump-zip`; `getMimeType()` = `application/zip` nos dois (nenhum chamador encontrado: o `mimeType` do artefato vem de `ArtifactData`); `fromCode` ignora caixa, **não chamado**.
|
|
105
|
+
|
|
106
|
+
**Serialização**: JSON pelo nome (`"CSV_ZIP"`); `@NotNull` em `ExportRequest.format`; formato sem exporter registrado → `IllegalArgumentException("Unsupported export format: ...")` no `POST`. Banco: `@Enumerated(EnumType.STRING)`, `format VARCHAR(20)`, **sem CHECK**; `SQL_DUMP_ZIP` tem 12 caracteres, cabe.
|
|
107
|
+
|
|
108
|
+
**Onde é usado**: `BackupExporterRegistry` (1 exporter por valor; duplicata falha no startup), `POST /exports`, manifest.
|
|
109
|
+
|
|
110
|
+
## ExportArtifact.ArtifactType
|
|
111
|
+
|
|
112
|
+
Arquivo: `entities/ExportArtifact.java` (enum aninhado) — FQN `br.com.seedgrid.backup.entities.ExportArtifact.ArtifactType`.
|
|
113
|
+
|
|
114
|
+
| Valor | Significado | Efeito / onde é tratado | Observações |
|
|
115
|
+
|---|---|---|---|
|
|
116
|
+
| `ZIP` | Arquivo principal do export | Único tipo que `ExportService#getDownloadArtifact` procura para o download; único tipo gerado pelos exporters embutidos | **Confirmado** |
|
|
117
|
+
| `MANIFEST` | `manifest.json` como artefato próprio | Só convertido em `mapArtifactType`; nenhum exporter embutido o produz (o manifest vai dentro do ZIP) | Existe no enum, mas nenhum código o produz; pode ser enviado por exporter customizado, que é gravado em `export_artifacts` mas não é baixável pela API |
|
|
118
|
+
| `CHECKSUMS` | `checksums.txt` como artefato próprio | idem | idem |
|
|
119
|
+
| `LOG` | Log de execução | idem | idem |
|
|
120
|
+
|
|
121
|
+
Sem campos. Serialização: JSON pelo nome (`ExportResponse.ArtifactInfo.type`); banco `@Enumerated(EnumType.STRING)`, `artifact_type VARCHAR(20)`, **sem CHECK** (comentário SQL lista os 4 valores).
|
|
122
|
+
|
|
123
|
+
## ExportResult.ArtifactType
|
|
124
|
+
|
|
125
|
+
Arquivo: `spi/ExportResult.java` (enum aninhado) — FQN `br.com.seedgrid.backup.spi.ExportResult.ArtifactType`.
|
|
126
|
+
|
|
127
|
+
Valores: `ZIP`, `MANIFEST`, `CHECKSUMS`, `LOG` — espelho exato do enum de entidade; `ExportService#mapArtifactType` converte 1:1 por `switch` exaustivo (**Confirmado**). Usado por quem implementa `BackupExporter` (campo `type` de `ExportResult.ArtifactData`). Não é serializado nem persistido diretamente. Para o efeito de cada valor veja a seção anterior.
|
|
128
|
+
|
|
129
|
+
## Internos
|
|
130
|
+
|
|
131
|
+
Nenhum enum privado ou interno encontrado em `runtime/src/main` além dos acima (Confirmado por busca de `enum`). Enums de testes ignorados.
|