feat: add Kobo shelf and entitlement SQL queries
This commit is contained in:
@@ -845,15 +845,18 @@ SELECT
|
||||
mi.page_count,
|
||||
mi.format_group,
|
||||
mi.total_characters,
|
||||
mi.chapter_count
|
||||
mi.chapter_count,
|
||||
mi.entitlement_id,
|
||||
mi.revision_number,
|
||||
mi.file_size
|
||||
FROM media_items mi
|
||||
JOIN library_visibility lv ON mi.library_id = lv.library_id
|
||||
WHERE lv.user_id = $1
|
||||
WHERE lv.user_id = $1
|
||||
AND lv.is_visible = true
|
||||
ORDER BY mi.title ASC
|
||||
LIMIT 1000;
|
||||
ORDER BY mi.title ASC
|
||||
LIMIT 1000;
|
||||
|
||||
-- name: CheckForProgressConflicts :one
|
||||
-- name: CheckForProgressConflicts :one
|
||||
SELECT COUNT(*) as conflict_count
|
||||
FROM reading_progress
|
||||
WHERE media_item_id = $1
|
||||
@@ -861,4 +864,123 @@ WHERE media_item_id = $1
|
||||
AND last_sync_timestamp > NOW() - INTERVAL '5 minutes'
|
||||
AND last_sync_source != $3;
|
||||
|
||||
-- Media Items Admin Operations
|
||||
-- ============================================
|
||||
-- KOBO SHELF MANAGEMENT QUERIES (Phase 4)
|
||||
-- ============================================
|
||||
|
||||
-- name: AddBookToKoboShelf :one
|
||||
INSERT INTO kobo_shelves (device_id, media_item_id, shelf_name, shelf_position)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
ON CONFLICT (device_id, media_item_id)
|
||||
DO UPDATE SET
|
||||
shelf_name = EXCLUDED.shelf_name,
|
||||
shelf_position = EXCLUDED.shelf_position,
|
||||
last_synced_at = NOW()
|
||||
RETURNING *;
|
||||
|
||||
-- name: RemoveBookFromKoboShelf :exec
|
||||
DELETE FROM kobo_shelves WHERE device_id = $1 AND media_item_id = $2;
|
||||
|
||||
-- name: GetKoboShelfBooks :many
|
||||
SELECT ks.*, mi.title, mi.author, mi.file_path, mi.mime_type, mi.entitlement_id, mi.kobo_content_id, mi.revision_number
|
||||
FROM kobo_shelves ks
|
||||
JOIN media_items mi ON ks.media_item_id = mi.id
|
||||
WHERE ks.device_id = $1
|
||||
ORDER BY ks.shelf_position ASC, ks.added_at ASC;
|
||||
|
||||
-- name: GetKoboShelfBooksByShelfName :many
|
||||
SELECT ks.*, mi.title, mi.author, mi.file_path, mi.mime_type, mi.entitlement_id, mi.kobo_content_id, mi.revision_number
|
||||
FROM kobo_shelves ks
|
||||
JOIN media_items mi ON ks.media_item_id = mi.id
|
||||
WHERE ks.device_id = $1 AND ks.shelf_name = $2
|
||||
ORDER BY ks.shelf_position ASC, ks.added_at ASC;
|
||||
|
||||
-- name: UpdateKoboShelfBookPosition :exec
|
||||
UPDATE kobo_shelves
|
||||
SET shelf_position = $3, last_synced_at = NOW()
|
||||
WHERE device_id = $1 AND media_item_id = $2;
|
||||
|
||||
-- name: ClearKoboShelf :exec
|
||||
DELETE FROM kobo_shelves WHERE device_id = $1;
|
||||
|
||||
-- name: ClearKoboShelfByName :exec
|
||||
DELETE FROM kobo_shelves WHERE device_id = $1 AND shelf_name = $2;
|
||||
|
||||
-- name: IsBookOnKoboShelf :one
|
||||
SELECT EXISTS(
|
||||
SELECT 1 FROM kobo_shelves
|
||||
WHERE device_id = $1 AND media_item_id = $2
|
||||
) as on_shelf;
|
||||
|
||||
-- name: GetKoboShelfBookCount :one
|
||||
SELECT COUNT(*) as book_count
|
||||
FROM kobo_shelves
|
||||
WHERE device_id = $1;
|
||||
|
||||
-- ============================================
|
||||
-- KOBO ENTITLEMENT QUERIES (Phase 4)
|
||||
-- ============================================
|
||||
|
||||
-- name: CreateOrUpdateKoboEntitlement :one
|
||||
INSERT INTO kobo_entitlements (device_id, media_item_id, entitlement_id, content_id, revision_number, purchase_date, kobo_metadata)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
||||
ON CONFLICT (device_id, entitlement_id)
|
||||
DO UPDATE SET
|
||||
content_id = EXCLUDED.content_id,
|
||||
revision_number = EXCLUDED.revision_number,
|
||||
purchase_date = COALESCE(EXCLUDED.purchase_date, kobo_entitlements.purchase_date),
|
||||
book_status = 'installed',
|
||||
sync_status = 'synced',
|
||||
kobo_metadata = EXCLUDED.kobo_metadata,
|
||||
updated_at = NOW()
|
||||
RETURNING *;
|
||||
|
||||
-- name: GetKoboEntitlementsForDevice :many
|
||||
SELECT ke.*, mi.title, mi.author, mi.file_path
|
||||
FROM kobo_entitlements ke
|
||||
JOIN media_items mi ON ke.media_item_id = mi.id
|
||||
WHERE ke.device_id = $1
|
||||
ORDER BY ke.accession_date DESC;
|
||||
|
||||
-- name: GetKoboEntitlementByContentId :one
|
||||
SELECT ke.*, mi.title, mi.author, mi.file_path
|
||||
FROM kobo_entitlements ke
|
||||
JOIN media_items mi ON ke.media_item_id = mi.id
|
||||
WHERE ke.device_id = $1 AND ke.content_id = $2;
|
||||
|
||||
-- name: GetKoboEntitlementByEntitlementId :one
|
||||
SELECT ke.*, mi.title, mi.author, mi.file_path
|
||||
FROM kobo_entitlements ke
|
||||
JOIN media_items mi ON ke.media_item_id = mi.id
|
||||
WHERE ke.device_id = $1 AND ke.entitlement_id = $2;
|
||||
|
||||
-- name: UpdateKoboEntitlementStatus :exec
|
||||
UPDATE kobo_entitlements
|
||||
SET book_status = $3, sync_status = 'synced', updated_at = NOW()
|
||||
WHERE device_id = $1 AND entitlement_id = $2;
|
||||
|
||||
-- name: UpdateKoboEntitlementRevision :exec
|
||||
UPDATE kobo_entitlements
|
||||
SET revision_number = $3, updated_at = NOW()
|
||||
WHERE device_id = $1 AND entitlement_id = $2;
|
||||
|
||||
-- name: DeleteKoboEntitlement :exec
|
||||
DELETE FROM kobo_entitlements WHERE device_id = $1 AND entitlement_id = $2;
|
||||
|
||||
-- name: GenerateKoboEntitlementId :one
|
||||
SELECT 'kobo_' || uuid_generate_v4()::TEXT as entitlement_id;
|
||||
|
||||
-- name: UpdateMediaItemKoboMetadata :one
|
||||
UPDATE media_items
|
||||
SET entitlement_id = $2,
|
||||
kobo_content_id = $3,
|
||||
revision_number = COALESCE($4, revision_number) + 1,
|
||||
kobo_metadata = $5,
|
||||
updated_at = NOW()
|
||||
WHERE id = $1
|
||||
RETURNING *;
|
||||
|
||||
-- name: GetMediaItemByKoboContentId :one
|
||||
SELECT * FROM media_items WHERE kobo_content_id = $1;
|
||||
|
||||
-- Media Items Admin Operations
|
||||
Reference in New Issue
Block a user