补齐相关日志日志

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
+32 -3
View File
@@ -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 {