From 8c4fcb18ad685f4400de42d0f3d2924c8f7636da Mon Sep 17 00:00:00 2001 From: yml2213 Date: Thu, 30 Jul 2026 14:34:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=8D=E5=AD=90=E6=95=B0=E6=8D=AE:=20?= =?UTF-8?q?=E4=B8=BA=E8=87=AA=E8=90=A5=E5=95=86=E6=88=B7=E9=A2=84=E7=BD=AE?= =?UTF-8?q?=E5=92=8C=E5=B9=B3=E7=B2=BE=E8=8B=B1=E5=95=86=E5=93=81=E7=9B=AE?= =?UTF-8?q?=E5=BD=95(27=E6=AC=BE)=EF=BC=8C=E6=88=90=E6=9C=AC/=E5=94=AE?= =?UTF-8?q?=E4=BB=B7=E5=8D=95=E4=BD=8D=E4=B8=BA=E7=A7=AF=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增迁移 005: 插入平台商品目录(products) + 自营商户可售商品(merchant_products) - 27款商品覆盖套装/上衣/枪械/背包/头盔/礼包/投掷物品类 - cost_amount = 消耗积分, price_amount = 售价积分, stock = -1(无限) - 幂等插入,重复执行不会产生冲突 --- .../migrations/005_seed_product_catalog.sql | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 backend/internal/database/migrations/005_seed_product_catalog.sql 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;