gpt
This commit is contained in:
+12
-17
@@ -11,6 +11,7 @@ import (
|
||||
"git.lzcwy.cn/zhengchiliu/zt-closet-backend/internal/redisdao"
|
||||
"git.lzcwy.cn/zhengchiliu/zt-closet-backend/pkg/errcode"
|
||||
"git.lzcwy.cn/zhengchiliu/zt-closet-backend/pkg/upload"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// ClosetShareService 衣柜分享业务服务。
|
||||
@@ -72,26 +73,22 @@ func (s *ClosetShareService) Create(ctx context.Context, userID int64, request *
|
||||
return nil, qerr
|
||||
}
|
||||
|
||||
// 3. 创建分享。
|
||||
// 3. 原子创建分享及快照明细,避免留下空分享。
|
||||
shareUUID := genUUID()
|
||||
share := &mysqlmodel.ClosetShare{
|
||||
ShareUUID: shareUUID,
|
||||
UserID: userID,
|
||||
ShareType: request.ShareType,
|
||||
ExpireTime: request.ExpireTime,
|
||||
Status: ShareStatusNormal,
|
||||
}
|
||||
if err := s.shareDao.ClosetShareCreate(ctx, share); err != nil {
|
||||
refundDailyQuota(ctx, userID, QuotaTypeClosetShare, 1)
|
||||
return nil, errcode.DatabaseError
|
||||
}
|
||||
|
||||
// 4. 快照衣物明细(明细是分享核心数据,失败则回退额度并报错,避免产生空分享)。
|
||||
share := &mysqlmodel.ClosetShare{ShareUUID: shareUUID, UserID: userID, ShareType: request.ShareType, ExpireTime: request.ExpireTime, Status: ShareStatusNormal}
|
||||
items := make([]mysqlmodel.ClosetShareItem, 0, len(clothesIDs))
|
||||
for _, cid := range clothesIDs {
|
||||
items = append(items, mysqlmodel.ClosetShareItem{ShareUUID: shareUUID, ClothesID: cid})
|
||||
}
|
||||
if err := s.shareItemDao.ClosetShareItemCreateBatch(ctx, items); err != nil {
|
||||
if err := global.MysqlEngine.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Create(share).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if len(items) > 0 {
|
||||
return tx.Create(&items).Error
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
refundDailyQuota(ctx, userID, QuotaTypeClosetShare, 1)
|
||||
return nil, errcode.DatabaseError
|
||||
}
|
||||
@@ -105,8 +102,6 @@ func (s *ClosetShareService) Create(ctx context.Context, userID int64, request *
|
||||
slog.WarnContext(ctx, "write closet audit log failed", "share_id", share.ID, "error", err)
|
||||
}
|
||||
|
||||
recordDailyUsage(ctx, userID, QuotaTypeClosetShare)
|
||||
|
||||
return &dto.ClosetShareCreateResponse{ShareUUID: shareUUID}, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user