后端:
1.阶段 6 CP4/CP5 目录收口与共享边界纯化
- 将 backend 根目录收口为 services、client、gateway、cmd、shared 五个一级目录
- 收拢 bootstrap、inits、infra/kafka、infra/outbox、conv、respond、pkg、middleware,移除根目录旧实现与空目录
- 将 utils 下沉到 services/userauth/internal/auth,将 logic 下沉到 services/schedule/core/planning
- 将迁移期 runtime 桥接实现统一收拢到 services/runtime/{conv,dao,eventsvc,model},删除 shared/legacy 与未再被 import 的旧 service 实现
- 将 gateway/shared/respond 收口为 HTTP/Gin 错误写回适配,shared/respond 仅保留共享错误语义与状态映射
- 将 HTTP IdempotencyMiddleware 与 RateLimitMiddleware 收口到 gateway/middleware
- 将 GormCachePlugin 下沉到 shared/infra/gormcache,将共享 RateLimiter 下沉到 shared/infra/ratelimit,将 agent token budget 下沉到 services/agent/shared
- 删除 InitEino 兼容壳,收缩 cmd/internal/coreinit 仅保留旧组合壳残留域初始化语义
- 更新微服务迁移计划与桌面 checklist,补齐 CP4/CP5 当前切流点、目录终态与验证结果
- 完成 go test ./...、git diff --check 与最终真实 smoke;health、register/login、task/create+get、schedule/today、task-class/list、memory/items、agent chat/meta/timeline/context-stats 全部 200,SSE 合并结果为 CP5_OK 且 [DONE] 只有 1 个
81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package agentshared
|
|
|
|
import "github.com/LoveLosita/smartflow/backend/services/runtime/model"
|
|
|
|
func CloneWeekSchedules(src []model.UserWeekSchedule) []model.UserWeekSchedule {
|
|
if len(src) == 0 {
|
|
return nil
|
|
}
|
|
|
|
dst := make([]model.UserWeekSchedule, 0, len(src))
|
|
for _, week := range src {
|
|
eventsCopy := make([]model.WeeklyEventBrief, len(week.Events))
|
|
copy(eventsCopy, week.Events)
|
|
dst = append(dst, model.UserWeekSchedule{
|
|
Week: week.Week,
|
|
Events: eventsCopy,
|
|
})
|
|
}
|
|
return dst
|
|
}
|
|
|
|
func CloneHybridEntries(src []model.HybridScheduleEntry) []model.HybridScheduleEntry {
|
|
if len(src) == 0 {
|
|
return nil
|
|
}
|
|
dst := make([]model.HybridScheduleEntry, len(src))
|
|
copy(dst, src)
|
|
return dst
|
|
}
|
|
|
|
func CloneTaskClassItems(src []model.TaskClassItem) []model.TaskClassItem {
|
|
if len(src) == 0 {
|
|
return nil
|
|
}
|
|
|
|
dst := make([]model.TaskClassItem, 0, len(src))
|
|
for _, item := range src {
|
|
copied := item
|
|
if item.CategoryID != nil {
|
|
v := *item.CategoryID
|
|
copied.CategoryID = &v
|
|
}
|
|
if item.Order != nil {
|
|
v := *item.Order
|
|
copied.Order = &v
|
|
}
|
|
if item.Content != nil {
|
|
v := *item.Content
|
|
copied.Content = &v
|
|
}
|
|
if item.Status != nil {
|
|
v := *item.Status
|
|
copied.Status = &v
|
|
}
|
|
if item.EmbeddedTime != nil {
|
|
t := *item.EmbeddedTime
|
|
copied.EmbeddedTime = &t
|
|
}
|
|
dst = append(dst, copied)
|
|
}
|
|
return dst
|
|
}
|
|
|
|
func CloneInts(src []int) []int {
|
|
if len(src) == 0 {
|
|
return nil
|
|
}
|
|
dst := make([]int, len(src))
|
|
copy(dst, src)
|
|
return dst
|
|
}
|
|
|
|
func CloneStrings(src []string) []string {
|
|
if len(src) == 0 {
|
|
return nil
|
|
}
|
|
dst := make([]string, len(src))
|
|
copy(dst, src)
|
|
return dst
|
|
}
|