feat(db): add saved_filters table and CRUD operations
Add database schema and SQL queries for generic saved filters system that allows users to save custom filter presets for any resource type. Database Schema: - Add saved_filters table with user_id, name, resource_type, filters (JSONB) - Create composite index on (user_id, resource_type) for efficient lookups - Create index on (user_id, name) for future name search feature - Add update_updated_at_column() trigger to auto-update timestamps - Make trigger creation idempotent with DROP TRIGGER IF EXISTS SQL Queries (5 new queries): - GetSavedFilters: List all filters for user + resource type - GetSavedFilterByID: Retrieve single filter by ID - CreateSavedFilter: Create new saved filter - UpdateSavedFilter: Update filter name/criteria - DeleteSavedFilter: Remove saved filter Design Decisions: - Generic resource_type field supports any resource (media-items, collections, devices) - JSONB filters field allows flexible schema without migrations - User-scoped via JWT (user_id foreign key with CASCADE delete) - Automatic updated_at timestamp via database trigger Generated Code: - database.SavedFilters model (10 fields including JSONB filters) - All 5 CRUD query functions with proper parameter types - pgtype.UUID wrappers for UUID parameters Part of: Saved Filters Implementation (Phase 1: Database) Related: #saved-filters-feature
This commit is contained in:
@@ -1721,3 +1721,29 @@ LIMIT $3;
|
||||
SELECT mi.* FROM media_items mi
|
||||
WHERE mi.library_id = $1
|
||||
ORDER BY mi.created_at DESC;
|
||||
|
||||
-- name: GetSavedFilters :many
|
||||
SELECT * FROM saved_filters
|
||||
WHERE user_id = @user_id AND resource_type = @resource_type
|
||||
ORDER BY created_at DESC;
|
||||
|
||||
-- name: GetSavedFilterByID :one
|
||||
SELECT * FROM saved_filters
|
||||
WHERE id = @id AND user_id = @user_id;
|
||||
|
||||
-- name: CreateSavedFilter :one
|
||||
INSERT INTO saved_filters (user_id, name, resource_type, filters)
|
||||
VALUES (@user_id, @name, @resource_type, @filters)
|
||||
RETURNING *;
|
||||
|
||||
-- name: UpdateSavedFilter :one
|
||||
UPDATE saved_filters
|
||||
SET name = @name,
|
||||
filters = @filters,
|
||||
updated_at = NOW()
|
||||
WHERE id = @id AND user_id = @user_id
|
||||
RETURNING *;
|
||||
|
||||
-- name: DeleteSavedFilter :exec
|
||||
DELETE FROM saved_filters
|
||||
WHERE id = @id AND user_id = @user_id;
|
||||
|
||||
Reference in New Issue
Block a user