-- 图片主表基础版
CREATE TABLE images (
    -- 核心标识字段
    image_id VARCHAR(36) PRIMARY KEY DEFAULT gen_random_uuid()::varchar,
    
    -- 存储元数据
    storage_key TEXT NOT NULL,    -- 文件显示名称
    file_name TEXT NOT NULL,     -- 文件存储名称，可以包含路径
    mime_type VARCHAR(32) NOT NULL CHECK (mime_type LIKE 'image/%'),
    file_size BIGINT NOT NULL CHECK (file_size > 0),
    width INT CHECK (width > 0),
    height INT CHECK (height > 0),
    
    -- 业务元数据
    category_id VARCHAR(36), -- 分类服务提供的UUID
    tags TEXT[] DEFAULT '{}'::TEXT[],
    
    -- 系统管控字段
    created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
    updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
    is_deleted BOOLEAN DEFAULT FALSE NOT NULL
);

-- 索引配置
CREATE INDEX idx_images_category ON images (category_id);
CREATE INDEX idx_images_created ON images (created_at);
CREATE INDEX idx_images_tags ON images USING GIN(tags);

-- 自动更新时间触发器
CREATE OR REPLACE FUNCTION update_image_modified()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = NOW();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_update_image
BEFORE UPDATE ON images
FOR EACH ROW EXECUTE FUNCTION update_image_modified();