feat: ⚠️ 批量导入课程接口支持冲突预检测与冲突提示 - 批量导入课程接口支持预先检测冲突 - 返回并展示具体发生冲突的课程信息 📚💥 - 补全此前规划的冲突提示功能(把大饼补上了 🍞) refactor: 🧱 使用工作单元模式管理 dao 层事务 - 引入工作单元模式(Unit of Work)统一管理 dao 层 - 新建全局事务,使跨 repo 的 gorm 事务管理更加方便 🔁 fix: 🐛 修复将任务块添加进日程接口的多个问题 - 修复核心逻辑 bug(费了老大劲 😵💫) - 补充并覆盖该接口的多种异常与错误场景测试 🧪
44 lines
1020 B
Go
44 lines
1020 B
Go
package dao
|
||
|
||
import (
|
||
"github.com/LoveLosita/smartflow/backend/model"
|
||
"github.com/LoveLosita/smartflow/backend/respond"
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
type TaskDAO struct {
|
||
// 这是一个口袋,用来装数据库连接实例
|
||
db *gorm.DB
|
||
}
|
||
|
||
// NewTaskDAO 创建TaskDAO实例
|
||
// NewTaskDAO 接收一个 *gorm.DB,并把它塞进结构体的口袋里
|
||
func NewTaskDAO(db *gorm.DB) *TaskDAO {
|
||
return &TaskDAO{
|
||
db: db,
|
||
}
|
||
}
|
||
|
||
func (r *TaskDAO) WithTx(tx *gorm.DB) *TaskDAO {
|
||
return &TaskDAO{db: tx}
|
||
}
|
||
|
||
// AddTask 为指定用户添加任务
|
||
func (dao *TaskDAO) AddTask(req *model.Task) (*model.Task, error) {
|
||
if err := dao.db.Create(req).Error; err != nil {
|
||
return nil, err
|
||
}
|
||
return req, nil
|
||
}
|
||
|
||
func (dao *TaskDAO) GetTasksByUserID(userID int) ([]model.Task, error) {
|
||
var tasks []model.Task
|
||
if err := dao.db.Where("user_id = ?", userID).Find(&tasks).Error; err != nil {
|
||
return nil, err
|
||
}
|
||
if len(tasks) == 0 { // 如果没有任务,返回自定义错误
|
||
return nil, respond.UserTasksEmpty
|
||
}
|
||
return tasks, nil
|
||
}
|