From 715183994cc2b919adbd45930fe1acea32b096b3 Mon Sep 17 00:00:00 2001 From: douxu Date: Mon, 11 May 2026 17:35:43 +0800 Subject: [PATCH] fix: remove status mutation side effect in PublishEventToUI - stop overwriting record.Status inside the publish function - status should be managed by the caller, not the publisher --- event/publish_ui_event.go | 2 -- event/up_down_limit_alarm.go | 11 ++++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/event/publish_ui_event.go b/event/publish_ui_event.go index 55d5cdc..436f207 100644 --- a/event/publish_ui_event.go +++ b/event/publish_ui_event.go @@ -49,8 +49,6 @@ func initUIEventChannel(ctx context.Context) (*amqp.Channel, error) { // to the UI-facing fanout exchange. Intended to be called after the event has // been successfully persisted to the database. func PublishEventToUI(ctx context.Context, ch *amqp.Channel, record *EventRecord) error { - record.Status = constants.EventStatusReported - body, err := json.Marshal(record) if err != nil { logger.Error(ctx, "marshal event record for UI publish failed", "event_uuid", record.EventUUID, "error", err) diff --git a/event/up_down_limit_alarm.go b/event/up_down_limit_alarm.go index 7dca9fe..84f711a 100644 --- a/event/up_down_limit_alarm.go +++ b/event/up_down_limit_alarm.go @@ -127,24 +127,25 @@ func processAlarmEventMessage(ctx context.Context, msg amqp.Delivery, uiCh *amqp mongodbClient := database.GetMongoClient() var alarmEvent EventRecord - err := json.Unmarshal(msg.Body, &alarmEvent) - if err != nil { + if err := json.Unmarshal(msg.Body, &alarmEvent); err != nil { logger.Error(ctx, "unmarshal alarm event message failed", "error", err) return } alarmEvent.IsPersisted = true + alarmEvent.Status = constants.EventStatusReported + result, err := mongodbClient.Database(constants.EventDBName).Collection(constants.EventCollectionName).InsertOne(ctx, alarmEvent) if err != nil { logger.Error(ctx, "failed to insert alarm event into database", "error", err) return } - err = msg.Ack(false) - if err != nil { + logger.Info(ctx, "alarm event inserted into database", "result", result) + + if err := msg.Ack(false); err != nil { logger.Error(ctx, "ack alarm event message failed", "error", err) return } - logger.Info(ctx, "alarm event inserted into database", "result", result) if err := PublishEventToUI(ctx, uiCh, &alarmEvent); err != nil { logger.Error(ctx, "publish alarm event to UI failed", "event_uuid", alarmEvent.EventUUID, "error", err)