Storage · modules/storage
Scaffold de adapterUploadThing,
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óriaSet to uploadthing
UPLOADTHING_TOKENobrigatóriaUPLOADTHING_APP_IDopcional
Onde ele vive
apps/server/src/modules/storage/infrastructure/providers/uploadthing-storage-provider.tsapps/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.