topfans/backend/scripts/loadgen/seed/assets.go

52 lines
1.2 KiB
Go

package main
import (
"database/sql"
"fmt"
"time"
)
const (
LoadtestPlaceholderURL = "<OSS_URL>/loadtest-placeholder.png" // TODO: Task 48 上传 OSS 后替换
AssetsPerUser = 5
)
func SeedAssets(db *sql.DB) error {
ts := time.Now().UnixMilli()
var maxID int64
if err := db.QueryRow("SELECT COALESCE(MAX(id), 0) FROM assets").Scan(&maxID); err != nil {
return err
}
startID := maxID + 1000
tx, err := db.Begin()
if err != nil {
return err
}
defer tx.Rollback()
stmt, err := tx.Prepare(`
INSERT INTO assets (id, owner_uid, star_id, name, cover_url, info, status, like_count, is_active, created_at, updated_at, grade)
VALUES ($1, $2, $3, $4, $5, 'loadtest', 1, 0, true, $6, $6, 1)
ON CONFLICT (id) DO NOTHING
`)
if err != nil {
return err
}
defer stmt.Close()
n := int64(0)
for uid := LoadtestUserMin; uid <= LoadtestUserMax; uid++ {
for i := 1; i <= AssetsPerUser; i++ {
aid := startID + n
name := fmt.Sprintf("loadtest_asset_%d_%d", uid, i)
if _, err := stmt.Exec(aid, uid, LoadtestStarID, name, LoadtestPlaceholderURL, ts); err != nil {
return fmt.Errorf("insert asset %d: %w", aid, err)
}
n++
}
}
return tx.Commit()
}