我设计的逻辑是用户申请充值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
}