feat: support duplicate event name filter

This commit is contained in:
zhangsz
2025-07-09 15:24:54 +08:00
parent 546f7ac5f0
commit 130f0a5ac7

View File

@@ -116,6 +116,32 @@ func (s *CBMessageService) SelectCBMessageByPage(pageNum int, pageSize int) ([]C
// @example
// CBMessageService.InsertCBMessage(msg)
func (s *CBMessageService) InsertCBMessage(msg CBMessage) error {
// 解析messageJson获取eventName
var messageData map[string]interface{}
if err := json.Unmarshal(msg.MessageJson, &messageData); err != nil {
return fmt.Errorf("failed to parse message_json: %w", err)
}
// 提取eventName
eventName, ok := messageData["eventName"].(string)
if !ok || eventName == "" {
return fmt.Errorf("eventName is required in message_json")
}
// 检查是否已存在相同的eventName
var existingCount int64
if err := s.db.Table("cb_message").
Where("ne_type = ? AND ne_id = ? AND JSON_EXTRACT(message_json, '$.eventName') = ?",
msg.NeType, msg.NeId, eventName).
Count(&existingCount).Error; err != nil {
return fmt.Errorf("failed to check existing CB message: %w", err)
}
if existingCount > 0 {
return fmt.Errorf("CB message with eventName '%s' already exists for neType '%s' and neId '%s'",
eventName, msg.NeType, msg.NeId)
}
// 这里可以使用ORM或其他方式将ticket插入到数据库中
if err := s.db.Table("cb_message").Create(&msg).Error; err != nil {
return fmt.Errorf("failed to insert CB message: %w", err)