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,
|
||||
has_fixed_layout BOOLEAN DEFAULT FALSE,
|
||||
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
|
||||
@@ -271,6 +276,49 @@ CREATE TABLE sync_conflicts (
|
||||
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)
|
||||
-- ============================================
|
||||
|
||||
Reference in New Issue
Block a user