42 lines
940 B
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()
|
|
}
|