feat: add Kobo shelf and entitlements tables to schema
This commit is contained in:
@@ -110,7 +110,12 @@ CREATE TABLE media_items (
|
|||||||
is_reflowable BOOLEAN DEFAULT TRUE,
|
is_reflowable BOOLEAN DEFAULT TRUE,
|
||||||
has_fixed_layout BOOLEAN DEFAULT FALSE,
|
has_fixed_layout BOOLEAN DEFAULT FALSE,
|
||||||
total_characters BIGINT,
|
total_characters BIGINT,
|
||||||
chapter_count INTEGER
|
chapter_count INTEGER,
|
||||||
|
-- Kobo-Specific Metadata (Phase 4)
|
||||||
|
entitlement_id VARCHAR(255) UNIQUE,
|
||||||
|
revision_number INTEGER DEFAULT 1,
|
||||||
|
kobo_content_id VARCHAR(255),
|
||||||
|
kobo_metadata JSONB
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Create ebooks view for backward compatibility
|
-- Create ebooks view for backward compatibility
|
||||||
@@ -271,6 +276,49 @@ CREATE TABLE sync_conflicts (
|
|||||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
-- ============================================
|
||||||
|
-- KOBO SHELF MANAGEMENT (Phase 4)
|
||||||
|
-- ============================================
|
||||||
|
CREATE TABLE kobo_shelves (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
device_id UUID NOT NULL REFERENCES devices(id) ON DELETE CASCADE,
|
||||||
|
media_item_id UUID NOT NULL REFERENCES media_items(id) ON DELETE CASCADE,
|
||||||
|
shelf_name VARCHAR(100) DEFAULT 'Default',
|
||||||
|
shelf_position INTEGER DEFAULT 0,
|
||||||
|
added_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
last_synced_at TIMESTAMP WITH TIME ZONE,
|
||||||
|
UNIQUE(device_id, media_item_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_kobo_shelves_device_id ON kobo_shelves(device_id);
|
||||||
|
CREATE INDEX idx_kobo_shelves_media_item_id ON kobo_shelves(media_item_id);
|
||||||
|
CREATE INDEX idx_kobo_shelves_shelf_name ON kobo_shelves(shelf_name);
|
||||||
|
|
||||||
|
-- ============================================
|
||||||
|
-- KOBO ENTITLEMENTS TRACKING (Phase 4)
|
||||||
|
-- ============================================
|
||||||
|
CREATE TABLE kobo_entitlements (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
device_id UUID NOT NULL REFERENCES devices(id) ON DELETE CASCADE,
|
||||||
|
media_item_id UUID NOT NULL REFERENCES media_items(id) ON DELETE CASCADE,
|
||||||
|
entitlement_id VARCHAR(255) NOT NULL,
|
||||||
|
content_id VARCHAR(255) NOT NULL,
|
||||||
|
revision_number INTEGER DEFAULT 1,
|
||||||
|
purchase_date TIMESTAMP WITH TIME ZONE,
|
||||||
|
accession_date TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
book_status VARCHAR(20) DEFAULT 'installed',
|
||||||
|
sync_status VARCHAR(20) DEFAULT 'synced',
|
||||||
|
kobo_metadata JSONB,
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||||
|
UNIQUE(device_id, entitlement_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_kobo_entitlements_device_id ON kobo_entitlements(device_id);
|
||||||
|
CREATE INDEX idx_kobo_entitlements_media_item_id ON kobo_entitlements(media_item_id);
|
||||||
|
CREATE INDEX idx_kobo_entitlements_entitlement_id ON kobo_entitlements(entitlement_id);
|
||||||
|
CREATE INDEX idx_kobo_entitlements_content_id ON kobo_entitlements(content_id);
|
||||||
|
|
||||||
-- ============================================
|
-- ============================================
|
||||||
-- READING HISTORY (Phase 1)
|
-- READING HISTORY (Phase 1)
|
||||||
-- ============================================
|
-- ============================================
|
||||||
|
|||||||
Reference in New Issue
Block a user