feat: 🆕 完善course模块功能并优化批量导入接口 - 调整 task-class 模型代码并增加注释,使其更简洁易读 ✍️ - 结构调整:将课程相关接口从 schedule 分类移至独立的 course 分类 🚀 - 修改接口 URL 从 /schedule 更改为 /course 🔄 fix: 🐛 修复批量导入课程接口重复导入相同课程的 bug - 通过在数据库添加唯一约束解决此问题 🔐 - 这只是初步修复,后续会在 sv 层增加重复/时间冲突检测逻辑 ⚠️ - 引导用户修改课表与任务块时间冲突的机制待实现 ⏳ refactor: 🔨 重构 schedule 表单结构 - 将节次管理策略从字符串存储改为原子化存储(如 1-2 节更改为单独两条记录) - 为后续冲突检查与智能排课做准备 🧠 perf: 🚀 优化批量导入课程接口性能 - 通过数据暂存内存中减少数据插入 MySQL 的次数 ⚡
68 lines
1.8 KiB
Go
68 lines
1.8 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)
|
|
//service 层
|
|
userService := service.NewUserService(userRepo, cacheRepo)
|
|
taskSv := service.NewTaskService(taskRepo)
|
|
courseService := service.NewCourseService(courseRepo)
|
|
taskClassService := service.NewTaskClassService(taskClassRepo, cacheRepo)
|
|
//api 层
|
|
userApi := api.NewUserHandler(userService)
|
|
taskApi := api.NewTaskHandler(taskSv)
|
|
courseApi := api.NewCourseHandler(courseService)
|
|
taskClassApi := api.NewTaskClassHandler(taskClassService)
|
|
|
|
handlers := &api.ApiHandlers{
|
|
UserHandler: userApi,
|
|
TaskHandler: taskApi,
|
|
ScheduleHandler: courseApi,
|
|
TaskClassHandler: taskClassApi,
|
|
}
|
|
r := routers.RegisterRouters(handlers, cacheRepo)
|
|
routers.StartEngine(r)
|
|
}
|