Pular para conteúdo

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 — traz fromDdMmYyyySlash/fromMmYyyy/fromDdMmYyyyDot além do fromDdMmYyyy que 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.*) — o application.yml e 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/@ConfigurationProperties com as bean definitions Micronaut compiladas no jar) — a DI os descobre por classpath, como na 0024.
  • Testes white-box da impl deletados (S3ArquivoXlsStorageKeyTest, S3ArquivoXlsStorageIntegrationTest): chamavam derivarChave/garantirBucket package-private, que não compilam com a classe noutro pacote — a fonte da verdade deles é o xadm-comum-storage. A cobertura de storage no app fica no seam (ProcessamentoServiceModoGarageTest, StorageBackfillService*Test, via a interface ArquivoXlsStorage).
  • 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 via s3Properties() (cria e usa o mesmo bucket); nenhum teste assertava "vantroba".
  • Paridade provada contra os artefatos 0.1.0, sem alterar asserção: ./gradlew check -PdockerTests verde (Postgres/Garage reais, @MicronautTest). O DataConverterTest local vira contract-test contra o fromDdMmYyyy da lib.
  • O checkstyle.xml canônico (constituição 0.28.0) é mais estrito em ConstantName; os campos @ArchTest (idioma ArchUnit, camelCase) ganharam um suppress app-específico no suppressions.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 util da 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.