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

42 lines
940 B
Go

package main
import (
"database/sql"
"fmt"
"os"
"time"
)
const bcryptHashFile = "loadtest_bcrypt.txt"
func SeedUsers(db *sql.DB) error {
hash, err := os.ReadFile(bcryptHashFile)
if err != nil {
return fmt.Errorf("read bcrypt hash file %s: %w (run Task 10 Step 1 first)", bcryptHashFile, err)
}
ts := time.Now().UnixMilli()
tx, err := db.Begin()
if err != nil {
return err
}
defer tx.Rollback()
stmt, err := tx.Prepare(`
INSERT INTO users (id, mobile, password_hash, is_active, created_at, updated_at)
VALUES ($1, $2, $3, true, $4, $4)
ON CONFLICT (id) DO NOTHING
`)
if err != nil {
return err
}
defer stmt.Close()
for uid := LoadtestUserMin; uid <= LoadtestUserMax; uid++ {
mobile := fmt.Sprintf("199%08d", uid-LoadtestUserMin+1)
if _, err := stmt.Exec(uid, mobile, string(hash), ts); err != nil {
return fmt.Errorf("insert user %d: %w", uid, err)
}
}
return tx.Commit()
}