Replace the github.com/spf13/afero dependency with a purpose-built FileStorage interface (Open, Write, Stat, Remove, MkdirAll) with three implementations: localStorage (with basePath), s3Storage (with key prefix), and memStorage (for tests). Each implementation owns its base path — callers pass only file IDs. Delete s3fs.go, change File.File from afero.File to io.ReadCloser, and fix duplication flows to buffer content for seeking. |
||
|---|---|---|
| .. | ||
| handler | ||
| unsplash | ||
| upload | ||
| background.go | ||