56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"time"
|
|
)
|
|
|
|
func SeedSlotsAndExhibits(db *sql.DB) error {
|
|
ts := time.Now().UnixMilli()
|
|
expire := ts + 4*3600*1000 // 4 小时
|
|
|
|
tx, err := db.Begin()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer tx.Rollback()
|
|
|
|
// 1. booth_slots: 每 user 3 个, is_enabled=true
|
|
slotStmt, err := tx.Prepare(`
|
|
INSERT INTO booth_slots (host_profile_id, user_id, star_id, slot_index, is_enabled, created_at, updated_at)
|
|
SELECT fp.id, fp.user_id, fp.star_id, idx, true, $1, $1
|
|
FROM fan_profiles fp
|
|
CROSS JOIN (VALUES (1),(2),(3)) AS s(idx)
|
|
WHERE fp.star_id = $2
|
|
ON CONFLICT DO NOTHING
|
|
`)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer slotStmt.Close()
|
|
if _, err := slotStmt.Exec(ts, LoadtestStarID); err != nil {
|
|
return err
|
|
}
|
|
|
|
// 2. exhibitions: 把每个 user 的前 2 个 asset 上架到 slot 1, 2
|
|
exStmt, err := tx.Prepare(`
|
|
INSERT INTO exhibitions (asset_id, slot_id, host_profile_id, occupier_uid, occupier_star_id, start_time, expire_at, created_at, updated_at)
|
|
SELECT a.id, bs.slot_id, fp.id, a.owner_uid, $1, $2, $3, $2, $2
|
|
FROM assets a
|
|
JOIN fan_profiles fp ON a.owner_uid = fp.user_id AND fp.star_id = $1
|
|
JOIN booth_slots bs ON bs.host_profile_id = fp.id AND (bs.slot_index = $4 OR bs.slot_index = $5)
|
|
WHERE a.star_id = $1 AND (a.name LIKE '%_1' OR a.name LIKE '%_2')
|
|
ON CONFLICT DO NOTHING
|
|
`)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer exStmt.Close()
|
|
// asset 1 → slot 1
|
|
if _, err := exStmt.Exec(LoadtestStarID, ts, expire, 1, 2); err != nil {
|
|
return err
|
|
}
|
|
|
|
return tx.Commit()
|
|
}
|