From 0c0aae1eacc834ca265b25bd4b4c058761357e7a Mon Sep 17 00:00:00 2001 From: altamash Date: Tue, 23 Dec 2025 18:52:28 +0530 Subject: [PATCH] =?UTF-8?q?Robust=20change=20detection:=20replaced=20strin?= =?UTF-8?q?g=20concat=20with=20struct-based=20compare=20in=20hasModelMappi?= =?UTF-8?q?ngsChanged;=20removed=20boolTo01.=20=20=20=20=E2=80=A2=20=20Per?= =?UTF-8?q?formance:=20pre-allocate=20map=20and=20regex=20slice=20capaciti?= =?UTF-8?q?es=20in=20UpdateMappings.=20=20=20=20=E2=80=A2=20=20Verified=20?= =?UTF-8?q?with=20amp=20module=20tests=20(all=20passing)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/api/modules/amp/amp.go | 27 +++++++++-------------- internal/api/modules/amp/model_mapping.go | 4 ++-- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/internal/api/modules/amp/amp.go b/internal/api/modules/amp/amp.go index d1309644..2a2ccb13 100644 --- a/internal/api/modules/amp/amp.go +++ b/internal/api/modules/amp/amp.go @@ -279,21 +279,23 @@ func (m *AmpModule) hasModelMappingsChanged(old *config.AmpCode, new *config.Amp return true } - // Build map for efficient comparison - oldMap := make(map[string]string, len(old.ModelMappings)) + // Build map for efficient and robust comparison + type mappingInfo struct { + to string + regex bool + } + oldMap := make(map[string]mappingInfo, len(old.ModelMappings)) for _, mapping := range old.ModelMappings { - from := strings.TrimSpace(mapping.From) - to := strings.TrimSpace(mapping.To) - key := from - val := to + "|regex=" + boolTo01(mapping.Regex) - oldMap[key] = val + oldMap[strings.TrimSpace(mapping.From)] = mappingInfo{ + to: strings.TrimSpace(mapping.To), + regex: mapping.Regex, + } } for _, mapping := range new.ModelMappings { from := strings.TrimSpace(mapping.From) to := strings.TrimSpace(mapping.To) - val := to + "|regex=" + boolTo01(mapping.Regex) - if oldVal, exists := oldMap[from]; !exists || oldVal != val { + if oldVal, exists := oldMap[from]; !exists || oldVal.to != to || oldVal.regex != mapping.Regex { return true } } @@ -301,13 +303,6 @@ func (m *AmpModule) hasModelMappingsChanged(old *config.AmpCode, new *config.Amp return false } -func boolTo01(b bool) string { - if b { - return "1" - } - return "0" -} - // hasAPIKeyChanged compares old and new API keys. func (m *AmpModule) hasAPIKeyChanged(old *config.AmpCode, new *config.AmpCode) bool { oldKey := "" diff --git a/internal/api/modules/amp/model_mapping.go b/internal/api/modules/amp/model_mapping.go index bc350f49..0741a52c 100644 --- a/internal/api/modules/amp/model_mapping.go +++ b/internal/api/modules/amp/model_mapping.go @@ -91,8 +91,8 @@ func (m *DefaultModelMapper) UpdateMappings(mappings []config.AmpModelMapping) { defer m.mu.Unlock() // Clear and rebuild mappings - m.mappings = make(map[string]string) - m.regexps = m.regexps[:0] + m.mappings = make(map[string]string, len(mappings)) + m.regexps = make([]regexMapping, 0, len(mappings)) for _, mapping := range mappings { from := strings.TrimSpace(mapping.From)