【架构优化】合并 repo/analytics.go 中重复的用户/项目/需求来源累加器取用或新建逻辑

Ouverte
#473 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

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

@fx-kurumi y travaille déjà.

Depuis le 13/11/2026.

  • #474 par @fx-kurumi — ouverte

Évaluation

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

Piste de recherche

The duplicated get-or-create logic lives in internal/repo/analytics.go, in accumulateUserUsage, accumulateProjectUsage, accumulateIssueSource and accumulateConversationRun. Read those four functions first to see the shared default values and key formats. The issue names the three helper functions to add, but pull request #474 is already open against this work, so check it before starting. Done means the helpers are used by both callers, the new analytics_accumulator_entry_test.go passes, and go test ./internal/repo/ passes.

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

Description

现状问题

internal/repo/analytics.go 中「按键取累加器、不存在就新建并写回 map」的代码在两处各写了一遍:

  • 责任人 × 自然日:accumulateUserUsage 与 accumulateConversationRun(含空责任人归为 unassigned、key 拼接)
  • 项目:accumulateProjectUsage 与 accumulateConversationRun(含空项目归为 unassigned)
  • 需求来源:accumulateIssueSource 与 accumulateConversationRun

accumulateConversationRun 因此长达约 90 行,且默认值、key 格式、初始字段(如 CostKnown: true、issues map)需要在两处同步维护,容易漂移。

重构方案

新增三个包内函数,两处调用方都改为使用它们:

  • analyticsUserEntry(values, userID, day)
  • analyticsProjectEntry(values, projectID)
  • analyticsSourceEntry(values, source)(空来源归为 local,与 accumulateIssueSource 原逻辑一致;analyticsIssueSource 本身不会返回空串,会话侧行为不变)

只抽取「取或建」部分,累加逻辑保持原样。

影响范围

仅 internal/repo/analytics.go 内部私有函数,不改对外接口、统计口径和返回结果。

验证方式

  • 新增 internal/repo/analytics_accumulator_entry_test.go,覆盖默认值、复用同一累加器、不同键新建
  • gofmt、go vet ./internal/repo/、go test ./internal/repo/(含现有 analytics 全部用例)
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.