补齐相关日志日志
This commit is contained in:
@@ -79,9 +79,12 @@ func (s *OutfitService) Create(ctx context.Context, userID int64, request *dto.O
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
slog.ErrorContext(ctx, "create outfit: transaction failed", "user_id", userID, "error", err)
|
||||
return nil, errcode.OutfitCreateFailed
|
||||
}
|
||||
|
||||
slog.InfoContext(ctx, "outfit created", "user_id", userID, "outfit_uuid", outfit.OutfitUUID)
|
||||
|
||||
response := buildOutfitCreateResponse(outfit, items)
|
||||
return &response, nil
|
||||
}
|
||||
@@ -152,6 +155,8 @@ func (s *OutfitService) UpdateByUUID(ctx context.Context, userID int64, request
|
||||
return tx.Create(&items).Error
|
||||
})
|
||||
if rebuildErr != nil {
|
||||
slog.ErrorContext(ctx, "update outfit: transaction failed",
|
||||
"user_id", userID, "outfit_uuid", request.OutfitUUID, "error", rebuildErr)
|
||||
return nil, errcode.OutfitUpdateFailed
|
||||
}
|
||||
|
||||
@@ -220,8 +225,11 @@ func (s *OutfitService) Delete(ctx context.Context, userID int64, request *dto.O
|
||||
}
|
||||
return tx.Where("outfit_uuid = ?", request.OutfitUUID).Delete(&mysqlmodel.Outfit{}).Error
|
||||
}); err != nil {
|
||||
slog.ErrorContext(ctx, "delete outfit: transaction failed",
|
||||
"user_id", userID, "outfit_uuid", request.OutfitUUID, "error", err)
|
||||
return nil, errcode.OutfitDeleteFailed
|
||||
}
|
||||
slog.InfoContext(ctx, "outfit deleted", "user_id", userID, "outfit_uuid", request.OutfitUUID)
|
||||
return &dto.OutfitDeleteResponse{}, nil
|
||||
}
|
||||
|
||||
@@ -243,9 +251,14 @@ func (s *OutfitService) Public(ctx context.Context, userID int64, request *dto.O
|
||||
slog.WarnContext(ctx, "acquire outfit public lock failed, proceed without lock",
|
||||
"outfit_uuid", request.OutfitUUID, "error", lerr)
|
||||
} else if !ok {
|
||||
slog.DebugContext(ctx, "outfit public: locked by another request, reject", "outfit_uuid", request.OutfitUUID)
|
||||
return nil, errcode.TooManyRequests
|
||||
} else {
|
||||
defer func() { _ = redisdao.Unlock(ctx, lockKey, lockVal) }()
|
||||
defer func() {
|
||||
if uerr := redisdao.Unlock(ctx, lockKey, lockVal); uerr != nil {
|
||||
slog.WarnContext(ctx, "outfit public: release lock failed", "outfit_uuid", request.OutfitUUID, "error", uerr)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// 取消公开:直接置为不公开。
|
||||
@@ -254,8 +267,11 @@ func (s *OutfitService) Public(ctx context.Context, userID int64, request *dto.O
|
||||
return &dto.OutfitPublicResponse{}, nil
|
||||
}
|
||||
if err := s.outfitDao.OutfitUpdateIsPublic(ctx, request.OutfitUUID, OutfitPrivate); err != nil {
|
||||
slog.ErrorContext(ctx, "outfit public: set private failed",
|
||||
"outfit_uuid", request.OutfitUUID, "user_id", userID, "error", err)
|
||||
return nil, errcode.OutfitUpdateFailed
|
||||
}
|
||||
slog.InfoContext(ctx, "outfit set private", "outfit_uuid", request.OutfitUUID, "user_id", userID)
|
||||
return &dto.OutfitPublicResponse{}, nil
|
||||
}
|
||||
|
||||
@@ -267,16 +283,24 @@ func (s *OutfitService) Public(ctx context.Context, userID int64, request *dto.O
|
||||
// 首次公开:先条件更新(私密 -> 公开+审核通过),成功才消耗额度,防并发重复扣减。
|
||||
ok, perr := s.outfitDao.OutfitPublish(ctx, request.OutfitUUID)
|
||||
if perr != nil {
|
||||
slog.ErrorContext(ctx, "outfit public: condition publish failed",
|
||||
"outfit_uuid", request.OutfitUUID, "user_id", userID, "error", perr)
|
||||
return nil, errcode.OutfitUpdateFailed
|
||||
}
|
||||
if !ok {
|
||||
// 已被并发公开,幂等返回。
|
||||
slog.DebugContext(ctx, "outfit public: already published by another request", "outfit_uuid", request.OutfitUUID)
|
||||
return &dto.OutfitPublicResponse{}, nil
|
||||
}
|
||||
|
||||
if qerr := consumeDailyQuota(ctx, userID, QuotaTypeOutfitShare, 1, "穿搭社区分享消耗"); qerr != nil {
|
||||
// 扣额度失败,回退公开状态。
|
||||
_ = s.outfitDao.OutfitUpdateIsPublic(ctx, request.OutfitUUID, OutfitPrivate)
|
||||
slog.WarnContext(ctx, "outfit public: consume share quota failed, revert to private",
|
||||
"outfit_uuid", request.OutfitUUID, "user_id", userID, "error", qerr)
|
||||
if rerr := s.outfitDao.OutfitUpdateIsPublic(ctx, request.OutfitUUID, OutfitPrivate); rerr != nil {
|
||||
slog.ErrorContext(ctx, "outfit public: revert to private failed",
|
||||
"outfit_uuid", request.OutfitUUID, "user_id", userID, "error", rerr)
|
||||
}
|
||||
return nil, qerr
|
||||
}
|
||||
|
||||
@@ -286,11 +310,14 @@ func (s *OutfitService) Public(ctx context.Context, userID int64, request *dto.O
|
||||
AuditResult: AuditResultPass,
|
||||
AuditTime: nowUnix(),
|
||||
}); err != nil {
|
||||
slog.WarnContext(ctx, "write outfit audit log failed", "outfit_id", outfit.ID, "error", err)
|
||||
slog.WarnContext(ctx, "write outfit audit log failed",
|
||||
"outfit_id", outfit.ID, "outfit_uuid", outfit.OutfitUUID, "error", err)
|
||||
}
|
||||
|
||||
// 记录当日社区分享计数(统计)。
|
||||
|
||||
slog.InfoContext(ctx, "outfit published", "outfit_uuid", outfit.OutfitUUID, "user_id", userID)
|
||||
|
||||
return &dto.OutfitPublicResponse{}, nil
|
||||
}
|
||||
|
||||
@@ -303,6 +330,8 @@ func (s *OutfitService) getOwnedOutfit(ctx context.Context, outfitUUID string, u
|
||||
if isNotFound(err) {
|
||||
return nil, errcode.OutfitNotFound
|
||||
}
|
||||
slog.ErrorContext(ctx, "get owned outfit: query failed",
|
||||
"outfit_uuid", outfitUUID, "user_id", userID, "error", err)
|
||||
return nil, errcode.DatabaseError
|
||||
}
|
||||
if outfit.UserID != userID {
|
||||
|
||||
Reference in New Issue
Block a user