gorm软删除妙用-充值,软删除恢复,soft delete

2021-08-05 15:46:04 浏览数 (1)

我设计的逻辑是用户申请充值100元,按传统的设计需要一个数据库表,存储用户的申请,管理员同意后,再写入-充值记录表。 用gorm软删除就避免了多一个表,用户申请充值记录,直接写入-充值记录表,用事务,用事务。紧接着软删除。用事务,如果软删除失败,可回滚。 管理员同意后,修改软删除,即恢复,并修改数值,比如奖励1元就是101元啦。

用户充值申请,增加一条记录,立即软删除

代码语言:javascript复制
	//账户添加一条充值记录
	recharge := Recharge{UserID: uid, Amount: amount}
	if err := tx.Create(&recharge).Error; err != nil {
		tx.Rollback()
		return err
	}

	// 进行软删除
	// db.Delete(&User{}, 10)
	// db.Delete(&user)
	if err := tx.Delete(&recharge).Error; err != nil {
		tx.Rollback()
		return err
	}

	return tx.Commit().Error

查询被软删除的记录:

代码语言:javascript复制
// 管理员查询到所有申请
func GetApplyRecharge(limit, offset int) (recharge []Recharge, err error) {
	//获取DB
	db := GetDB()
	if err := db.Unscoped().Preload("User").Where("deleted_at <> ?", "").Limit(limit).Offset(offset).Find(&recharge).Error; err != nil {
		return recharge, err
	}
	return recharge, err
}

gorm软删除恢复:

代码语言:javascript复制
	if err := tx.Unscoped().Model(&recharge).Update("deleted_at", nil).Error; err != nil {
		tx.Rollback()
		return err
	}

0 人点赞