bugfix
This commit is contained in:
@@ -34,7 +34,9 @@ func NewOutfitShareService() *OutfitShareService {
|
||||
}
|
||||
}
|
||||
|
||||
// Create 创建穿搭分享。仅能分享本人且已公开的穿搭;不消耗额度。
|
||||
// Create 创建穿搭分享。仅能分享本人的穿搭;分享与「公开到社区」解耦,
|
||||
// 仅自己可见的穿搭同样可生成分享链接(好友凭 share_uuid 只读查看)。
|
||||
// 额度:私密穿搭分享扣 1 次衣柜分享额度(与衣柜分享共用额度池),已公开穿搭分享不扣。
|
||||
func (s *OutfitShareService) Create(ctx context.Context, userID int64, request *dto.OutfitShareCreateRequest) (*dto.OutfitShareCreateResponse, *errcode.Error) {
|
||||
ctx, span := global.Tracer.Start(ctx, "svc.OutfitShareCreate")
|
||||
defer span.End()
|
||||
@@ -49,9 +51,18 @@ func (s *OutfitShareService) Create(ctx context.Context, userID int64, request *
|
||||
if outfit.UserID != userID {
|
||||
return nil, errcode.OutfitNoPermission
|
||||
}
|
||||
// 分享前提:穿搭已公开可见(否则对方打开后无法查看)。
|
||||
if !isOutfitPublicVisible(outfit) {
|
||||
return nil, errcode.InvalidParams.WithDetails("请先公开该穿搭再分享")
|
||||
// 封禁穿搭不可分享;公开状态 / 审核状态不再作为前置条件(分享与公开到社区解耦)。
|
||||
if outfit.Status == OutfitStatusBanned {
|
||||
return nil, errcode.OutfitNoPermission
|
||||
}
|
||||
|
||||
// 额度:仅「仅自己可见」的穿搭分享扣 1 次衣柜分享额度(与衣柜分享共用额度池);
|
||||
// 已公开穿搭在「公开到社区」时已扣过社区分享额度,分享给好友不再重复扣。
|
||||
charged := outfit.IsPublic == OutfitPrivate
|
||||
if charged {
|
||||
if qerr := consumeDailyQuota(ctx, userID, QuotaTypeClosetShare, 1, "私密穿搭分享消耗"); qerr != nil {
|
||||
return nil, qerr
|
||||
}
|
||||
}
|
||||
|
||||
share := &mysqlmodel.OutfitShare{
|
||||
@@ -61,6 +72,10 @@ func (s *OutfitShareService) Create(ctx context.Context, userID int64, request *
|
||||
Status: ShareStatusNormal,
|
||||
}
|
||||
if err := s.shareDao.OutfitShareCreate(ctx, share); err != nil {
|
||||
// 分享落库失败:回退刚扣的额度,避免用户额度被白扣。
|
||||
if charged {
|
||||
refundDailyQuota(ctx, userID, QuotaTypeClosetShare, 1)
|
||||
}
|
||||
return nil, errcode.DatabaseError
|
||||
}
|
||||
return &dto.OutfitShareCreateResponse{ShareUUID: share.ShareUUID}, nil
|
||||
@@ -92,8 +107,9 @@ func (s *OutfitShareService) Detail(ctx context.Context, userID int64, shareUUID
|
||||
}
|
||||
|
||||
isOwner := share.UserID == userID
|
||||
// 访客视角:穿搭必须仍处于公开可见状态,否则分享失效
|
||||
if !isOwner && !isOutfitPublicVisible(outfit) {
|
||||
// 访客视角:分享正常即可只读查看(分享独立于公开状态,取消公开不影响已发出的分享);
|
||||
// 仅当穿搭已删除(上方判为 90103)或已封禁时视为分享失效。
|
||||
if !isOwner && outfit.Status == OutfitStatusBanned {
|
||||
return nil, errcode.OutfitShareNotFound
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user