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
+13 -14
View File
@@ -15,6 +15,7 @@ import (
"git.lzcwy.cn/zhengchiliu/zt-closet-backend/internal/redismodel"
"git.lzcwy.cn/zhengchiliu/zt-closet-backend/pkg/errcode"
"git.lzcwy.cn/zhengchiliu/zt-closet-backend/pkg/tokenhub"
"gorm.io/gorm"
)
// AIRecommendService AI 穿搭推荐业务服务。
@@ -112,19 +113,18 @@ func (s *AIRecommendService) Create(ctx context.Context, userID int64, request *
AuditStatus: OutfitAuditPending,
Status: OutfitStatusUnsaved,
}
if err := s.outfitDao.OutfitCreate(ctx, outfit); err != nil {
return nil, fail(errcode.OutfitCreateFailed, "穿搭落库失败")
}
clothesIDs := result.GetClothesIDs()
items := make([]mysqlmodel.OutfitItem, 0, len(clothesIDs))
for _, cid := range clothesIDs {
items = append(items, mysqlmodel.OutfitItem{OutfitID: outfit.ID, ClothesID: cid})
}
if err := s.outfitItemDao.OutfitItemCreateBatch(ctx, items); err != nil {
// 明细落库失败:删除已建穿搭并回退额度,避免产生无明细的空推荐。
_ = s.outfitDao.OutfitDeleteByUUID(ctx, outfit.OutfitUUID)
return nil, fail(errcode.OutfitCreateFailed, "穿搭明细落库失败")
if err := global.MysqlEngine.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
if err := tx.Create(outfit).Error; err != nil {
return err
}
clothesIDs := result.GetClothesIDs()
items := make([]mysqlmodel.OutfitItem, 0, len(clothesIDs))
for _, cid := range clothesIDs {
items = append(items, mysqlmodel.OutfitItem{OutfitID: outfit.ID, ClothesID: cid})
}
return tx.Create(&items).Error
}); err != nil {
return nil, fail(errcode.OutfitCreateFailed, "穿搭及明细落库失败")
}
// 7. 写成功流水 + 当日计数。
@@ -140,7 +140,6 @@ func (s *AIRecommendService) Create(ctx context.Context, userID int64, request *
}); err != nil {
slog.WarnContext(ctx, "write ai recommend success flow log failed", "user_id", userID, "error", err)
}
recordDailyUsage(ctx, userID, QuotaTypeAI)
// 8. 组装响应(衣物 UUID 来自校正后的 items)。
outfitItems := make([]dto.OutfitItem, 0, len(result.Items))