52 lines
1.2 KiB
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()
|
|
}
|