0025 — Adotar as libs xadm-comum-storage / -util / -teste¶
Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-08-11 · Decidido em: 2026-08-11
Contexto¶
Depois de adotar o motor de auth (decisão 0023) e a infra web
(decisão 0024), uma auditoria de aderência ao xadm-commons achou
mais três libs publicadas (xadm-comum-storage, xadm-comum-util, xadm-comum-teste, todas
0.1.0) que o app ainda duplicava localmente — ~13 classes cópia da mesma stack, extraída
deste app. A decisão 0024 deixou util explicitamente adiado
("fora de escopo; util não é infra web"); esta decisão fecha esse adiamento e estende o dedup ao
object storage (o design é a decisão 0008) e à infra de
teste (Testcontainers).
Decisão¶
Depender de xadm-comum-storage:0.1.0, xadm-comum-util:0.1.0 e
xadm-comum-teste:0.1.0 (Forgejo Packages da org xadm, leitura anônima — mesma fonte das
0023/0024) e deletar as 13 cópias locais, repointando os consumidores para
br.com.xadm.comum.{armazenamento,util,teste}:
- storage (7) →
br.com.xadm.comum.armazenamento:ArmazenamentoConfig,ArmazenamentoModo,S3Config,ArquivoXlsStorage,S3ArquivoXlsStorage,S3ClientFactory,ReferenciaObjeto. - util (2) →
br.com.xadm.comum.util:ChecksumSha256,DataConverter(a da lib é superset — trazfromDdMmYyyySlash/fromMmYyyy/fromDdMmYyyyDotalém dofromDdMmYyyyque o app usa). - teste (4) →
br.com.xadm.comum.teste:AbstractIntegrationTest,PostgresTestResource,PostgresTestPropertyProvider,GarageTestResource(testImplementation).
Fica local só o que é do app: comum/util/AnosVeiculoParser (parser de frota),
comum/exception/StorageIndisponivelException (503, domínio XLS), o comum/config typed do app,
comum/notificacao (Telegram), o ArchitectureTest (regras ArchUnit específicas dos pacotes
br.com.vantroba) e a composição de teste do app (IntegracaoTestPropertyProvider,
S3TestPropertyProvider, AbstractRepositoryIntegrationTest — limpeza das bi_*). Nenhum pacote
local é renomeado.
Consequências¶
- Prefixos de config idênticos (
app.storage.*,s3.*) — oapplication.ymle as envs (S3_FILE_STORAGE, credenciais S3) não mudam. Os 3 modos (PSQL/PSQL_GARAGE/GARAGE) e a chave content-addressed seguem os da decisão 0008 — a lib é a mesma impl extraída. - Os beans da lib registram sozinhos (
@Singleton/@ConfigurationPropertiescom as bean definitions Micronaut compiladas no jar) — a DI os descobre por classpath, como na 0024. - Testes white-box da impl deletados (
S3ArquivoXlsStorageKeyTest,S3ArquivoXlsStorageIntegrationTest): chamavamderivarChave/garantirBucketpackage-private, que não compilam com a classe noutro pacote — a fonte da verdade deles é oxadm-comum-storage. A cobertura de storage no app fica no seam (ProcessamentoServiceModoGarageTest,StorageBackfillService*Test, via a interfaceArquivoXlsStorage). GarageTestResource: o bucket de teste deixou de ser fixo"vantroba"e passou ao default"teste"da lib (parametrizável por-Dgarage.test.bucket). Transparente — o nome flui vias3Properties()(cria e usa o mesmo bucket); nenhum teste assertava"vantroba".- Paridade provada contra os artefatos
0.1.0, sem alterar asserção:./gradlew check -PdockerTestsverde (Postgres/Garage reais,@MicronautTest). ODataConverterTestlocal vira contract-test contra ofromDdMmYyyyda lib. - O
checkstyle.xmlcanônico (constituição 0.28.0) é mais estrito emConstantName; os campos@ArchTest(idioma ArchUnit, camelCase) ganharam umsuppressapp-específico nosuppressions.xml.
Alternativas consideradas¶
- Manter as cópias locais: sem acoplamento às libs, mas N lugares para corrigir a mesma impl de storage/util/infra-de-teste e N chances de divergirem. Descartado — é o risco que motivou a extração (mesmo raciocínio das 0023/0024).
- Só storage (adiar util/teste): menor superfície, mas deixaria de novo um adiamento explícito
em aberto (como o
utilda 0024). Descartado — as três são drop-in ou quase, feitas na mesma leva. - Preservar o bucket de teste
"vantroba"via-Dgarage.test.bucket: config extra por ganho nulo (o nome é arbitrário em teste). Descartado — adota-se o default"teste"da lib.