feat: 🗑️ 新增删除单个课程与解除安排日程接口 - 逻辑复杂,初版接口写完后才发现需求需要传切片 - 针对需求修改,通过大 for 循环和事务处理来解决问题 🔄 refactor: 🔧 移除部分冗余的用户 ID 验证逻辑 - sv/schedule.go 中,进来的 ID 已通过 redis 黑名单与 JWT 保护验证 - 去除重复的数据库查验,优化了代码流程 🛠️ refactor: 🔄 重构 API 层业务错误判断逻辑 - 抛弃了原有的手动比对方式,封装进 `respond` 包,简化判断流程 - 未来不再手动遍历数据链路,提升了开发效率 🧹 undo: ⚠️ 修复任务块添加到日程的接口问题(待修复) - 接口允许直接修改已经安排的任务时间,且重复执行时未被禁止 - 此逻辑存在问题,计划在下个版本修复 🔧 undo: ⚠️ 重测接口的幂等性与其他特性 - 当前接口幂等性等特性尚未专门测试,后续计划重测所有接口 - 测试不充分,待进一步完善 🔄 undo: ⚠️ 修复刷新 token 接口错误处理问题 - 当前接口将 token 本身的错误以 500 错误返回,需修复此问题 🛠️
73 lines
2.1 KiB
Go
73 lines
2.1 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/LoveLosita/smartflow/backend/api"
|
|
"github.com/LoveLosita/smartflow/backend/dao"
|
|
"github.com/LoveLosita/smartflow/backend/inits"
|
|
"github.com/LoveLosita/smartflow/backend/routers"
|
|
"github.com/LoveLosita/smartflow/backend/service"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// loadConfig 加载配置
|
|
// 从配置文件中读取配置信息
|
|
func loadConfig() error {
|
|
// 设置配置文件路径
|
|
viper.SetConfigName("config")
|
|
viper.SetConfigType("yaml")
|
|
viper.AddConfigPath(".")
|
|
// 读取配置文件
|
|
if err := viper.ReadInConfig(); err != nil {
|
|
return fmt.Errorf("failed to read config file: %w", err)
|
|
}
|
|
log.Println("Config loaded successfully")
|
|
return nil
|
|
}
|
|
|
|
// Start 启动函数
|
|
func Start() {
|
|
// 加载配置
|
|
if err := loadConfig(); err != nil {
|
|
log.Fatalf("Failed to load config: %v", err)
|
|
}
|
|
// 初始化数据库
|
|
db, err := inits.ConnectDB()
|
|
if err != nil {
|
|
log.Fatalf("Failed to connect to database: %v", err)
|
|
}
|
|
rdb := inits.InitRedis()
|
|
//dao 层
|
|
userRepo := dao.NewUserDAO(db)
|
|
cacheRepo := dao.NewCacheDAO(rdb)
|
|
taskRepo := dao.NewTaskDAO(db)
|
|
courseRepo := dao.NewCourseDAO(db)
|
|
taskClassRepo := dao.NewTaskClassDAO(db)
|
|
scheduleRepo := dao.NewScheduleDAO(db)
|
|
manager := dao.NewManager(db)
|
|
//service 层
|
|
userService := service.NewUserService(userRepo, cacheRepo)
|
|
taskSv := service.NewTaskService(taskRepo)
|
|
courseService := service.NewCourseService(courseRepo, scheduleRepo)
|
|
taskClassService := service.NewTaskClassService(taskClassRepo, cacheRepo, scheduleRepo, manager)
|
|
scheduleService := service.NewScheduleService(scheduleRepo, userRepo, taskClassRepo, manager)
|
|
//api 层
|
|
userApi := api.NewUserHandler(userService)
|
|
taskApi := api.NewTaskHandler(taskSv)
|
|
courseApi := api.NewCourseHandler(courseService)
|
|
taskClassApi := api.NewTaskClassHandler(taskClassService)
|
|
scheduleApi := api.NewScheduleAPI(scheduleService)
|
|
|
|
handlers := &api.ApiHandlers{
|
|
UserHandler: userApi,
|
|
TaskHandler: taskApi,
|
|
TaskClassHandler: taskClassApi,
|
|
CourseHandler: courseApi,
|
|
ScheduleHandler: scheduleApi,
|
|
}
|
|
r := routers.RegisterRouters(handlers, cacheRepo)
|
|
routers.StartEngine(r)
|
|
}
|