Storage · modules/storage

Scaffold de adapter

UploadThing,
contrato primeiro.

O UploadThing se pluga no mesmo port IStorageProvider que os adapters de S3, local e Supabase. O slot é um scaffold tipado hoje — a interface já está comprometida, então completá-lo é uma mudança autocontida que deixa o resto do app intacto.

O que vem pronto e o que você completa

Honestidade primeiro: o adapter do UploadThing é um scaffold. A base do boilerplate não traz o SDK do UploadThing como dependência, então presignUpload / presignDownload retornam um "ainda não implementado" tipado até você adicioná-lo. A factory cai de forma suave para o provider de storage null (com um warning) quando UPLOADTHING_TOKEN está setado mas o SDK está ausente, então nada quebra no boot. O valor aqui é o mesmo de todo outro slot de adapter: o port IStorageProvider está fixado, então quando você conecta o UploadThing implementa contra um formato que o resto do codebase já consome — sem efeito cascata. Se você quer storage de arquivos hoje, o adapter S3 está totalmente implementado e fala com AWS, R2 e MinIO.

O port de storage em que ele se pluga

Scaffold tipado

O adapter implementa IStorageProvider; cada método retorna os mesmos tipos Result que os providers conectados, então o contrato é o compromisso.

Fallback suave

Quando STORAGE_PROVIDER=uploadthing mas falta o token/SDK, a factory loga um warning e retorna o provider null em vez de lançar.

Alternativa conectada

Precisa de storage agora? STORAGE_PROVIDER=s3 está pronto para produção e funciona com AWS S3, Cloudflare R2 e MinIO.

Troca de um único arquivo

Como todo provider compartilha o port, migrar de S3 para UploadThing depois é uma mudança no composition root, não uma reescrita do app.

Referência de configuração

Variáveis de ambiente

  • STORAGE_PROVIDERobrigatória

    Set to uploadthing

  • UPLOADTHING_TOKENobrigatória
  • UPLOADTHING_APP_IDopcional

Onde ele vive

  • apps/server/src/modules/storage/infrastructure/providers/uploadthing-storage-provider.ts
  • apps/server/src/modules/storage/infrastructure/providers/index.ts

Storage atrás de um único contrato.

Comece com S3 hoje e migre para o UploadThing depois sem reescrever seu app — o port continua o mesmo.