first commit
This commit is contained in:
118
app/main/api/internal/logic/user/canceloutlogic.go
Normal file
118
app/main/api/internal/logic/user/canceloutlogic.go
Normal file
@@ -0,0 +1,118 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"aedata-server/app/main/model"
|
||||
"aedata-server/common/ctxdata"
|
||||
"aedata-server/common/xerr"
|
||||
"context"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/mr"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
|
||||
"aedata-server/app/main/api/internal/svc"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type CancelOutLogic struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func NewCancelOutLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CancelOutLogic {
|
||||
return &CancelOutLogic{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
func (l *CancelOutLogic) CancelOut() error {
|
||||
userID, getUserIdErr := ctxdata.GetUidFromCtx(l.ctx)
|
||||
if getUserIdErr != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "用户信息, %v", getUserIdErr)
|
||||
}
|
||||
|
||||
// 在事务中处理用户注销相关操作
|
||||
err := l.svcCtx.UserModel.Trans(l.ctx, func(tranCtx context.Context, session sqlx.Session) error {
|
||||
// 1. 删除用户基本信息
|
||||
if err := l.svcCtx.UserModel.Delete(tranCtx, session, userID); err != nil {
|
||||
return errors.Wrapf(err, "删除用户基本信息失败, userId: %d", userID)
|
||||
}
|
||||
|
||||
// 2. 查询并删除用户授权信息
|
||||
UserAuthModelBuilder := l.svcCtx.UserAuthModel.SelectBuilder().Where("user_id = ?", userID)
|
||||
userAuths, err := l.svcCtx.UserAuthModel.FindAll(tranCtx, UserAuthModelBuilder, "")
|
||||
if err != nil && !errors.Is(err, model.ErrNotFound) {
|
||||
return errors.Wrapf(err, "查询用户授权信息失败, userId: %d", userID)
|
||||
}
|
||||
|
||||
// 并发删除用户授权信息
|
||||
if len(userAuths) > 0 {
|
||||
funcs := make([]func() error, len(userAuths))
|
||||
for i, userAuth := range userAuths {
|
||||
authID := userAuth.Id
|
||||
funcs[i] = func() error {
|
||||
return l.svcCtx.UserAuthModel.Delete(tranCtx, session, authID)
|
||||
}
|
||||
}
|
||||
|
||||
if err := mr.Finish(funcs...); err != nil {
|
||||
return errors.Wrapf(err, "删除用户授权信息失败")
|
||||
}
|
||||
}
|
||||
|
||||
// 5. 删除用户查询记录
|
||||
queryBuilder := l.svcCtx.QueryModel.SelectBuilder().Where("user_id = ?", userID)
|
||||
queries, err := l.svcCtx.QueryModel.FindAll(tranCtx, queryBuilder, "")
|
||||
if err != nil && !errors.Is(err, model.ErrNotFound) {
|
||||
return errors.Wrapf(err, "查询用户查询记录失败, userId: %d", userID)
|
||||
}
|
||||
|
||||
if len(queries) > 0 {
|
||||
queryFuncs := make([]func() error, len(queries))
|
||||
for i, query := range queries {
|
||||
queryId := query.Id
|
||||
queryFuncs[i] = func() error {
|
||||
return l.svcCtx.QueryModel.Delete(tranCtx, session, queryId)
|
||||
}
|
||||
}
|
||||
|
||||
if err := mr.Finish(queryFuncs...); err != nil {
|
||||
return errors.Wrapf(err, "删除用户查询记录失败")
|
||||
}
|
||||
}
|
||||
|
||||
// 6. 删除用户订单记录
|
||||
orderBuilder := l.svcCtx.OrderModel.SelectBuilder().Where("user_id = ?", userID)
|
||||
orders, err := l.svcCtx.OrderModel.FindAll(tranCtx, orderBuilder, "")
|
||||
if err != nil && !errors.Is(err, model.ErrNotFound) {
|
||||
return errors.Wrapf(err, "查询用户订单记录失败, userId: %d", userID)
|
||||
}
|
||||
|
||||
if len(orders) > 0 {
|
||||
orderFuncs := make([]func() error, len(orders))
|
||||
for i, order := range orders {
|
||||
orderId := order.Id
|
||||
orderFuncs[i] = func() error {
|
||||
return l.svcCtx.OrderModel.Delete(tranCtx, session, orderId)
|
||||
}
|
||||
}
|
||||
|
||||
if err := mr.Finish(orderFuncs...); err != nil {
|
||||
return errors.Wrapf(err, "删除用户订单记录失败")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "用户注销失败%v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user