feat(v2): outbox 退款感知(refund_id 进唯一键)+ 投递门禁放行退款态 + Enqueue 贯通 refundID
This commit is contained in:
@@ -17,14 +17,16 @@ type WebhookStore struct{ db *gorm.DB }
|
||||
|
||||
func NewWebhookStore(db *gorm.DB) *WebhookStore { return &WebhookStore{db: db} }
|
||||
|
||||
// EnqueueDelivery inserts an outbox row; a duplicate (out_trade_no,event_type)
|
||||
// is a no-op (idempotent enqueue) via ON CONFLICT DO NOTHING.
|
||||
func (s *WebhookStore) EnqueueDelivery(outTradeNo, bizSystem, eventType, payload string) error {
|
||||
// EnqueueDelivery inserts an outbox row; a duplicate (out_trade_no,event_type,refund_id)
|
||||
// is a no-op (idempotent enqueue) via ON CONFLICT DO NOTHING. refundID is the
|
||||
// refund's idempotency dimension (payment events pass "").
|
||||
func (s *WebhookStore) EnqueueDelivery(outTradeNo, bizSystem, eventType, refundID, payload string) error {
|
||||
row := model.WebhookDelivery{
|
||||
OutTradeNo: outTradeNo, BizSystem: bizSystem, EventType: eventType, Payload: payload,
|
||||
OutTradeNo: outTradeNo, BizSystem: bizSystem, EventType: eventType,
|
||||
RefundID: refundID, Payload: payload,
|
||||
}
|
||||
err := s.db.Clauses(clause.OnConflict{
|
||||
Columns: []clause.Column{{Name: "out_trade_no"}, {Name: "event_type"}},
|
||||
Columns: []clause.Column{{Name: "out_trade_no"}, {Name: "event_type"}, {Name: "refund_id"}},
|
||||
DoNothing: true,
|
||||
}).Create(&row).Error
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user