treewide: better cross-device sync capabilities; in-database storage
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: Id99798df6f7e4470caae8a193c2654aa6a6a6964
This commit is contained in:
parent
5521488a93
commit
f34c78b238
41 changed files with 8806 additions and 138 deletions
30
migrations/postgres/V15__managed_storage.sql
Normal file
30
migrations/postgres/V15__managed_storage.sql
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
-- V15: Managed File Storage
|
||||
-- Adds server-side content-addressable storage for uploaded files
|
||||
|
||||
-- Add storage mode to media_items (external = file on disk, managed = in content-addressable storage)
|
||||
ALTER TABLE media_items ADD COLUMN storage_mode TEXT NOT NULL DEFAULT 'external';
|
||||
|
||||
-- Original filename for managed uploads (preserved separately from file_name which may be normalized)
|
||||
ALTER TABLE media_items ADD COLUMN original_filename TEXT;
|
||||
|
||||
-- When the file was uploaded to managed storage
|
||||
ALTER TABLE media_items ADD COLUMN uploaded_at TIMESTAMPTZ;
|
||||
|
||||
-- Storage key for looking up the blob (usually same as content_hash for deduplication)
|
||||
ALTER TABLE media_items ADD COLUMN storage_key TEXT;
|
||||
|
||||
-- Managed blobs table - tracks deduplicated file storage
|
||||
CREATE TABLE managed_blobs (
|
||||
content_hash TEXT PRIMARY KEY NOT NULL,
|
||||
file_size BIGINT NOT NULL,
|
||||
mime_type TEXT NOT NULL,
|
||||
reference_count INTEGER NOT NULL DEFAULT 1,
|
||||
stored_at TIMESTAMPTZ NOT NULL,
|
||||
last_verified TIMESTAMPTZ
|
||||
);
|
||||
|
||||
-- Index for finding managed media items
|
||||
CREATE INDEX idx_media_storage_mode ON media_items(storage_mode);
|
||||
|
||||
-- Index for finding orphaned blobs (reference_count = 0)
|
||||
CREATE INDEX idx_blobs_reference_count ON managed_blobs(reference_count);
|
||||
Loading…
Add table
Add a link
Reference in a new issue