Sfoglia il codice sorgente

fix: Transition加dbFields白名单——paid_amount仅记录事件日志不写入表

lq 1 mese fa
parent
commit
8881e628b4

+ 1 - 0
internal/modules/digital-ticket/api.go

@@ -38,6 +38,7 @@ func PayTicket(c *gin.Context) {
 	extra := map[string]interface{}{
 		"payment_method": req.PaymentMethod, "payment_order_no": req.PaymentOrderNo,
 		"paid_amount": req.PaidAmount,
+		"fee": t.Fee,
 	}
 	if err := ticketSvc.Transition(t.ID, service.StatePaid, extra); err != nil {
 		response.FailWithMessage(err.Error(), c)

+ 5 - 1
internal/modules/digital-ticket/service/service.go

@@ -88,8 +88,12 @@ func (s *TicketService) Transition(id uint, toState string, extra map[string]int
 		now := time.Now()
 		updates["exit_time"] = now
 	}
+	// 只允许表中存在的字段写入数据库,其余仅记录到事件日志
+	dbFields := map[string]bool{"payment_method": true, "payment_order_no": true, "fee": true}
 	for k, v := range extra {
-		updates[k] = v
+		if dbFields[k] {
+			updates[k] = v
+		}
 	}
 
 	event := map[string]interface{}{"event": toState}