diff --git a/backend/internal/database/migrations/005_seed_product_catalog.sql b/backend/internal/database/migrations/005_seed_product_catalog.sql new file mode 100644 index 0000000..57719a8 --- /dev/null +++ b/backend/internal/database/migrations/005_seed_product_catalog.sql @@ -0,0 +1,81 @@ +-- 默认商品目录种子数据:为自营商户预置和平精英商品,成本单位为积分。 +-- cost_amount = 消耗积分;price_amount = 价钱(元) * 10 = 售价积分。 + +-- 1. 插入平台商品目录(幂等) +INSERT INTO products (code, name, category, status) +SELECT v.code, v.name, v.category, 'active' +FROM (VALUES + ('suit_alan_walker', '套装-Alan Walker', '套装'), + ('suit_shadow_gothic', '套装-暗影哥特', '套装'), + ('top_black_elite_trainer','黑色高级特训官上衣', '上衣'), + ('m416_hamster_gray', 'M416-仓鼠灰灰', '枪械'), + ('bag_cute_bear', '萌熊伴侣背包', '背包'), + ('suit_dual_fluffy', '套装-双彩绵绵', '套装'), + ('suit_pink_sheep', '套装-糯粉咩咩', '套装'), + ('suit_first_peach', '套装-恋恋初桃', '套装'), + ('suit_romantic_destiny', '套装-浪漫天命', '套装'), + ('pack_western_cowboy', '西部牛仔大礼包', '礼包'), + ('smoke_pink_sheep', '烟雾弹-糯粉咩咩', '投掷物'), + ('frag_pink_sheep', '破片手榴弹-糯粉咩咩', '投掷物'), + ('suit_hamster_gray', '套装-仓鼠灰灰', '套装'), + ('suit_cute_bear', '套装-萌熊伴侣', '套装'), + ('bag_pink_sheep', '糯粉咩咩背包', '背包'), + ('helmet_pink_sheep', '糯粉咩咩头盔', '头盔'), + ('bag_hamster_gray', '仓鼠灰灰背包', '背包'), + ('helmet_hamster_gray', '仓鼠灰灰头盔', '头盔'), + ('suit_western_mystery', '套装-西部谜踪', '套装'), + ('helmet_panda_treasure', '国宝胖达头盔', '头盔'), + ('suit_panda_round', '套装-胖达圆圆', '套装'), + ('suit_panda_tuan', '套装-胖达团团', '套装'), + ('pack_lava_ranger', '熔岩游骑兵礼包', '礼包'), + ('suit_sand_dancer', '套装-狂沙舞者', '套装'), + ('pack_star_roam_outfit', '星际漫游服装礼包', '礼包'), + ('pack_star_roam_weapon', '星际漫游枪械礼包', '礼包'), + ('suit_cloud_bear', '套装-绵云熊熊', '套装') +) AS v(code, name, category) +ON CONFLICT (code) DO NOTHING; + +-- 2. 为自营商户创建可售商品(幂等,按 merchant_id + sku 唯一索引) +INSERT INTO merchant_products (merchant_id, product_id, sku, display_name, price_amount, cost_amount, currency, stock, status) +SELECT + m.id, + p.id, + p.code, + p.name, + v.price_amount, + v.cost_amount, + 'POINT', + -1, + 'active' +FROM (VALUES + ('suit_alan_walker', 360, 360), + ('suit_shadow_gothic', 888, 888), + ('top_black_elite_trainer',360, 360), + ('m416_hamster_gray', 1680, 1680), + ('bag_cute_bear', 2880, 2880), + ('suit_dual_fluffy', 1124, 1124), + ('suit_pink_sheep', 1880, 1880), + ('suit_first_peach', 988, 988), + ('suit_romantic_destiny', 360, 360), + ('pack_western_cowboy', 3200, 3200), + ('smoke_pink_sheep', 488, 488), + ('frag_pink_sheep', 488, 488), + ('suit_hamster_gray', 1280, 1280), + ('suit_cute_bear', 1680, 1680), + ('bag_pink_sheep', 1680, 1680), + ('helmet_pink_sheep', 1680, 1680), + ('bag_hamster_gray', 1680, 1680), + ('helmet_hamster_gray', 1680, 1680), + ('suit_western_mystery', 1150, 1150), + ('helmet_panda_treasure', 2340, 2340), + ('suit_panda_round', 2340, 2340), + ('suit_panda_tuan', 2340, 2340), + ('pack_lava_ranger', 960, 960), + ('suit_sand_dancer', 840, 840), + ('pack_star_roam_outfit', 8360, 8360), + ('pack_star_roam_weapon', 5160, 5160), + ('suit_cloud_bear', 1348, 1348) +) AS v(sku, price_amount, cost_amount) +JOIN products p ON p.code = v.sku +JOIN merchants m ON m.code = 'self-operated' +ON CONFLICT (merchant_id, sku) DO NOTHING;