【架构优化】从 validateInsightExecution 中拆出单条用量 Token/成本校验 validateInsightUsageAmounts

Đang mở Phù hợp với người mới
#490 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
74/100
Loại issue
Tái cấu trúc
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
go
Lĩnh vực
backend

Hướng nghiên cứu

Công việc nằm trong internal/httpapi/insights.go, bên trong validateInsightExecution, nơi vòng lặp theo từng usage trộn lẫn các kiểm tra provider/model, chống trùng lặp và kiểm tra Token/chi phí. Bắt đầu bằng việc đọc vòng lặp đó, sau đó chuyển các kiểm tra Token và chi phí vào một hàm cấp package validateInsightUsageAmounts(u domain.InsightUsage) string, giữ nguyên các thông báo và thứ tự kiểm tra. Hoàn tất khi TestInsightsValidationAndHTTP vẫn pass, một test table-driven mới bao phủ các giá trị biên hợp lệ và từng nhánh lỗi, và gofmt, go vet ./internal/httpapi/ và go test ./internal/httpapi/ đều sạch.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

现状问题

internal/httpapi/insights.go 的 validateInsightExecution(圈复杂度 43)同时承担两层校验:执行汇总本身(类型、ID、状态、时间、时长、URL)和 usage 数组里每一项模型用量。单项用量的 Token 范围、缓存/推理包含关系、成本状态与金额校验约 20 行嵌在 for 循环里,和 provider/model 必填、去重混在一起,阅读和单独测试都不方便。

重构方案

  • 把循环体中 Token 与成本的校验抽成包级函数 validateInsightUsageAmounts(u domain.InsightUsage) string,错误文案与判断顺序保持原样。
  • validateInsightExecution 的循环只保留:provider/model 必填 → 同一 provider/model 去重 → 调用 validateInsightUsageAmounts,三者顺序与原实现完全一致,因此同时命中多条规则时返回的错误也不变。

影响范围

仅 internal/httpapi/insights.go 一个函数内部拆分 + 新增测试文件;/api/insights/v1/ingest 接口行为、错误文案、返回码均不变,无对外接口变化。

验证方式

  • 原有 TestInsightsValidationAndHTTP 全部通过;
  • 新增 validateInsightUsageAmounts 表驱动测试,覆盖合法输入(含边界值)与每一条错误分支;
  • gofmt、go vet ./internal/httpapi/、go test ./internal/httpapi/。
Ngôn ngữ chính
Go
Star
141
Fork
28
Merge trung bình
1 ngày 15 giờ
Pull request đã merge (30 ngày)
113

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của Tencent/LoopForge

Tất cả issue của Tencent/LoopForge

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.