feat: support duplicate event name filter
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user