feat(storage): ensure thumbnails use FileStore interface #132
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Verify and update thumbnail storage to use the
FileStoreinterface consistently, ensuring thumbnails work with the filesystem backend.Context
Thumbnails are stored in two distinct patterns in the codebase, and there is a discrepancy between the key generator functions and actual handler usage:
Pattern 1: Item-level thumbnails (used by
HandleSetItemThumbnail)HandleSetItemThumbnailininternal/api/file_handlers.goitems/{itemID}/thumbnail.pngitems.thumbnail_key(added by migration011_item_files.sql){object_key}from a presigned temp upload, copies to permanent key vias.storage.Copy()Pattern 2: Revision-level thumbnails (key generator exists but usage unclear)
storage.ThumbnailKey(partNumber, revision)ininternal/storage/storage.gothumbnails/{partNumber}/rev{N}.pngrevisions.thumbnail_key(*stringfield inRevisionstruct)ThumbnailKey()function exists as a standalone helper but its actual usage in handlers needs verificationDiscrepancy
The
HandleSetItemThumbnailhandler usesitems/{itemID}/thumbnail.png(item-scoped), whilestorage.ThumbnailKey()generatesthumbnails/{partNumber}/rev{N}.png(revision-scoped). These are different key patterns serving different purposes.Requirements
1. Audit thumbnail usage
storage.ThumbnailKey()is actually called anywhere besides the function definition2. Ensure filesystem compatibility
HandleSetItemThumbnail): Already usess.storage.Copy()— works withFileStoreinterface after feat(storage): define FileStore interface abstraction (#126)ThumbnailKey()paths work correctly as filesystem paths (no special characters, reasonable depth)3. Verify no MinIO-specific URLs leak
FileStore.Get()not MinIO-specific methodsthumbnail_keyfield (lines ~535 and ~1479 ofhandlers.go) — ensure it is a storage key, not a URL4. Clean up if needed
ThumbnailKey()is unused, remove it to avoid confusionitems.thumbnail_keyandrevisions.thumbnail_keyDB columns are handled correctly during storage migration (#130)Files to check
internal/storage/storage.go—ThumbnailKey()functioninternal/api/file_handlers.go—HandleSetItemThumbnailinternal/api/handlers.go— thumbnail_key in API responsesinternal/db/items.go—SetThumbnailKey(),Item.ThumbnailKeyfieldinternal/db/revisions.goor items.go —Revision.ThumbnailKeyfieldAcceptance criteria
FileStoreinterfaceThumbnailKey()is unusedPriority
P2
Depends on
Part of
Storage Migration: MinIO → PostgreSQL + Filesystem