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

Ouverte Adaptée aux débutants
#490 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
74/100
Type d'issue
Refactorisation
Clarté
Clairement spécifiée
Activité
Active
Stack technique
go
Domaine
backend

Piste de recherche

Le travail se trouve dans internal/httpapi/insights.go, à l'intérieur de validateInsightExecution, où la boucle par usage mélange des vérifications de fournisseur/modèle, la déduplication et des vérifications Token/coût. Commence par lire cette boucle, puis déplace les vérifications Token et coût dans une fonction au niveau du paquet validateInsightUsageAmounts(u domain.InsightUsage) string, en gardant les messages et l'ordre des vérifications inchangés. Terminé lorsque TestInsightsValidationAndHTTP passe toujours, qu'un nouveau test piloté par table couvre les valeurs limites valides et chaque branche d'erreur, et que gofmt, go vet ./internal/httpapi/ et go test ./internal/httpapi/ sont propres.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

现状问题

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/。
Langage dominant
Go
Étoiles
141
Forks
28
Merge moyen
1 j 15 h
PR mergées (30 j)
113

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de Tencent/LoopForge

Toutes les issues de Tencent/LoopForge

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.