This commit is contained in:
zhengchiliu
2026-09-15 00:53:04 +08:00
parent 32a0b87e9e
commit 112c5f8e46
42 changed files with 1121 additions and 304 deletions
+24 -15
View File
@@ -60,11 +60,19 @@ func (s *OutfitService) Create(ctx context.Context, userID int64, request *dto.O
AuditStatus: OutfitAuditPending,
Status: OutfitStatusNormal,
}
if err := s.outfitDao.OutfitCreate(ctx, outfit); err != nil {
return nil, errcode.OutfitCreateFailed
}
if err := s.createItems(ctx, outfit.ID, clothesIDs); err != nil {
if err := global.MysqlEngine.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
if err := tx.Create(outfit).Error; err != nil {
return err
}
dbItems := make([]mysqlmodel.OutfitItem, 0, len(clothesIDs))
for _, cid := range clothesIDs {
dbItems = append(dbItems, mysqlmodel.OutfitItem{OutfitID: outfit.ID, ClothesID: cid})
}
if len(dbItems) > 0 {
return tx.Create(&dbItems).Error
}
return nil
}); err != nil {
return nil, errcode.OutfitCreateFailed
}
@@ -119,14 +127,12 @@ func (s *OutfitService) UpdateByUUID(ctx context.Context, userID int64, request
setIfNotEmpty(updates, "outfit_name", request.OutfitName)
setIfNotEmpty(updates, "outfit_desc", request.OutfitDesc)
setIfNotEmpty(updates, "scene", request.Scene)
if len(updates) > 0 {
if err := s.outfitDao.OutfitUpdateByUUID(ctx, request.OutfitUUID, updates); err != nil {
return nil, errcode.OutfitUpdateFailed
}
}
// 重建明细(事务内先删后建,避免中途失败留下空明细)。
rebuildErr := global.MysqlEngine.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
if len(updates) > 0 {
if err := tx.Model(&mysqlmodel.Outfit{}).Where("outfit_uuid = ?", request.OutfitUUID).Updates(updates).Error; err != nil {
return err
}
}
if err := tx.Where("outfit_id = ?", outfit.ID).Delete(&mysqlmodel.OutfitItem{}).Error; err != nil {
return err
}
@@ -178,10 +184,14 @@ func (s *OutfitService) Delete(ctx context.Context, userID int64, request *dto.O
if cerr != nil {
return nil, cerr
}
if err := s.outfitDao.OutfitDeleteByUUID(ctx, request.OutfitUUID); err != nil {
if err := global.MysqlEngine.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
if err := tx.Where("outfit_id = ?", outfit.ID).Delete(&mysqlmodel.OutfitItem{}).Error; err != nil {
return err
}
return tx.Where("outfit_uuid = ?", request.OutfitUUID).Delete(&mysqlmodel.Outfit{}).Error
}); err != nil {
return nil, errcode.OutfitDeleteFailed
}
_ = s.outfitItemDao.OutfitItemDeleteByOutfitID(ctx, outfit.ID)
return &dto.OutfitDeleteResponse{}, nil
}
@@ -250,7 +260,6 @@ func (s *OutfitService) Public(ctx context.Context, userID int64, request *dto.O
}
// 记录当日社区分享计数(统计)。
recordDailyUsage(ctx, userID, QuotaTypeOutfitShare)
return &dto.OutfitPublicResponse{}, nil
}