Compare commits

...

3 Commits

Author SHA1 Message Date
maguodong f50930ec74 refactor(database): 更新时间模型的钩子函数实现
- 将 BeforeCreate 中的时间设置从直接赋值改为使用 scope.Set 方法
- 将 BeforeUpdate 中的时间设置从直接赋值改为使用 scope.Set 方法
- 移除 AfterDelete 钩子函数并注释掉 AfterFind 钩子函数
- 统一使用 GORM 的 scope 机制处理时间字段更新
2026-03-30 10:32:50 +08:00
maguodong d50f150d98 fix(test): 修正Crud泛型类型声明
- 将Crud[interface{}]更改为Crud[interface{}, interface{}]以匹配正确的泛型参数数量
2026-03-28 18:18:10 +08:00
maguodong 0238ec9a01 docs(curd): 更新Crud结构体注释文档
- 为Crud结构体添加C参数的说明
- 明确C参数为对应模型结构体的字段结构体
- 完善泛型CURD封装的功能描述
2026-03-28 18:17:31 +08:00
3 changed files with 12 additions and 12 deletions

View File

@ -48,7 +48,7 @@ var pageInfo = []string{
} }
// Crud -------------------------- 泛型CURD核心结构体 -------------------------- // Crud -------------------------- 泛型CURD核心结构体 --------------------------
// Crud GORM 版本的泛型CURD封装R为对应的模型结构体 // Crud GORM 版本的泛型CURD封装R为对应的模型结构体 C为对应模型结构体的字段结构体
type Crud[R any, C any] struct { type Crud[R any, C any] struct {
Dao IDao[C] Dao IDao[C]
} }

View File

@ -98,7 +98,7 @@ func TestBuildWhere(t *testing.T) {
// TestBuildMap 测试 BuildMap 方法 // TestBuildMap 测试 BuildMap 方法
func TestBuildMap(t *testing.T) { func TestBuildMap(t *testing.T) {
// 创建一个空的 Crud 实例用于测试(不需要实际的 Dao // 创建一个空的 Crud 实例用于测试(不需要实际的 Dao
var crud Crud[interface{}] var crud Crud[interface{}, interface{}]
t.Run("BuildMapWithoutField", func(t *testing.T) { t.Run("BuildMapWithoutField", func(t *testing.T) {
result := crud.BuildMap(">", 18) result := crud.BuildMap(">", 18)
@ -131,7 +131,7 @@ func TestBuildMap(t *testing.T) {
// TestClearField 测试 ClearField 方法 // TestClearField 测试 ClearField 方法
func TestClearField(t *testing.T) { func TestClearField(t *testing.T) {
var crud Crud[interface{}] var crud Crud[interface{}, interface{}]
t.Run("ClearFieldBasic", func(t *testing.T) { t.Run("ClearFieldBasic", func(t *testing.T) {
req := struct { req := struct {
@ -210,7 +210,7 @@ func TestClearField(t *testing.T) {
// TestBuildWhereAndOr 测试 BuildWhereAndOr 方法 // TestBuildWhereAndOr 测试 BuildWhereAndOr 方法
func TestBuildWhereAndOr(t *testing.T) { func TestBuildWhereAndOr(t *testing.T) {
var crud Crud[interface{}] var crud Crud[interface{}, interface{}]
t.Run("SimpleAND", func(t *testing.T) { t.Run("SimpleAND", func(t *testing.T) {
where := crud.BuildWhereAndOr(). where := crud.BuildWhereAndOr().

View File

@ -14,18 +14,18 @@ type TimeModel struct {
} }
func (tm *TimeModel) BeforeCreate(scope *gorm.DB) error { func (tm *TimeModel) BeforeCreate(scope *gorm.DB) error {
tm.CreateTime = gtime.Datetime() scope.Set("create_time", gtime.Datetime())
tm.UpdateTime = gtime.Datetime() scope.Set("update_time", gtime.Datetime())
return nil return nil
} }
func (tm *TimeModel) BeforeUpdate(scope *gorm.DB) error { func (tm *TimeModel) BeforeUpdate(scope *gorm.DB) error {
tm.UpdateTime = gtime.Datetime() scope.Set("update_time", gtime.Datetime())
return nil return nil
} }
func (tm *TimeModel) AfterDelete(scope *gorm.DB) error { //func (tm *TimeModel) AfterFind(scope *gorm.DB) error {
tm.CreateTime = gtime.New(tm.CreateTime).String() // tm.CreateTime = gtime.New(tm.CreateTime).String()
tm.UpdateTime = gtime.New(tm.UpdateTime).String() // tm.UpdateTime = gtime.New(tm.UpdateTime).String()
return nil // return nil
} //}