后端: 1.task-class 服务边界落地 - 新增 cmd/task-class 独立进程入口,落地 services/task_class dao/rpc/sv - 新增 gateway/client/taskclass、shared/contracts/taskclass 和 shared/ports task-class port - 将 /api/v1/task-class/* HTTP 门面切到 task-class zrpc,gateway 只保留鉴权、幂等、参数绑定和响应透传 - 保留 task-class 迁移期直写 schedule_events / schedules 权限,维持 insert/apply 与 item 状态更新的本地事务语义 - 修复 task-class 删除已排入日程任务块时 schedules / schedule_events 的外键删除顺序 - 补充 taskClass.rpc 示例配置与阶段 5 文档基线、切流点、残留依赖和 smoke 记录 - 忽略根目录 .tmp 临时烟测产物
67 lines
2.1 KiB
Go
67 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"github.com/LoveLosita/smartflow/backend/bootstrap"
|
|
rootdao "github.com/LoveLosita/smartflow/backend/dao"
|
|
rootmiddleware "github.com/LoveLosita/smartflow/backend/middleware"
|
|
taskclassdao "github.com/LoveLosita/smartflow/backend/services/task_class/dao"
|
|
taskclassrpc "github.com/LoveLosita/smartflow/backend/services/task_class/rpc"
|
|
taskclasssv "github.com/LoveLosita/smartflow/backend/services/task_class/sv"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
func main() {
|
|
if err := bootstrap.LoadConfig(); err != nil {
|
|
log.Fatalf("failed to load config: %v", err)
|
|
}
|
|
|
|
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
|
defer stop()
|
|
|
|
db, err := taskclassdao.OpenDBFromConfig()
|
|
if err != nil {
|
|
log.Fatalf("failed to connect task-class database: %v", err)
|
|
}
|
|
redisClient, err := taskclassdao.OpenRedisFromConfig()
|
|
if err != nil {
|
|
log.Fatalf("failed to connect task-class redis: %v", err)
|
|
}
|
|
defer redisClient.Close()
|
|
|
|
cacheRepo := rootdao.NewCacheDAO(redisClient)
|
|
if err := db.Use(rootmiddleware.NewGormCachePlugin(cacheRepo)); err != nil {
|
|
log.Fatalf("failed to initialize task-class cache deleter: %v", err)
|
|
}
|
|
|
|
// 1. task-class 自有 DAO 使用新服务目录下的实现,保持所有权边界清晰。
|
|
// 2. scheduleRepo / RepoManager 属于迁移期桥接依赖,用来保留原 insert/apply 的本地事务语义。
|
|
taskClassRepo := taskclassdao.NewTaskClassDAO(db)
|
|
scheduleRepo := rootdao.NewScheduleDAO(db)
|
|
manager := rootdao.NewManager(db)
|
|
svc := taskclasssv.NewTaskClassService(taskClassRepo, cacheRepo, scheduleRepo, manager)
|
|
|
|
server, listenOn, err := taskclassrpc.NewServer(taskclassrpc.ServerOptions{
|
|
ListenOn: viper.GetString("taskClass.rpc.listenOn"),
|
|
Timeout: viper.GetDuration("taskClass.rpc.timeout"),
|
|
Service: svc,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("failed to build task-class zrpc server: %v", err)
|
|
}
|
|
defer server.Stop()
|
|
|
|
go func() {
|
|
log.Printf("task-class zrpc service starting on %s", listenOn)
|
|
server.Start()
|
|
}()
|
|
|
|
<-ctx.Done()
|
|
log.Println("task-class service stopping")
|
|
}
|