bookwiz.io / supabase / migrations / 034_image_generation.sql
034_image_generation.sql
Raw
-- Image generation system for DALL-E 3 book covers and other generated images
-- Create generated_images table to store user's generated images
CREATE TABLE generated_images (
    id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
    user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE NOT NULL,
    book_id UUID REFERENCES books(id) ON DELETE SET NULL, -- Optional association with a book
    
    -- Image details
    prompt TEXT NOT NULL,
    revised_prompt TEXT, -- DALL-E 3 may revise prompts
    image_url TEXT NOT NULL, -- URL to the generated image
    
    -- Generation settings
    model TEXT NOT NULL DEFAULT 'dall-e-3',
    size TEXT NOT NULL DEFAULT '1024x1024' CHECK (size IN ('1024x1024', '1792x1024', '1024x1792')),
    quality TEXT NOT NULL DEFAULT 'standard' CHECK (quality IN ('standard', 'hd')),
    style TEXT NOT NULL DEFAULT 'vivid' CHECK (style IN ('natural', 'vivid')),
    
    -- Usage tracking
    cost_usd DECIMAL(10, 6) DEFAULT 0 CHECK (cost_usd >= 0),
    
    -- Metadata
    metadata JSONB DEFAULT '{}'::jsonb,
    
    -- Timestamps
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Create indexes for performance
CREATE INDEX idx_generated_images_user_id ON generated_images(user_id);
CREATE INDEX idx_generated_images_book_id ON generated_images(book_id);
CREATE INDEX idx_generated_images_created_at ON generated_images(created_at DESC);
CREATE INDEX idx_generated_images_model ON generated_images(model);

-- Create trigger for updated_at
CREATE TRIGGER update_generated_images_updated_at 
    BEFORE UPDATE ON generated_images 
    FOR EACH ROW 
    EXECUTE FUNCTION update_updated_at_column();

-- Row Level Security
ALTER TABLE generated_images ENABLE ROW LEVEL SECURITY;

-- Policies for generated_images
CREATE POLICY "Users can view their own generated images" ON generated_images
    FOR SELECT USING (auth.uid() = user_id);

CREATE POLICY "Users can create their own generated images" ON generated_images
    FOR INSERT WITH CHECK (auth.uid() = user_id);

CREATE POLICY "Users can update their own generated images" ON generated_images
    FOR UPDATE USING (auth.uid() = user_id);

CREATE POLICY "Users can delete their own generated images" ON generated_images
    FOR DELETE USING (auth.uid() = user_id);

-- Add realtime subscription
ALTER PUBLICATION supabase_realtime ADD TABLE generated_images;

-- Add comment for documentation
COMMENT ON TABLE generated_images IS 'Stores AI-generated images from DALL-E 3 for book covers and other creative content';