From 853bd730bbc6b3f68cf5d6d979e662c27fd1a10b Mon Sep 17 00:00:00 2001 From: Yared Yemane Date: Thu, 28 May 2026 02:07:18 -0700 Subject: [PATCH] Fix payment status update parameter typing for ArifPay verification. Use explicit SQL casts and named sqlc args to avoid PostgreSQL 42P08 ambiguity during nonce/session status updates, and align repository bindings with regenerated sqlc types. Co-authored-by: Cursor --- db/query/payments.sql | 20 +++++++++--------- gen/db/payments.sql.go | 36 ++++++++++++++++----------------- internal/repository/payments.go | 10 ++++----- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/db/query/payments.sql b/db/query/payments.sql index 8812d40..51e366c 100644 --- a/db/query/payments.sql +++ b/db/query/payments.sql @@ -46,22 +46,22 @@ WHERE id = $2; -- name: UpdatePaymentStatusBySessionID :exec UPDATE payments SET - status = $1, - transaction_id = COALESCE($2, transaction_id), - payment_method = COALESCE($3, payment_method), - paid_at = CASE WHEN $1 = 'SUCCESS' THEN CURRENT_TIMESTAMP ELSE paid_at END, + status = sqlc.arg(status)::varchar, + transaction_id = COALESCE(sqlc.arg(transaction_id)::text, transaction_id), + payment_method = COALESCE(sqlc.arg(payment_method)::text, payment_method), + paid_at = CASE WHEN sqlc.arg(status)::varchar = 'SUCCESS' THEN CURRENT_TIMESTAMP ELSE paid_at END, updated_at = CURRENT_TIMESTAMP -WHERE session_id = $4; +WHERE session_id = sqlc.arg(session_id)::text; -- name: UpdatePaymentStatusByNonce :exec UPDATE payments SET - status = $1, - transaction_id = COALESCE($2, transaction_id), - payment_method = COALESCE($3, payment_method), - paid_at = CASE WHEN $1 = 'SUCCESS' THEN CURRENT_TIMESTAMP ELSE paid_at END, + status = sqlc.arg(status)::varchar, + transaction_id = COALESCE(sqlc.arg(transaction_id)::text, transaction_id), + payment_method = COALESCE(sqlc.arg(payment_method)::text, payment_method), + paid_at = CASE WHEN sqlc.arg(status)::varchar = 'SUCCESS' THEN CURRENT_TIMESTAMP ELSE paid_at END, updated_at = CURRENT_TIMESTAMP -WHERE nonce = $4; +WHERE nonce = sqlc.arg(nonce)::text; -- name: UpdatePaymentSessionID :exec UPDATE payments diff --git a/gen/db/payments.sql.go b/gen/db/payments.sql.go index 40a78d5..7550589 100644 --- a/gen/db/payments.sql.go +++ b/gen/db/payments.sql.go @@ -432,19 +432,19 @@ func (q *Queries) UpdatePaymentStatus(ctx context.Context, arg UpdatePaymentStat const UpdatePaymentStatusByNonce = `-- name: UpdatePaymentStatusByNonce :exec UPDATE payments SET - status = $1, - transaction_id = COALESCE($2, transaction_id), - payment_method = COALESCE($3, payment_method), - paid_at = CASE WHEN $1 = 'SUCCESS' THEN CURRENT_TIMESTAMP ELSE paid_at END, + status = $1::varchar, + transaction_id = COALESCE($2::text, transaction_id), + payment_method = COALESCE($3::text, payment_method), + paid_at = CASE WHEN $1::varchar = 'SUCCESS' THEN CURRENT_TIMESTAMP ELSE paid_at END, updated_at = CURRENT_TIMESTAMP -WHERE nonce = $4 +WHERE nonce = $4::text ` type UpdatePaymentStatusByNonceParams struct { - Status string `json:"status"` - TransactionID pgtype.Text `json:"transaction_id"` - PaymentMethod pgtype.Text `json:"payment_method"` - Nonce string `json:"nonce"` + Status string `json:"status"` + TransactionID string `json:"transaction_id"` + PaymentMethod string `json:"payment_method"` + Nonce string `json:"nonce"` } func (q *Queries) UpdatePaymentStatusByNonce(ctx context.Context, arg UpdatePaymentStatusByNonceParams) error { @@ -460,19 +460,19 @@ func (q *Queries) UpdatePaymentStatusByNonce(ctx context.Context, arg UpdatePaym const UpdatePaymentStatusBySessionID = `-- name: UpdatePaymentStatusBySessionID :exec UPDATE payments SET - status = $1, - transaction_id = COALESCE($2, transaction_id), - payment_method = COALESCE($3, payment_method), - paid_at = CASE WHEN $1 = 'SUCCESS' THEN CURRENT_TIMESTAMP ELSE paid_at END, + status = $1::varchar, + transaction_id = COALESCE($2::text, transaction_id), + payment_method = COALESCE($3::text, payment_method), + paid_at = CASE WHEN $1::varchar = 'SUCCESS' THEN CURRENT_TIMESTAMP ELSE paid_at END, updated_at = CURRENT_TIMESTAMP -WHERE session_id = $4 +WHERE session_id = $4::text ` type UpdatePaymentStatusBySessionIDParams struct { - Status string `json:"status"` - TransactionID pgtype.Text `json:"transaction_id"` - PaymentMethod pgtype.Text `json:"payment_method"` - SessionID pgtype.Text `json:"session_id"` + Status string `json:"status"` + TransactionID string `json:"transaction_id"` + PaymentMethod string `json:"payment_method"` + SessionID string `json:"session_id"` } func (q *Queries) UpdatePaymentStatusBySessionID(ctx context.Context, arg UpdatePaymentStatusBySessionIDParams) error { diff --git a/internal/repository/payments.go b/internal/repository/payments.go index b08197b..cd3957a 100644 --- a/internal/repository/payments.go +++ b/internal/repository/payments.go @@ -119,17 +119,17 @@ func (s *Store) UpdatePaymentStatus(ctx context.Context, id int64, status string func (s *Store) UpdatePaymentStatusBySessionID(ctx context.Context, sessionID, status, transactionID, paymentMethod string) error { return s.queries.UpdatePaymentStatusBySessionID(ctx, dbgen.UpdatePaymentStatusBySessionIDParams{ Status: status, - TransactionID: toPgText(&transactionID), - PaymentMethod: toPgText(&paymentMethod), - SessionID: toPgText(&sessionID), + TransactionID: transactionID, + PaymentMethod: paymentMethod, + SessionID: sessionID, }) } func (s *Store) UpdatePaymentStatusByNonce(ctx context.Context, nonce, status, transactionID, paymentMethod string) error { return s.queries.UpdatePaymentStatusByNonce(ctx, dbgen.UpdatePaymentStatusByNonceParams{ Status: status, - TransactionID: toPgText(&transactionID), - PaymentMethod: toPgText(&paymentMethod), + TransactionID: transactionID, + PaymentMethod: paymentMethod, Nonce: nonce, }) }