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

1,157 阅读1分钟

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

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

//账户添加一条充值记录
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

查询被软删除的记录:

// 管理员查询到所有申请 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软删除恢复:

if err := tx.Unscoped().Model(&recharge).Update("deleted_at", nil).Error; err != nil {
	tx.Rollback()
	return err
}