From 13b4d45868381ebf89ef7d9f1fe8c56d1392fb87 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 1 May 2026 10:20:42 +0800 Subject: [PATCH] refactor(project): issue Update tracks changed fields and skips no-op audit --- internal/project/issue_service.go | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/internal/project/issue_service.go b/internal/project/issue_service.go index fcf9050..37ebe82 100644 --- a/internal/project/issue_service.go +++ b/internal/project/issue_service.go @@ -128,24 +128,26 @@ func (s *issueService) Update(ctx context.Context, c Caller, slug string, number } title, desc := cur.Title, cur.Description - if in.Title != nil { + changed := map[string]any{} + if in.Title != nil && *in.Title != cur.Title { title = *in.Title + changed["title"] = "" } - if in.Description != nil { + if in.Description != nil && *in.Description != cur.Description { desc = *in.Description + changed["description"] = "" } // requirement 三态:未传(in.RequirementNumber == nil)→ 保持 // 传 nil 指针(**nil)→ detach // 传值(*RequirementNumber 不是 nil)→ resolve & validate reqID := cur.RequirementID - auditFrom := "" - auditTo := "" if in.RequirementNumber != nil { - auditFrom = "" + auditFrom := "" if cur.RequirementID != nil { auditFrom = cur.RequirementID.String() } + var auditTo string if *in.RequirementNumber == nil { reqID = nil auditTo = "" @@ -157,18 +159,21 @@ func (s *issueService) Update(ctx context.Context, c Caller, slug string, number reqID = &r.ID auditTo = r.ID.String() } + if auditFrom != auditTo { + changed["from_requirement"] = auditFrom + changed["to_requirement"] = auditTo + } + } + + if len(changed) == 0 { + return cur, nil } out, err := s.repo.UpdateIssueCore(ctx, cur.ID, title, desc, reqID) if err != nil { return nil, err } - meta := map[string]any{"changed_fields": ""} - if auditFrom != "" { - meta["from_requirement"] = auditFrom - meta["to_requirement"] = auditTo - } - s.recordAudit(ctx, c, "issue.update", out.ID.String(), meta) + s.recordAudit(ctx, c, "issue.update", out.ID.String(), map[string]any{"changed_fields": changed}) return out, nil }