feat: 🏗️ 完成任务分类创建与列表查询接口并通过测试 - 历经复杂嵌套逻辑处理 🌀 - 实现创建任务分类接口 ✅ - 实现获取任务分类列表接口 📋 - 接口测试全部通过 🧪 perf: 🚀 下个版本将为任务分类列表接口加入 Redis 缓存以提升查询速度 ⚡
50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package dao
|
||
|
||
import (
|
||
"github.com/LoveLosita/smartflow/backend/model"
|
||
"gorm.io/gorm"
|
||
)
|
||
|
||
type TaskClassDAO struct {
|
||
// 这是一个口袋,用来装数据库连接实例
|
||
db *gorm.DB
|
||
}
|
||
|
||
// NewTaskClassDAO 创建TaskClassDAO实例
|
||
// NewTaskClassDAO 接收一个 *gorm.DB,并把它塞进结构体的口袋里
|
||
func NewTaskClassDAO(db *gorm.DB) *TaskClassDAO {
|
||
return &TaskClassDAO{
|
||
db: db,
|
||
}
|
||
}
|
||
|
||
// AddTaskClass 为指定用户添加任务类
|
||
func (dao *TaskClassDAO) AddTaskClass(taskClass *model.TaskClass) (int, error) {
|
||
err := dao.db.Create(taskClass).Error
|
||
if err != nil {
|
||
return 0, err
|
||
}
|
||
return taskClass.ID, nil
|
||
}
|
||
|
||
func (dao *TaskClassDAO) AddTaskClassItems(items []model.TaskClassItem) error {
|
||
return dao.db.Create(&items).Error
|
||
}
|
||
|
||
// Transaction 在一个事务中执行传入的函数,供 service 层复用(自动提交/回滚)
|
||
// 规则:fn 返回 nil -> commit;fn 返回 error 或 panic -> rollback
|
||
func (dao *TaskClassDAO) Transaction(fn func(txDAO *TaskClassDAO) error) error {
|
||
return dao.db.Transaction(func(tx *gorm.DB) error {
|
||
return fn(NewTaskClassDAO(tx))
|
||
})
|
||
}
|
||
|
||
func (dao *TaskClassDAO) GetUserTaskClasses(userID int) ([]model.TaskClass, error) {
|
||
var taskClasses []model.TaskClass
|
||
err := dao.db.Where("user_id = ?", userID).Find(&taskClasses).Error
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
return taskClasses, nil
|
||
}
|