Initial commit of akmon project

This commit is contained in:
2026-01-20 08:04:15 +08:00
commit 77a2bab985
1309 changed files with 343305 additions and 0 deletions

View File

@@ -0,0 +1,110 @@
-- ===================================================================
-- 基于ak_contents的商品扩展方案不推荐但可行
-- ===================================================================
-- 1. 为ak_contents添加商品相关字段
DO $$
BEGIN
-- 添加内容类型字段区分资讯和商品
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='ak_contents' AND column_name='content_type') THEN
ALTER TABLE public.ak_contents ADD COLUMN content_type VARCHAR(50) DEFAULT 'article';
COMMENT ON COLUMN public.ak_contents.content_type IS '内容类型article=资讯product=商品';
END IF;
-- 添加商品特有字段
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='ak_contents' AND column_name='product_code') THEN
ALTER TABLE public.ak_contents ADD COLUMN product_code VARCHAR(50);
COMMENT ON COLUMN public.ak_contents.product_code IS '商品编码(仅商品类型使用)';
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='ak_contents' AND column_name='base_price') THEN
ALTER TABLE public.ak_contents ADD COLUMN base_price DECIMAL(12,2);
COMMENT ON COLUMN public.ak_contents.base_price IS '商品基础价格(仅商品类型使用)';
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='ak_contents' AND column_name='stock_quantity') THEN
ALTER TABLE public.ak_contents ADD COLUMN stock_quantity INTEGER DEFAULT 0;
COMMENT ON COLUMN public.ak_contents.stock_quantity IS '库存数量(仅商品类型使用)';
END IF;
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='ak_contents' AND column_name='merchant_id') THEN
ALTER TABLE public.ak_contents ADD COLUMN merchant_id UUID;
COMMENT ON COLUMN public.ak_contents.merchant_id IS '商家ID仅商品类型使用';
END IF;
END
$$;
-- 2. 创建商品特有的附加表
-- 商品SKU表
CREATE TABLE IF NOT EXISTS public.ak_product_skus (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
content_id UUID NOT NULL REFERENCES public.ak_contents(id) ON DELETE CASCADE,
sku_code VARCHAR(100) UNIQUE NOT NULL,
specification_values JSONB NOT NULL DEFAULT '{}',
price DECIMAL(12,2) NOT NULL,
stock_quantity INTEGER DEFAULT 0,
is_default BOOLEAN DEFAULT false,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- 商品规格表
CREATE TABLE IF NOT EXISTS public.ak_product_specifications (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
content_id UUID NOT NULL REFERENCES public.ak_contents(id) ON DELETE CASCADE,
spec_name VARCHAR(100) NOT NULL,
spec_values TEXT[] NOT NULL,
is_required BOOLEAN DEFAULT false,
sort_order INTEGER DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- 商品属性表
CREATE TABLE IF NOT EXISTS public.ak_product_attributes (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
content_id UUID NOT NULL REFERENCES public.ak_contents(id) ON DELETE CASCADE,
attribute_name VARCHAR(200) NOT NULL,
attribute_value TEXT NOT NULL,
attribute_group VARCHAR(100),
sort_order INTEGER DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- 3. 创建专门的商品视图
CREATE OR REPLACE VIEW public.vw_products AS
SELECT
id,
title as product_name,
content as product_description,
product_code,
base_price,
stock_quantity,
merchant_id,
category_id,
status,
tags,
published_at as listed_at,
created_at,
updated_at,
-- 排除资讯相关字段
NULL as ai_analysis_result,
NULL as translation_status
FROM public.ak_contents
WHERE content_type = 'product';
-- 4. 添加约束和索引
ALTER TABLE public.ak_contents ADD CONSTRAINT chk_product_code_unique
CHECK (content_type != 'product' OR product_code IS NOT NULL);
CREATE INDEX IF NOT EXISTS idx_ak_contents_product_type ON public.ak_contents(content_type) WHERE content_type = 'product';
CREATE INDEX IF NOT EXISTS idx_ak_contents_product_code ON public.ak_contents(product_code) WHERE content_type = 'product';
CREATE INDEX IF NOT EXISTS idx_ak_contents_merchant ON public.ak_contents(merchant_id) WHERE content_type = 'product';
-- 注意事项和限制
COMMENT ON VIEW public.vw_products IS '
使用ak_contents作为商品表的注意事项
1. 必须设置content_type=product来区分商品和资讯
2. 许多ak_contents的字段对商品无意义如AI翻译相关
3. 查询性能可能受影响,建议添加分区
4. 推荐使用独立的商品表设计以获得更好的架构
';