40 lines
1.2 KiB
Go
40 lines
1.2 KiB
Go
package identity
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
)
|
|
|
|
type SeedResult struct {
|
|
Username string
|
|
MerchantSourceKey string
|
|
MerchantName string
|
|
}
|
|
|
|
func SeedDemo(ctx context.Context, pool *pgxpool.Pool, username, password string) (SeedResult, error) {
|
|
hash, err := HashPassword(password)
|
|
if err != nil {
|
|
return SeedResult{}, err
|
|
}
|
|
var result SeedResult
|
|
var merchantID int64
|
|
err = pool.QueryRow(ctx, `SELECT m.id,m.source_key,m.display_name
|
|
FROM merchants m JOIN payment_sessions ps ON ps.merchant_id=m.id
|
|
GROUP BY m.id ORDER BY count(*) DESC,m.source_key LIMIT 1`).Scan(
|
|
&merchantID, &result.MerchantSourceKey, &result.MerchantName,
|
|
)
|
|
if err != nil {
|
|
return SeedResult{}, fmt.Errorf("selecting demo merchant: %w", err)
|
|
}
|
|
_, err = pool.Exec(ctx, `INSERT INTO merchant_users(merchant_id,username,password_hash)
|
|
VALUES ($1,$2,$3) ON CONFLICT (username) DO UPDATE
|
|
SET merchant_id=excluded.merchant_id,password_hash=excluded.password_hash,is_active=true`, merchantID, username, hash)
|
|
if err != nil {
|
|
return SeedResult{}, fmt.Errorf("seeding demo merchant user: %w", err)
|
|
}
|
|
result.Username = username
|
|
return result, nil
|
|
}
|