Files
zarinpal-analytics-backend/internal/identity/seed.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(DISTINCT ps.terminal_id)>1) DESC,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
}