feat(db): add imported_at column to media_items for accurate "Recently Added" sorting
The created_at column stores file modification time (intentional for preserving original metadata), but this makes 'Recently Added' sorting unreliable for imported files. Add imported_at column that records the actual database insert timestamp. Changes: - Add imported_at TIMESTAMPTZ column to media_items (nullable) - Update GetRecentlyAddedItems to sort by imported_at DESC NULLS LAST first - Add ReassignLibraries and ReassignMediaItems queries for admin deletion handover - Add SyncLibraryTypeExtensions query for startup extension sync - Update all media_items SELECT queries to include imported_at column
This commit is contained in:
@@ -61,6 +61,9 @@ SELECT * FROM library_types WHERE id = $1;
|
||||
-- name: GetLibraryTypeByName :one
|
||||
SELECT * FROM library_types WHERE name = $1;
|
||||
|
||||
-- name: SyncLibraryTypeExtensions :exec
|
||||
UPDATE library_types SET allowed_extensions = $2 WHERE name = $1;
|
||||
|
||||
-- Libraries queries
|
||||
-- name: CreateLibrary :one
|
||||
INSERT INTO libraries (name, description, library_type_id, created_by_admin_id)
|
||||
@@ -105,6 +108,13 @@ SELECT lf.library_id, l.* FROM library_folders lf
|
||||
JOIN libraries l ON lf.library_id = l.id
|
||||
WHERE lf.folder_path = $1;
|
||||
|
||||
-- name: GetLibraryByFolderPathPrefix :one
|
||||
SELECT lf.library_id, lf.folder_path, l.* FROM library_folders lf
|
||||
JOIN libraries l ON lf.library_id = l.id
|
||||
WHERE $1 LIKE lf.folder_path || '%'
|
||||
ORDER BY LENGTH(lf.folder_path) DESC
|
||||
LIMIT 1;
|
||||
|
||||
-- Library Visibility queries
|
||||
-- name: SetLibraryVisibility :one
|
||||
INSERT INTO library_visibility (user_id, library_id, is_visible)
|
||||
@@ -129,8 +139,8 @@ ORDER BY l.created_at ASC;
|
||||
|
||||
-- Media Items queries
|
||||
-- name: CreateMediaItem :one
|
||||
INSERT INTO media_items (library_id, title, author, isbn, description, file_path, file_size, mime_type, cover_image_path, series, series_number, tags, tags_search, asin, date_published, publisher, contributors, contributors_search, language, edition, page_count, genre, copyright_year, goodreads_id, openlibrary_id, google_books_id, added_by_admin_id, created_at, manga_type, reading_direction, series_count, volume, imprint, age_rating, web_url, story_arc, is_black_and_white, metadata_notes, community_rating, alternate_info, scan_information, summary, library_type_name)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43)
|
||||
INSERT INTO media_items (library_id, title, author, isbn, description, file_path, file_size, mime_type, cover_image_path, series, series_number, tags, tags_search, asin, date_published, publisher, contributors, contributors_search, language, edition, page_count, genre, copyright_year, goodreads_id, openlibrary_id, google_books_id, added_by_admin_id, created_at, imported_at, manga_type, reading_direction, series_count, volume, imprint, age_rating, web_url, story_arc, is_black_and_white, metadata_notes, community_rating, alternate_info, scan_information, summary, library_type_name)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44)
|
||||
RETURNING *;
|
||||
|
||||
-- name: GetMediaItem :one
|
||||
@@ -324,6 +334,24 @@ SELECT setting_value FROM system_settings WHERE setting_key = 'default_timezone'
|
||||
-- name: CountUserDevices :one
|
||||
SELECT COUNT(*) FROM devices WHERE user_id = $1;
|
||||
|
||||
-- name: GetFirstAdminExclude :one
|
||||
SELECT id, email, username, theme, first_name, last_name, role, max_devices, created_at, updated_at FROM users
|
||||
WHERE role = 'admin' AND id != $1
|
||||
ORDER BY created_at ASC
|
||||
LIMIT 1;
|
||||
|
||||
-- name: GetFirstAdmin :one
|
||||
SELECT id FROM users
|
||||
WHERE role = 'admin'
|
||||
ORDER BY created_at ASC
|
||||
LIMIT 1;
|
||||
|
||||
-- name: ReassignLibraries :exec
|
||||
UPDATE libraries SET created_by_admin_id = $2, updated_at = NOW() WHERE created_by_admin_id = $1;
|
||||
|
||||
-- name: ReassignMediaItems :exec
|
||||
UPDATE media_items SET added_by_admin_id = $2 WHERE added_by_admin_id = $1;
|
||||
|
||||
-- name: DeleteUser :exec
|
||||
DELETE FROM users WHERE id = $1;
|
||||
|
||||
@@ -1878,7 +1906,7 @@ LIMIT $3;
|
||||
-- name: GetRecentlyAddedItems :many
|
||||
SELECT mi.* FROM media_items mi
|
||||
WHERE mi.library_id = $1
|
||||
ORDER BY mi.created_at DESC
|
||||
ORDER BY mi.imported_at DESC NULLS LAST, mi.created_at DESC
|
||||
LIMIT $2;
|
||||
|
||||
-- name: GetRecentlyReadItems :many
|
||||
|
||||
Reference in New Issue
Block a user