package storage import ( "context" "database/sql" "dashboard-cdc-worker/internal/dashboard" ) func (r *MySQLRepository) applyRechargeDetail(ctx context.Context, tx *sql.Tx, c dashboard.Contribution) error { detail := c.RechargeDetail if detail == nil || detail.RecordID == "" || detail.SourceType == "" { return nil } if c.DeltaSign < 0 { _, err := tx.ExecContext(ctx, ` DELETE FROM country_dashboard_recharge_detail WHERE source_type = ? AND record_id = ? `, detail.SourceType, detail.RecordID) return err } if detail.EventTime.IsZero() { return nil } _, err := tx.ExecContext(ctx, ` INSERT INTO country_dashboard_recharge_detail ( source_type, record_id, source_channel, sys_origin, user_id, country_code, country_name, amount, coin_quantity, remark, create_time, update_time ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW()) ON DUPLICATE KEY UPDATE source_channel = VALUES(source_channel), sys_origin = VALUES(sys_origin), user_id = VALUES(user_id), country_code = VALUES(country_code), country_name = VALUES(country_name), amount = VALUES(amount), coin_quantity = VALUES(coin_quantity), remark = VALUES(remark), create_time = VALUES(create_time), update_time = NOW() `, detail.SourceType, detail.RecordID, detail.SourceChannel, detail.SysOrigin, detail.UserID, detail.Country.Code, detail.Country.Name, detail.Amount, detail.CoinQuantity, detail.Remark, detail.EventTime) return err }