fix(用户): 修复删除用户软删除钩子
避免软删除钩子类型断言失败导致 500\n删除无记录时返回未找到错误并记录日志
This commit is contained in:
@@ -112,9 +112,6 @@ func (d SoftDeleteMixin) Hooks() []ent.Hook {
|
|||||||
// 类型断言,获取 mutation 的扩展接口
|
// 类型断言,获取 mutation 的扩展接口
|
||||||
mx, ok := m.(interface {
|
mx, ok := m.(interface {
|
||||||
SetOp(ent.Op)
|
SetOp(ent.Op)
|
||||||
Client() interface {
|
|
||||||
Mutate(context.Context, ent.Mutation) (ent.Value, error)
|
|
||||||
}
|
|
||||||
SetDeletedAt(time.Time)
|
SetDeletedAt(time.Time)
|
||||||
WhereP(...func(*sql.Selector))
|
WhereP(...func(*sql.Selector))
|
||||||
})
|
})
|
||||||
@@ -127,7 +124,7 @@ func (d SoftDeleteMixin) Hooks() []ent.Hook {
|
|||||||
mx.SetOp(ent.OpUpdate)
|
mx.SetOp(ent.OpUpdate)
|
||||||
// 设置删除时间为当前时间
|
// 设置删除时间为当前时间
|
||||||
mx.SetDeletedAt(time.Now())
|
mx.SetDeletedAt(time.Now())
|
||||||
return mx.Client().Mutate(ctx, m)
|
return next.Mutate(ctx, m)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -169,8 +169,14 @@ func (r *userRepository) Update(ctx context.Context, userIn *service.User) error
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *userRepository) Delete(ctx context.Context, id int64) error {
|
func (r *userRepository) Delete(ctx context.Context, id int64) error {
|
||||||
_, err := r.client.User.Delete().Where(dbuser.IDEQ(id)).Exec(ctx)
|
affected, err := r.client.User.Delete().Where(dbuser.IDEQ(id)).Exec(ctx)
|
||||||
return err
|
if err != nil {
|
||||||
|
return translatePersistenceError(err, service.ErrUserNotFound, nil)
|
||||||
|
}
|
||||||
|
if affected == 0 {
|
||||||
|
return service.ErrUserNotFound
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *userRepository) List(ctx context.Context, params pagination.PaginationParams) ([]service.User, *pagination.PaginationResult, error) {
|
func (r *userRepository) List(ctx context.Context, params pagination.PaginationParams) ([]service.User, *pagination.PaginationResult, error) {
|
||||||
|
|||||||
@@ -366,7 +366,11 @@ func (s *adminServiceImpl) DeleteUser(ctx context.Context, id int64) error {
|
|||||||
if user.Role == "admin" {
|
if user.Role == "admin" {
|
||||||
return errors.New("cannot delete admin user")
|
return errors.New("cannot delete admin user")
|
||||||
}
|
}
|
||||||
return s.userRepo.Delete(ctx, id)
|
if err := s.userRepo.Delete(ctx, id); err != nil {
|
||||||
|
log.Printf("delete user failed: user_id=%d err=%v", id, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *adminServiceImpl) UpdateUserBalance(ctx context.Context, userID int64, balance float64, operation string, notes string) (*User, error) {
|
func (s *adminServiceImpl) UpdateUserBalance(ctx context.Context, userID int64, balance float64, operation string, notes string) (*User, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user