From 1f5f5b57e095e6af1eb9305f7a5737377fa68e5f Mon Sep 17 00:00:00 2001 From: Leufolium Date: Mon, 20 May 2024 15:29:07 +0800 Subject: [PATCH 1/3] by Robin at 20240520 --- app/mix/service/apiservice.go | 8 ++++ .../service/apiservice_business_validation.go | 44 +++++++++++++++++++ app/mix/service/business_validator/auth.go | 36 +++++++++++++++ 3 files changed, 88 insertions(+) diff --git a/app/mix/service/apiservice.go b/app/mix/service/apiservice.go index 6cb4cef4..7ef20e98 100644 --- a/app/mix/service/apiservice.go +++ b/app/mix/service/apiservice.go @@ -1723,6 +1723,10 @@ func (s *Service) ApiCreateMoment(ctx *gin.Context, req *momentproto.ApiCreateRe func (s *Service) ApiUpdateMoment(ctx *gin.Context, req *momentproto.ApiUpdateReq) (ec errcode.ErrCode) { ec = errcode.ErrCodeMomentSrvOk + if ec = s.ApiUpdateMomentBusinessValidate(ctx, req); ec != errcode.ErrCodeMomentSrvOk { + return + } + req.Moment.Mid = goproto.Int64(req.BaseRequest.Mid) err := _DefaultMoment.OpUpdate(ctx, &momentproto.OpUpdateReq{ @@ -2502,6 +2506,10 @@ func (s *Service) ApiCreateZoneMoment(ctx *gin.Context, req *zonemomentproto.Api func (s *Service) ApiUpdateZoneMoment(ctx *gin.Context, req *zonemomentproto.ApiUpdateReq) (ec errcode.ErrCode) { ec = errcode.ErrCodeZoneMomentSrvOk + if ec = s.ApiUpdateZoneMomentBusinessValidate(ctx, req); ec != errcode.ErrCodeZoneMomentSrvOk { + return + } + zonemoment, err := _DefaultZoneMoment.GetById(ctx, req.ZoneMoment.GetId()) if err != nil { logger.Error("_DefaultZoneMoment GetById fail, req: %v, err: %v", util.ToJson(req), err) diff --git a/app/mix/service/apiservice_business_validation.go b/app/mix/service/apiservice_business_validation.go index 200c13a6..fb5492aa 100644 --- a/app/mix/service/apiservice_business_validation.go +++ b/app/mix/service/apiservice_business_validation.go @@ -531,6 +531,7 @@ func (s *Service) ApiCreateMomentBusinessValidate(ctx *gin.Context, req *momentp ec = errcode.ErrCodeMomentSrvOk resultList := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.Moment.MediaComp). EnsureSuchAccountPunishmentNotExist(req.GetBaseRequest().Mid, consts.AccountPunishment_BlockFromCreatingMoment, _DefaultAccountPunishment.OpListByMidAndType). QueryMomentCreateTimes(_DefaultMomentCreateTimes.OpGetAndUpdate, req.GetBaseRequest().Mid). EnsureMomentCreateTimesNotReachedDailyUpperbound(). @@ -546,6 +547,22 @@ func (s *Service) ApiCreateMomentBusinessValidate(ctx *gin.Context, req *momentp return } +func (s *Service) ApiUpdateMomentBusinessValidate(ctx *gin.Context, req *momentproto.ApiUpdateReq) (ec errcode.ErrCode) { + ec = errcode.ErrCodeMomentSrvOk + + resultList := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.Moment.MediaComp). + Validate(). + Collect() + ec, _ = resultList[0].(errcode.ErrCode) + if ec != errcode.ErrCodeOk { + logger.Error("ApiUpdateMomentBusinessValidate business validation failed!") + return + } + + return +} + func (s *Service) ApiCreateZoneMomentBusinessValidate(ctx *gin.Context, req *zonemomentproto.ApiCreateReq) (ec errcode.ErrCode, accountpunishment *dbstruct.AccountPunishment) { ec = errcode.ErrCodeMomentSrvOk @@ -563,6 +580,7 @@ func (s *Service) ApiCreateZoneMomentBusinessValidate(ctx *gin.Context, req *zon QueryAccount(_DefaultAccount.OpListByMid). EnsureAccountExist(). EnsureIsThisRole(consts.Streamer). + EnsureMediaIsSuccessfullyUploaded(req.ZoneMoment.MediaComp). EnsureSuchAccountPunishmentNotExist(req.GetBaseRequest().Mid, consts.AccountPunishment_BlockFromCreatingZoneMoment, _DefaultAccountPunishment.OpListByMidAndType). EnsureSuchAccountPunishmentNotExist(req.GetBaseRequest().Mid, pType, _DefaultAccountPunishment.OpListByMidAndType). EnsureZoneMomentImagesEnoughForEncryption(req.ZoneMoment.GetMType(), req.ZoneMoment.MediaComp, mediaVisibleRange). @@ -580,6 +598,32 @@ func (s *Service) ApiCreateZoneMomentBusinessValidate(ctx *gin.Context, req *zon return } +func (s *Service) ApiUpdateZoneMomentBusinessValidate(ctx *gin.Context, req *zonemomentproto.ApiUpdateReq) (ec errcode.ErrCode) { + ec = errcode.ErrCodeMomentSrvOk + + mediaVisibleRange := int64(0) + switch req.ZoneMoment.GetCType() { + case consts.ZoneMomentCType_Paid: + mediaVisibleRange = req.ZoneMoment.GetMediaVisibleRange() + } + + resultList := businessvalidator.NewAuthBusinessValidator(ctx, req). + QueryAccount(_DefaultAccount.OpListByMid). + EnsureAccountExist(). + EnsureIsThisRole(consts.Streamer). + EnsureMediaIsSuccessfullyUploaded(req.ZoneMoment.MediaComp). + EnsureZoneMomentImagesEnoughForEncryption(req.ZoneMoment.GetMType(), req.ZoneMoment.MediaComp, mediaVisibleRange). + Validate(). + Collect() + ec, _ = resultList[0].(errcode.ErrCode) + if ec != errcode.ErrCodeOk { + logger.Error("ApiUpdateZoneMomentBusinessValidate business validation failed!") + return + } + + return +} + // 代运营创建验证码 func (s *Service) ApiCreateZoneThirdPartnerBusinessValidate(ctx *gin.Context, req *zone_third_partner_proto.ApiCreateReq) (vericode *dbstruct.VeriCode, ec errcode.ErrCode) { ec = errcode.ErrCodeLoginSrvOk diff --git a/app/mix/service/business_validator/auth.go b/app/mix/service/business_validator/auth.go index 46c17504..f8a866e7 100644 --- a/app/mix/service/business_validator/auth.go +++ b/app/mix/service/business_validator/auth.go @@ -562,6 +562,42 @@ func (l *AuthBusinessValidator) EnsureZoneCollaboratorIsNotZoneOwner(fun func(ct return l } +func (l *AuthBusinessValidator) EnsureMediaIsSuccessfullyUploaded(media *dbstruct.MediaComponent) *AuthBusinessValidator { + l.oplist = append(l.oplist, func() { + + if len(media.GetImageIds()) > 0 { + imageIdForUploadFail, err := apollo.GetIntValue(consts.ImageIdForUploadFail, apollo.ApolloOpts().SetNamespace("application")) + if err != nil { + logger.Error("Apollo read failed : %v", err) + l.ec = errcode.ErrCodeApolloReadFail + return + } + for _, imageId := range media.GetImageIds() { + if int64(imageIdForUploadFail) == imageId { + l.ec = errcode.ErrCodeMediaUploadFail + return + } + } + } + + if len(media.GetVideoIds()) > 0 { + videoIdForUploadFail, err := apollo.GetIntValue(consts.VideoIdForUploadFail, apollo.ApolloOpts().SetNamespace("application")) + if err != nil { + logger.Error("Apollo read failed : %v", err) + l.ec = errcode.ErrCodeApolloReadFail + return + } + for _, videoId := range media.GetVideoIds() { + if int64(videoIdForUploadFail) == videoId { + l.ec = errcode.ErrCodeMediaUploadFail + return + } + } + } + }) + return l +} + // 执行校验 func (a *AuthBusinessValidator) Validate() *AuthBusinessValidator { a.BusinessValidateStream.Validate() From 1d2d8b1cc5bf6e5e96bcb29aa5dc92fcadd029ae Mon Sep 17 00:00:00 2001 From: Leufolium Date: Tue, 21 May 2024 22:12:59 +0800 Subject: [PATCH 2/3] by Robin at 20240521 --- api/errcode/errcode.go | 2 ++ app/mix/service/business_validator/auth.go | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/api/errcode/errcode.go b/api/errcode/errcode.go index 5643d0a1..597e6d4f 100644 --- a/api/errcode/errcode.go +++ b/api/errcode/errcode.go @@ -17,6 +17,7 @@ var ErrCodeMsgMap = map[ErrCode]string{ ErrCodeBadParam: "参数错误", ErrCodeFunctionBlocked: "功能封禁中,截止时间:%s", ErrCodeFunctionBlockedPermanently: "该功能已被永久封禁", + ErrCodeMediaUploadFailPleaseCheck: "媒体上传失败,请检查网络或文件大小后重试", ErrCodeProductSrvFail: "商品服务错误", ErrCodeProductNotExist: "商品不存在", @@ -227,6 +228,7 @@ const ( ErrCodeBadParam ErrCode = -30 // 参数错误 ErrCodeFunctionBlocked ErrCode = -40 // 功能封禁中 ErrCodeFunctionBlockedPermanently ErrCode = -41 // 功能永久封禁 + ErrCodeMediaUploadFailPleaseCheck ErrCode = -50 // 媒体上传失败,请检查网络或文件大小后重试 // Product: 1xxx ErrCodeProductSrvOk ErrCode = ErrCodeOk diff --git a/app/mix/service/business_validator/auth.go b/app/mix/service/business_validator/auth.go index f8a866e7..5d917529 100644 --- a/app/mix/service/business_validator/auth.go +++ b/app/mix/service/business_validator/auth.go @@ -574,7 +574,7 @@ func (l *AuthBusinessValidator) EnsureMediaIsSuccessfullyUploaded(media *dbstruc } for _, imageId := range media.GetImageIds() { if int64(imageIdForUploadFail) == imageId { - l.ec = errcode.ErrCodeMediaUploadFail + l.ec = errcode.ErrCodeMediaUploadFailPleaseCheck return } } @@ -589,7 +589,7 @@ func (l *AuthBusinessValidator) EnsureMediaIsSuccessfullyUploaded(media *dbstruc } for _, videoId := range media.GetVideoIds() { if int64(videoIdForUploadFail) == videoId { - l.ec = errcode.ErrCodeMediaUploadFail + l.ec = errcode.ErrCodeMediaUploadFailPleaseCheck return } } From 36f87c275e962ff87ef08ca3188cc22314429591 Mon Sep 17 00:00:00 2001 From: Leufolium Date: Wed, 22 May 2024 23:35:07 +0800 Subject: [PATCH 3/3] by Robin at 20240522 --- .../service/apiservice_business_validation.go | 5 ++ .../service/opservice_business_validation.go | 56 +++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/app/mix/service/apiservice_business_validation.go b/app/mix/service/apiservice_business_validation.go index fb5492aa..4213005b 100644 --- a/app/mix/service/apiservice_business_validation.go +++ b/app/mix/service/apiservice_business_validation.go @@ -226,6 +226,7 @@ func (s *Service) ApiUpdateAccountBusinessValidate(ctx *gin.Context, req *accoun // 1.业务校验 result := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.Account.Avatar). EnsureIsOperatingHisOwn(util.DerefInt64(req.Account.Mid)). Validate(). Collect() @@ -421,6 +422,8 @@ func (s *Service) ApiCreateStreamerAuthApprovalBusinessValidate(ctx *gin.Context ec = errcode.ErrCodeStreamerAuthApprovalSrvOk result := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.StreamerAuthApproval.Album). + EnsureMediaIsSuccessfullyUploaded(req.StreamerAuthApproval.Shorts). EnsureIsOperatingHisOwn(util.DerefInt64(req.StreamerAuthApproval.Mid)). Validate(). Collect() @@ -479,6 +482,8 @@ func (s *Service) ApiUpdateStreamerBusinessValidate(ctx *gin.Context, req *strea ec = errcode.ErrCodeStreamerSrvOk result := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.Streamer.Album). + EnsureMediaIsSuccessfullyUploaded(req.Streamer.Shorts). EnsureIsOperatingHisOwn(util.DerefInt64(req.Streamer.Mid)). Validate(). Collect() diff --git a/app/mix/service/opservice_business_validation.go b/app/mix/service/opservice_business_validation.go index dfeb5045..39a6a247 100644 --- a/app/mix/service/opservice_business_validation.go +++ b/app/mix/service/opservice_business_validation.go @@ -1,6 +1,7 @@ package service import ( + "service/api/consts" "service/api/errcode" accountproto "service/api/proto/account/proto" accountpunishmentproto "service/api/proto/accountpunishment/proto" @@ -239,6 +240,7 @@ func (s *Service) OpUpdateAccountBusinessValidate(ctx *gin.Context, req *account // 1.业务校验 result := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.Account.Avatar). QueryAccount(_DefaultAccount.OpListByMid). EnsureAccountExist(). EnsureIsOpRole(). @@ -515,6 +517,8 @@ func (s *Service) OpUpdateStreamerBusinessValidate(ctx *gin.Context, req *stream // 1.业务校验 result := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.Streamer.Album). + EnsureMediaIsSuccessfullyUploaded(req.Streamer.Shorts). QueryAccount(_DefaultAccount.OpListByMid). EnsureAccountExist(). EnsureIsOpRole(). @@ -1143,6 +1147,7 @@ func (s *Service) OpCreateMomentBusinessValidate(ctx *gin.Context, req *momentpr ec = errcode.ErrCodeMomentSrvOk // 1.业务校验 result := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.Moment.MediaComp). QueryAccount(_DefaultAccount.OpListByMid). EnsureAccountExist(). EnsureIsOpRole(). @@ -1159,6 +1164,7 @@ func (s *Service) OpUpdateMomentBusinessValidate(ctx *gin.Context, req *momentpr ec = errcode.ErrCodeMomentSrvOk // 1.业务校验 result := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.Moment.MediaComp). QueryAccount(_DefaultAccount.OpListByMid). EnsureAccountExist(). EnsureIsOpRole(). @@ -1423,3 +1429,53 @@ func (s *Service) OpHeadZoneMomentBusinessValidate(ctx *gin.Context, req *zonemo } return } + +func (s *Service) OpCreateZoneMomentBusinessValidate(ctx *gin.Context, req *zonemomentproto.OpCreateReq) (ec errcode.ErrCode, accountpunishment *dbstruct.AccountPunishment) { + ec = errcode.ErrCodeMomentSrvOk + + mediaVisibleRange := int64(0) + switch req.ZoneMoment.GetCType() { + case consts.ZoneMomentCType_Free: + case consts.ZoneMomentCType_Paid: + mediaVisibleRange = req.ZoneMoment.GetMediaVisibleRange() + } + + resultList := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.ZoneMoment.MediaComp). + EnsureZoneMomentImagesEnoughForEncryption(req.ZoneMoment.GetMType(), req.ZoneMoment.MediaComp, mediaVisibleRange). + EnsureAmongZoneMomentsPaidItemsLessThanFreeItems(_DefaultZoneMoment.OpCountByMidAndCType, req.ZoneMoment.GetMid(), req.ZoneMoment.GetCType()). + EnsureZoneMomentCreateTimesNotReachedDailyUpperbound(_DefaultZoneMomentCreateTimes.OpGetAndUpdate, req.ZoneMoment.GetMid(), req.ZoneMoment.GetCType()). + Validate(). + Collect() + ec, _ = resultList[0].(errcode.ErrCode) + accountpunishment, _ = resultList[3].(*dbstruct.AccountPunishment) + if ec != errcode.ErrCodeOk { + logger.Error("OpCreateZoneMomentBusinessValidate business validation failed!") + return + } + + return +} + +func (s *Service) OpUpdateZoneMomentBusinessValidate(ctx *gin.Context, req *zonemomentproto.OpUpdateReq) (ec errcode.ErrCode) { + ec = errcode.ErrCodeMomentSrvOk + + mediaVisibleRange := int64(0) + switch req.ZoneMoment.GetCType() { + case consts.ZoneMomentCType_Paid: + mediaVisibleRange = req.ZoneMoment.GetMediaVisibleRange() + } + + resultList := businessvalidator.NewAuthBusinessValidator(ctx, req). + EnsureMediaIsSuccessfullyUploaded(req.ZoneMoment.MediaComp). + EnsureZoneMomentImagesEnoughForEncryption(req.ZoneMoment.GetMType(), req.ZoneMoment.MediaComp, mediaVisibleRange). + Validate(). + Collect() + ec, _ = resultList[0].(errcode.ErrCode) + if ec != errcode.ErrCodeOk { + logger.Error("OpUpdateZoneMomentBusinessValidate business validation failed!") + return + } + + return +}