Phase 1: Add enhanced database fields and sorting

- Add 9 new fields to media_items table (language, edition, page_count, goodreads_id, openlibrary_id, google_books_id, copyright_year, genre, subjects)
- Add indexes for new fields (language, genre, page_count, copyright_year, series_order, date_published)
- Add ListMediaItemsSorted SQL query for dynamic sorting
- Update ListMediaItems handler to process sort parameter
- Support 16 sorting options (title, author, created_at, date_published, copyright_year, page_count, genre, series)
- Add /api/media-items/filtered endpoint for advanced filtering
- Register new filtered endpoint in routes
This commit is contained in:
2026-01-30 08:32:49 -05:00
parent 3fe44205c5
commit 3b2075fc70
5 changed files with 727 additions and 14 deletions
+15
View File
@@ -107,6 +107,15 @@ CREATE TABLE media_items (
date_published DATE,
publisher VARCHAR(255),
contributors TEXT,
language VARCHAR(10) DEFAULT 'en',
edition VARCHAR(255),
page_count INTEGER,
goodreads_id VARCHAR(20),
openlibrary_id VARCHAR(100),
google_books_id VARCHAR(100),
copyright_year INTEGER,
genre VARCHAR(100),
subjects TEXT[],
added_by_admin_id UUID REFERENCES users(id) ON DELETE SET NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
@@ -246,6 +255,12 @@ CREATE INDEX idx_media_items_title ON media_items(title);
CREATE INDEX idx_media_items_author ON media_items(author);
CREATE INDEX idx_media_items_library_id ON media_items(library_id);
CREATE INDEX idx_media_items_added_by_admin_id ON media_items(added_by_admin_id);
CREATE INDEX idx_media_items_language ON media_items(language);
CREATE INDEX idx_media_items_genre ON media_items(genre);
CREATE INDEX idx_media_items_page_count ON media_items(page_count);
CREATE INDEX idx_media_items_copyright_year ON media_items(copyright_year);
CREATE INDEX idx_media_items_series_order ON media_items(series, series_number);
CREATE INDEX idx_media_items_date_published ON media_items(date_published);
-- GIN indexes for fast fuzzy search using pg_trgm
CREATE INDEX idx_media_items_title_gin ON media_items USING gin (title gin_trgm_ops);