refactor(utils): 修复密码哈希比较逻辑错误 feat(user): 新增按状态筛选优惠券接口 docs: 添加虚拟发货与任务中心相关文档 fix(wechat): 修正Code2Session上下文传递问题 test: 补充订单折扣与积分转换测试用例 build: 更新配置文件与构建脚本 style: 清理多余的空行与注释
143 lines
5.4 KiB
Go
143 lines
5.4 KiB
Go
package user
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"bindbox-game/internal/repository/mysql/model"
|
|
"bindbox-game/internal/repository/mysql/dao"
|
|
)
|
|
|
|
type CreateUserInput struct {
|
|
Nickname string
|
|
OpenID string
|
|
Avatar string
|
|
}
|
|
|
|
func (s *service) CreateUser(ctx context.Context, in CreateUserInput) (*model.Users, error) {
|
|
now := time.Now()
|
|
u := &model.Users{
|
|
Nickname: in.Nickname,
|
|
Openid: in.OpenID,
|
|
Avatar: in.Avatar,
|
|
Status: 1,
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
}
|
|
if err := s.writeDB.Users.WithContext(ctx).Create(u); err != nil {
|
|
return nil, err
|
|
}
|
|
return u, nil
|
|
}
|
|
|
|
func (s *service) DeleteUser(ctx context.Context, userID int64) error {
|
|
return s.writeDB.Transaction(func(tx *dao.Query) error {
|
|
orders, err := tx.Orders.WithContext(ctx).Where(tx.Orders.UserID.Eq(userID)).Find()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var orderIDs []int64
|
|
for _, od := range orders {
|
|
orderIDs = append(orderIDs, od.ID)
|
|
}
|
|
|
|
if len(orderIDs) > 0 {
|
|
if _, err = tx.OrderItems.WithContext(ctx).Where(tx.OrderItems.OrderID.In(orderIDs...)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.PaymentPreorders.WithContext(ctx).Where(tx.PaymentPreorders.OrderID.In(orderIDs...)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.PaymentTransactions.WithContext(ctx).Where(tx.PaymentTransactions.OrderID.In(orderIDs...)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.PaymentRefunds.WithContext(ctx).Where(tx.PaymentRefunds.OrderID.In(orderIDs...)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
invs, err := tx.UserInventory.WithContext(ctx).Where(tx.UserInventory.UserID.Eq(userID)).Find()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var invIDs []int64
|
|
for _, iv := range invs {
|
|
invIDs = append(invIDs, iv.ID)
|
|
}
|
|
|
|
if _, err = tx.UserInvites.WithContext(ctx).Where(tx.UserInvites.InviterID.Eq(userID)).Or(tx.UserInvites.InviteeID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.UserInventoryTransfers.WithContext(ctx).Where(tx.UserInventoryTransfers.FromUserID.Eq(userID)).Or(tx.UserInventoryTransfers.ToUserID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if len(invIDs) > 0 {
|
|
if _, err = tx.UserInventoryTransfers.WithContext(ctx).Where(tx.UserInventoryTransfers.InventoryID.In(invIDs...)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
effects := tx.ActivityDrawEffects.WithContext(ctx).Where(tx.ActivityDrawEffects.UserID.Eq(userID))
|
|
if _, err := effects.Delete(); err != nil {
|
|
return err
|
|
}
|
|
|
|
logs, err := tx.ActivityDrawLogs.WithContext(ctx).Where(tx.ActivityDrawLogs.UserID.Eq(userID)).Find()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var drawLogIDs []int64
|
|
for _, lg := range logs {
|
|
drawLogIDs = append(drawLogIDs, lg.ID)
|
|
}
|
|
if len(drawLogIDs) > 0 {
|
|
if _, err = tx.ActivityDrawReceipts.WithContext(ctx).Where(tx.ActivityDrawReceipts.DrawLogID.In(drawLogIDs...)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.ActivityDrawEffects.WithContext(ctx).Where(tx.ActivityDrawEffects.DrawLogID.In(drawLogIDs...)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.UserItemCards.WithContext(ctx).Where(tx.UserItemCards.UsedDrawLogID.In(drawLogIDs...)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.ActivityDrawLogs.WithContext(ctx).Where(tx.ActivityDrawLogs.ID.In(drawLogIDs...)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if _, err = tx.UserInventory.WithContext(ctx).Where(tx.UserInventory.UserID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.UserItemCards.WithContext(ctx).Where(tx.UserItemCards.UserID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.UserCoupons.WithContext(ctx).Where(tx.UserCoupons.UserID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.Orders.WithContext(ctx).Where(tx.Orders.UserID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.UserPointsLedger.WithContext(ctx).Where(tx.UserPointsLedger.UserID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.UserPoints.WithContext(ctx).Where(tx.UserPoints.UserID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err = tx.ShippingRecords.WithContext(ctx).Where(tx.ShippingRecords.UserID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.OpsShippingStats.WithContext(ctx).Where(tx.OpsShippingStats.UserID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
if _, err = tx.UserAddresses.WithContext(ctx).Where(tx.UserAddresses.UserID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err = tx.Users.WithContext(ctx).Where(tx.Users.ID.Eq(userID)).Delete(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
})
|
|
}
|