diff --git a/database/schema/schema.sql b/database/schema/schema.sql index 7e24e57..663d375 100644 --- a/database/schema/schema.sql +++ b/database/schema/schema.sql @@ -1025,6 +1025,13 @@ CREATE INDEX IF NOT EXISTS idx_saved_filters_user_resource ON saved_filters(user -- Index for name searches (future feature) CREATE INDEX IF NOT EXISTS idx_saved_filters_name ON saved_filters(user_id, name); +-- Unique constraint: One filter name per user per resource type +-- Prevents duplicate filter names while allowing: +-- - Same name for different users +-- - Same name for different resources (media-items vs collections) +CREATE UNIQUE INDEX IF NOT EXISTS idx_saved_filters_user_name_resource +ON saved_filters(user_id, name, resource_type); + -- Trigger to auto-update updated_at timestamp CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ diff --git a/internal/database/queries.sql.go b/internal/database/queries.sql.go index 6ac8759..7fc6c47 100644 --- a/internal/database/queries.sql.go +++ b/internal/database/queries.sql.go @@ -7192,7 +7192,7 @@ func (q *Queries) SearchMediaItems(ctx context.Context, arg SearchMediaItemsPara } const SearchMediaItemsUnified = `-- name: SearchMediaItemsUnified :many -SELECT DISTINCT ON (mi.id) +SELECT mi.id, mi.library_id, mi.title, @@ -7314,7 +7314,6 @@ WHERE COALESCE(lv.is_visible, true) = true ) ) ORDER BY - mi.id, -- Primary sort: relevance score when searching CASE WHEN $11 != '' THEN diff --git a/internal/database/queries/queries.sql b/internal/database/queries/queries.sql index f1ecb95..20cf711 100644 --- a/internal/database/queries/queries.sql +++ b/internal/database/queries/queries.sql @@ -373,7 +373,7 @@ LEFT JOIN library_visibility lv ON l.id = lv.library_id AND lv.user_id = sqlc.na LIMIT sqlc.narg('limit') OFFSET sqlc.narg('offset'); -- name: SearchMediaItemsUnified :many -SELECT DISTINCT ON (mi.id) +SELECT mi.id, mi.library_id, mi.title, @@ -495,7 +495,6 @@ WHERE COALESCE(lv.is_visible, true) = true ) ) ORDER BY - mi.id, -- Primary sort: relevance score when searching CASE WHEN sqlc.narg('search_query') != '' THEN