-- Create users table CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), email VARCHAR(255) UNIQUE NOT NULL, username VARCHAR(255) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, theme VARCHAR(50) DEFAULT 'tokyo-night', created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Create ebooks table CREATE TABLE ebooks ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), title VARCHAR(255) NOT NULL, author VARCHAR(255), isbn VARCHAR(13), description TEXT, file_path VARCHAR(500) NOT NULL, file_size BIGINT, mime_type VARCHAR(100), cover_image_path VARCHAR(500), created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Create reading_progress table CREATE TABLE reading_progress ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), ebook_id UUID NOT NULL REFERENCES ebooks(id) ON DELETE CASCADE, user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, current_page INTEGER DEFAULT 0, total_pages INTEGER, last_read_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), UNIQUE(ebook_id, user_id) ); -- Create indexes CREATE INDEX idx_users_email ON users(email); CREATE INDEX idx_users_username ON users(username); CREATE INDEX idx_ebooks_title ON ebooks(title); CREATE INDEX idx_ebooks_author ON ebooks(author); CREATE INDEX idx_reading_progress_ebook_id ON reading_progress(ebook_id); CREATE INDEX idx_reading_progress_user_id ON reading_progress(user_id);