From dd75f0f705a900bace7bde8d0cebbe7b6a7bc33e Mon Sep 17 00:00:00 2001 From: windyboy Date: Fri, 26 Jul 2024 12:49:01 +0800 Subject: [PATCH] refactor: Improve CNL message parsing in BodyParser The code changes in `aviation_parser.go` and `aviation_parser_test.go` enhance the CNL message parsing logic in the `BodyParser` module. This ensures accurate extraction of data from CNL messages, including the category, aircraft ID, departure airport, and destination airport. The improvements improve the overall functionality and accuracy of the code. --- internal/domain/aviation.go | 4 ++++ internal/nats/sub.go | 24 +++++++++++------------- internal/parsers/aviation_parser.go | 13 ++++++++----- internal/parsers/aviation_parser_test.go | 8 ++++---- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/internal/domain/aviation.go b/internal/domain/aviation.go index d6a99dc..c02e11f 100644 --- a/internal/domain/aviation.go +++ b/internal/domain/aviation.go @@ -103,11 +103,15 @@ type ParsedMessage struct { ParsedAt time.Time `json:"parsedAt,omitempty"` // 解析时间: The time when the message was parsed. DispatchedAt time.Time `json:"dispatchedAt,omitempty"` // 分发时间: The time when the message was dispatched. NeedDispatch bool `json:"needDispatch"` // 需要分发: Indicates if the message needs to be dispatched. + Parsed bool `json:"parsed"` // 解析: Indicates if the message has been parsed. + Comments string `json:"comments,omitempty"` // 备注: Additional comments. + } // NewParsedMessage initializes a ParsedMessage with default values func NewParsedMessage() *ParsedMessage { return &ParsedMessage{ SecondaryAddresses: []string{}, + Parsed: false, } } diff --git a/internal/nats/sub.go b/internal/nats/sub.go index f79e49d..b8c8657 100644 --- a/internal/nats/sub.go +++ b/internal/nats/sub.go @@ -69,31 +69,29 @@ func (n *NatsHandler) handleMessage(msg *message.Message) error { defer n.mu.Unlock() log := utils.GetSugaredLogger() if msg.Payload == nil { - // fmt.Println("empty message") log.Error("empty message") return fmt.Errorf("empty message") } payload := string(msg.Payload) - var err error var parsed *domain.ParsedMessage - if parsed, err = parsers.Parse(payload); err != nil { - - // fmt.Printf("not parsed: [%s] : {%s} - %v\n", msg.UUID, msg.Payload, err) - log.Infof("not parsed: [%s] : {%s} - %v\n", msg.UUID, msg.Payload, err) - // return err + if parsed = parsers.Parse(payload); !parsed.Parsed { + log.Infof("not parsed: [%s] : {%s} \n", msg.UUID, msg.Payload) } else { - - // fmt.Printf("parsed [%s]: %v\n", msg.UUID, parsed) log.Infof("parsed [%s]: %v\n", msg.UUID, parsed) } + n.SaveMessage(parsed, msg.UUID) + return nil +} + +func (n *NatsHandler) SaveMessage(parsed *domain.ParsedMessage, uuid string) { + logger := watermill.NewStdLogger(false, false) if parsed != nil { - parsed.Uuid = msg.UUID - if err = n.hasuraRepo.CreateNew(parsed); err != nil { - fmt.Print("error inserting message", err) + parsed.Uuid = uuid + if err := n.hasuraRepo.CreateNew(parsed); err != nil { + logger.Error("error inserting message", err, map[string]interface{}{"message": parsed}) } } - return err } type PlainTextMarshaler struct{} diff --git a/internal/parsers/aviation_parser.go b/internal/parsers/aviation_parser.go index 74d2553..3201568 100644 --- a/internal/parsers/aviation_parser.go +++ b/internal/parsers/aviation_parser.go @@ -203,10 +203,12 @@ func (bp *BodyParser) createBodyData(data map[string]string) (string, interface{ } } -func Parse(rawText string) (*domain.ParsedMessage, error) { +func Parse(rawText string) *domain.ParsedMessage { message, err := ParseHeader(rawText) if err != nil { - return nil, err + msg := domain.NewParsedMessage() + msg.Text = rawText + return msg } bodyParser := NewBodyParser(message.Body) @@ -215,11 +217,12 @@ func Parse(rawText string) (*domain.ParsedMessage, error) { message.ParsedAt = time.Now() if err != nil { - return &message, err + message.Comments = err.Error() + return &message } - + message.Parsed = true message.BodyData = bodyData - return &message, nil + return &message } func cleanMessage(text string) string { diff --git a/internal/parsers/aviation_parser_test.go b/internal/parsers/aviation_parser_test.go index 0ef8456..9bbad93 100644 --- a/internal/parsers/aviation_parser_test.go +++ b/internal/parsers/aviation_parser_test.go @@ -263,9 +263,9 @@ FF ZBTJZPZX NNNN ` It("should parse the whole message correctly", func() { - parsedMessage, err := Parse(message) - Expect(err).ToNot(HaveOccurred()) + parsedMessage := Parse(message) Expect(parsedMessage).ToNot(BeNil()) + Expect(parsedMessage.Parsed).To(BeTrue()) Expect(parsedMessage.MessageID).To(Equal("TMQ2526")) Expect(parsedMessage.DateTime).To(Equal("141605")) Expect(parsedMessage.PrimaryAddress).To(Equal("ZBTJZPZX")) @@ -314,9 +314,9 @@ GG ZBTJZPZX NNNN ` It("should parse the whole message correctly", func() { - parsedMessage, err := Parse(message) - Expect(err).ToNot(HaveOccurred()) + parsedMessage := Parse(message) Expect(parsedMessage).ToNot(BeNil()) + Expect(parsedMessage.Parsed).To(BeTrue()) Expect(parsedMessage.MessageID).To(Equal("TMQ2617")) Expect(parsedMessage.DateTime).To(Equal("142150")) Expect(parsedMessage.PrimaryAddress).To(Equal("ZBTJZPZX"))