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() }