补齐相关日志日志

This commit is contained in:
2026-09-16 00:23:49 +08:00
parent 8c2ea84939
commit b2e5eef3c8
39 changed files with 1576 additions and 176 deletions
+24
View File
@@ -46,6 +46,8 @@ func (s *OutfitShareService) Create(ctx context.Context, userID int64, request *
if isNotFound(err) {
return nil, errcode.OutfitNotFound
}
slog.ErrorContext(ctx, "outfit share create: query outfit failed",
"outfit_uuid", request.OutfitUUID, "user_id", userID, "error", err)
return nil, errcode.DatabaseError
}
if outfit.UserID != userID {
@@ -61,6 +63,11 @@ func (s *OutfitShareService) Create(ctx context.Context, userID int64, request *
charged := outfit.IsPublic == OutfitPrivate
if charged {
if qerr := consumeDailyQuota(ctx, userID, QuotaTypeClosetShare, 1, "私密穿搭分享消耗"); qerr != nil {
if qerr == errcode.QuotaInsufficient {
slog.InfoContext(ctx, "outfit share create: quota insufficient", "user_id", userID)
} else {
slog.ErrorContext(ctx, "outfit share create: consume quota failed", "user_id", userID, "error", qerr)
}
return nil, qerr
}
}
@@ -72,12 +79,16 @@ func (s *OutfitShareService) Create(ctx context.Context, userID int64, request *
Status: ShareStatusNormal,
}
if err := s.shareDao.OutfitShareCreate(ctx, share); err != nil {
slog.ErrorContext(ctx, "outfit share create: save share failed",
"user_id", userID, "outfit_uuid", request.OutfitUUID, "error", err)
// 分享落库失败:回退刚扣的额度,避免用户额度被白扣。
if charged {
refundDailyQuota(ctx, userID, QuotaTypeClosetShare, 1)
}
return nil, errcode.DatabaseError
}
slog.InfoContext(ctx, "outfit share created",
"user_id", userID, "share_uuid", share.ShareUUID, "outfit_uuid", request.OutfitUUID, "charged", charged)
return &dto.OutfitShareCreateResponse{ShareUUID: share.ShareUUID}, nil
}
@@ -91,6 +102,7 @@ func (s *OutfitShareService) Detail(ctx context.Context, userID int64, shareUUID
if isNotFound(err) {
return nil, errcode.OutfitShareNotFound
}
slog.ErrorContext(ctx, "outfit share detail: query share failed", "share_uuid", shareUUID, "error", err)
return nil, errcode.DatabaseError
}
if share.Status == ShareStatusCancelled {
@@ -129,6 +141,9 @@ func (s *OutfitShareService) Detail(ctx context.Context, userID int64, shareUUID
if owner, uerr := s.userDao.UserGetByID(ctx, share.UserID); uerr == nil {
ownerName = owner.Username
ownerAvatar = upload.AvatarURL(owner.Avatar)
} else {
slog.DebugContext(ctx, "outfit share detail: get owner info failed",
"share_uuid", shareUUID, "owner_id", share.UserID, "error", uerr)
}
return &dto.OutfitShareDetailResponse{
@@ -210,14 +225,21 @@ func (s *OutfitShareService) Cancel(ctx context.Context, userID int64, request *
if isNotFound(err) {
return nil, errcode.OutfitShareNotFound
}
slog.ErrorContext(ctx, "outfit share cancel: query share failed",
"share_uuid", request.ShareUUID, "user_id", userID, "error", err)
return nil, errcode.DatabaseError
}
if share.UserID != userID {
slog.InfoContext(ctx, "outfit share cancel: permission denied",
"share_uuid", request.ShareUUID, "user_id", userID, "owner_id", share.UserID)
return nil, errcode.Forbidden
}
if err := s.shareDao.OutfitShareUpdateStatus(ctx, request.ShareUUID, ShareStatusCancelled); err != nil {
slog.ErrorContext(ctx, "outfit share cancel: update status failed",
"share_uuid", request.ShareUUID, "user_id", userID, "error", err)
return nil, errcode.DatabaseError
}
slog.InfoContext(ctx, "outfit share cancelled", "share_uuid", request.ShareUUID, "user_id", userID)
return &dto.OutfitShareCancelResponse{}, nil
}
@@ -266,6 +288,8 @@ func (s *OutfitShareService) buildShareItems(ctx context.Context, list []mysqlmo
for i := range clothesList {
coverByClothesID[clothesList[i].ID] = clothesImageURL(clothesList[i].ProcessedImage)
}
} else {
slog.DebugContext(ctx, "outfit share list: load cover images failed", "error", cerr)
}
for _, sh := range list {