Add library_type_name column to media_items with auto-population trigger

- Add library_type_name VARCHAR(50) column to media_items table in schema.sql
- Create PostgreSQL trigger 'set_library_type_name_on_insert' that automatically
  populates library_type_name by joining libraries table with library_types on insert
- Add library_type_name parameter to CreateMediaItem SQL query
- Update Go models (models.go) to include LibraryTypeName field
- Add UpdateMediaItemChapterMetadata query method to querier.go
- Regenerate queries.sql.go with sqlc

This allows media items to store their library type (e.g., 'Books', 'Comics', 'Manga')
at the database level, enabling filtering and display without needing additional joins.
This commit is contained in:
2026-04-04 22:49:07 -04:00
parent 0697fc3b12
commit cf8c690474
5 changed files with 168 additions and 35 deletions
+23 -1
View File
@@ -180,7 +180,9 @@ CREATE TABLE IF NOT EXISTS media_items (
-- "detected_at": "2024-01-15T10:30:00Z",
-- "detection_method": "epub-toc" | "pdf-outline" | "page-breaks"
-- }
chapter_metadata JSONB
chapter_metadata JSONB,
-- Need library_type_name for checks
library_type_name VARCHAR(50)
);
-- Add GIN indexes for fast array searches
@@ -195,6 +197,26 @@ ALTER TABLE media_items ADD COLUMN IF NOT EXISTS contributors_search TEXT[];
CREATE INDEX IF NOT EXISTS idx_media_items_tags_search ON media_items USING GIN (tags_search);
CREATE INDEX IF NOT EXISTS idx_media_items_contributors_search ON media_items USING GIN (contributors_search);
-- Drop existing trigger if exists
DROP TRIGGER IF EXISTS set_library_type_name_on_insert ON media_items;
-- Drop existing function if exists
DROP FUNCTION IF EXISTS set_library_type_name();
-- Add trigger to populate library_type_name on insert
CREATE OR REPLACE FUNCTION set_library_type_name() RETURNS TRIGGER AS $$
BEGIN
SELECT lt.name INTO NEW.library_type_name
FROM libraries l
JOIN library_types lt ON l.library_type_id = lt.id
WHERE l.id = NEW.library_id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER set_library_type_name_on_insert
BEFORE INSERT ON media_items
FOR EACH ROW
EXECUTE FUNCTION set_library_type_name();
-- Add GIN indexes for pg_trgm fuzzy search performance
CREATE INDEX IF NOT EXISTS idx_media_items_author_trgm
ON media_items USING GIN (author gin_trgm_ops);