package main import ( "database/sql" "fmt" "time" ) const ( LoadtestPlaceholderURL = "/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() }