Files
zt-closet-backend/.codebuddy/plans/service-span-naming-dedupe_b2900987.md
T
2026-09-11 01:41:52 +08:00

93 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: service-span-naming-dedupe
overview: 将 service 层 span 名从 svc.<方法名> 统一改为 svc.<领域><方法名>,消除跨 service 的同名 span,使 span 名全局唯一、可按名过滤,并与 DAO 层 dao.<领域><动作> 命名风格对齐。
todos:
- id: rename-clothes-outfit
content: 替换 clothes.go、outfit.go 共 13 处 span 命名(Clothes/Outfit 领域前缀)
status: completed
- id: rename-closet-collect-like
content: 替换 closet.go、collect.go、like.go 共 8 处 span 命名(ClosetShare/Collect/Like 领域前缀)
status: completed
- id: rename-notification-quota-user
content: 替换 notification.go、quota.go、user.go 共 10 处 span 命名(Notification/Quota/User 领域前缀)
status: completed
- id: rename-goods-horoscope-order-airecommend
content: 替换 goods.go、horoscope.go、order.go、airecommend.go 共 11 处 span 命名(Goods/Horoscope/Order/AIRecommend 领域前缀)
status: completed
- id: verify-build-vet
content: 运行 go build ./... 与 go vet ./...,并搜索确认无裸 svc 方法名 span
status: completed
dependencies:
- rename-clothes-outfit
- rename-closet-collect-like
- rename-notification-quota-user
- rename-goods-horoscope-order-airecommend
---
## 用户需求
将 service 层已埋设的 span 命名从 `svc.<方法名>` 调整为 `svc.<领域名><方法名>`,解决因多个 service 存在同名方法而导致的 span 名重复问题(如 `svc.Create`、`svc.List`、`svc.GetByUUID`),使每个 span 名全局唯一、可精确过滤与区分业务归属。
## 功能内容
- 仅修改 `global.Tracer.Start(ctx, "svc.Xxx")` 中的 span 名字符串,不改变业务逻辑、方法签名、import 或返回类型。
- 领域名取 Service 结构体名去掉 `Service` 后缀,与 DAO 层 `dao.ClothesCreate`、`dao.OutfitCreate` 的「领域名 + 动作」驼峰命名风格保持一致。
- 覆盖 12 个 service 文件、共 42 处 span。
## 技术栈
- 语言:Go
- 可观测:OpenTelemetry Trace(`global.Tracer.Start`)
- 改动性质:纯字符串替换,无新增依赖、无结构变更
## 实现方案
### 命名规则
- 领域名 = Service 结构体名去掉 `Service` 后缀:
- ClothesService → Clothes
- OutfitService → Outfit
- ClosetShareService → ClosetShare
- CollectService → Collect
- LikeService → Like
- NotificationService → Notification
- QuotaService → Quota
- UserService → User
- GoodsService → Goods
- HoroscopeService → Horoscope
- OrderService → Order
- AIRecommendService → AIRecommend
- span 名 = `svc.` + 领域名 + 方法名,驼峰无分隔,与方法名大小写一致。
### 特殊处理
- `CollectService.Collect` → `svc.CollectCollect`、`LikeService.LikeCreate` → `svc.LikeLikeCreate`,为「领域名 + 方法名」严格拼接导致的字面重复,但规则统一、机械可推导;本次不重命名方法本身。
## 实现细节
- 仅替换 `global.Tracer.Start(ctx, "svc.Xxx")` 的第二个字符串参数。
- 不改 import、不新增/删除 span、不调整方法体其他内容。
- 每个文件内按方法逐一替换,保证 42 处全部覆盖。
## 目录结构
```
internal/service/
├── clothes.go # [MODIFY] svc.Upload→svc.ClothesUpload、svc.ProcessImageAsync→svc.ClothesProcessImageAsync、svc.ProcessStatusGetByUUID→svc.ClothesProcessStatusGetByUUID、svc.GetByUUID→svc.ClothesGetByUUID、svc.UpdateByUUID→svc.ClothesUpdateByUUID、svc.DeleteByUUID→svc.ClothesDeleteByUUID、svc.List→svc.ClothesList(7 处)
├── outfit.go # [MODIFY] svc.Create→svc.OutfitCreate、svc.GetByUUID→svc.OutfitGetByUUID、svc.UpdateByUUID→svc.OutfitUpdateByUUID、svc.List→svc.OutfitList、svc.Delete→svc.OutfitDelete、svc.Public→svc.OutfitPublic(6 处)
├── closet.go # [MODIFY] svc.Create→svc.ClosetShareCreate、svc.Detail→svc.ClosetShareDetail、svc.List→svc.ClosetShareList、svc.Cancel→svc.ClosetShareCancel(4 处)
├── collect.go # [MODIFY] svc.Collect→svc.CollectCollect、svc.List→svc.CollectList(2 处)
├── like.go # [MODIFY] svc.LikeCreate→svc.LikeLikeCreate、svc.GetByTargetID→svc.LikeGetByTargetID(2 处)
├── notification.go # [MODIFY] svc.List→svc.NotificationList、svc.GetByUUID→svc.NotificationGetByUUID、svc.Read→svc.NotificationRead、svc.Unread→svc.NotificationUnread(4 处)
├── quota.go # [MODIFY] svc.InfoGetBySelf→svc.QuotaInfoGetBySelf、svc.FlowList→svc.QuotaFlowList(2 处)
├── user.go # [MODIFY] svc.WxLogin→svc.UserWxLogin、svc.InfoGetBySelf→svc.UserInfoGetBySelf、svc.ProfileUpdate→svc.UserProfileUpdate、svc.RefreshToken→svc.UserRefreshToken(4 处)
├── goods.go # [MODIFY] svc.GetByCode→svc.GoodsGetByCode、svc.List→svc.GoodsList(2 处)
├── horoscope.go # [MODIFY] svc.GetToday→svc.HoroscopeGetToday(1 处)
├── order.go # [MODIFY] svc.Create→svc.OrderCreate、svc.PayNotify→svc.OrderPayNotify、svc.Cancel→svc.OrderCancel、svc.List→svc.OrderList、svc.RefundApply→svc.OrderRefundApply、svc.RefundNotify→svc.OrderRefundNotify(6 处)
└── airecommend.go # [MODIFY] svc.Create→svc.AIRecommendCreate、svc.Save→svc.AIRecommendSave(2 处)
```
## 验证方式
- `go build ./...` 与 `go vet ./...` 通过。
- 全项目搜索确认不再存在 `"svc.Create"`、`"svc.List"`、`"svc.GetByUUID"` 等裸方法名 span。