feat:会员付费看原图
This commit is contained in:
parent
5a3ebbbb7c
commit
bd77e505fb
|
@ -151,6 +151,7 @@ var ErrCodeMsgMap = map[ErrCode]string{
|
||||||
ErrCodeImageAuditTaskSrvFail: "图像审核任务服务错误",
|
ErrCodeImageAuditTaskSrvFail: "图像审核任务服务错误",
|
||||||
ErrCodeImageAuditTaskNotExist: "图像审核任务不存在",
|
ErrCodeImageAuditTaskNotExist: "图像审核任务不存在",
|
||||||
ErrCodeImageAuditTaskManuallyPassFail: "图像审核人工通过失败",
|
ErrCodeImageAuditTaskManuallyPassFail: "图像审核人工通过失败",
|
||||||
|
ErrCodeImageOriginalVipView: "会员可查看原图",
|
||||||
|
|
||||||
ErrCodeTextAuditSrvFail: "文字审核服务错误",
|
ErrCodeTextAuditSrvFail: "文字审核服务错误",
|
||||||
ErrCodeTextAuditNotExist: "文字审核不存在",
|
ErrCodeTextAuditNotExist: "文字审核不存在",
|
||||||
|
@ -456,6 +457,7 @@ const (
|
||||||
ErrCodeImageAuditTaskSrvFail ErrCode = -21001 // 图像审核任务服务错误
|
ErrCodeImageAuditTaskSrvFail ErrCode = -21001 // 图像审核任务服务错误
|
||||||
ErrCodeImageAuditTaskNotExist ErrCode = -21002 // 图像审核任务不存在
|
ErrCodeImageAuditTaskNotExist ErrCode = -21002 // 图像审核任务不存在
|
||||||
ErrCodeImageAuditTaskManuallyPassFail ErrCode = -21003 // 图像审核人工通过失败
|
ErrCodeImageAuditTaskManuallyPassFail ErrCode = -21003 // 图像审核人工通过失败
|
||||||
|
ErrCodeImageOriginalVipView ErrCode = -21004 // 会员可查看原图
|
||||||
|
|
||||||
// TextAudit: 22xxx
|
// TextAudit: 22xxx
|
||||||
ErrCodeTextAuditSrvOk ErrCode = ErrCodeOk
|
ErrCodeTextAuditSrvOk ErrCode = ErrCodeOk
|
||||||
|
@ -633,4 +635,7 @@ const (
|
||||||
ErrCodeRavenIQTestVisitSrvOk ErrCode = ErrCodeOk
|
ErrCodeRavenIQTestVisitSrvOk ErrCode = ErrCodeOk
|
||||||
ErrCodeRavenIQTestVisitSrvFail ErrCode = -102001 // 瑞文智商测试访问表服务错误
|
ErrCodeRavenIQTestVisitSrvFail ErrCode = -102001 // 瑞文智商测试访问表服务错误
|
||||||
ErrCodeRavenIQTestVisitNotExist ErrCode = -102002 // 瑞文智商测试访问表不存在
|
ErrCodeRavenIQTestVisitNotExist ErrCode = -102002 // 瑞文智商测试访问表不存在
|
||||||
|
|
||||||
|
//
|
||||||
|
ErrCodeVip ErrCode = -102003
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package proto
|
||||||
|
|
||||||
|
import (
|
||||||
|
"service/api/base"
|
||||||
|
"service/dbstruct"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ApiOriginalImageReq struct {
|
||||||
|
base.BaseRequest
|
||||||
|
ImageId int64 `json:"image_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ApiOriginalImageData struct {
|
||||||
|
Images []*dbstruct.ToCImage `json:"images"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ApiOriginalImageResp struct {
|
||||||
|
base.BaseResponse
|
||||||
|
*ApiOriginalImageData `json:"data"`
|
||||||
|
}
|
|
@ -1 +1,26 @@
|
||||||
package controller
|
package controller
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"service/api/errcode"
|
||||||
|
previewsproto "service/api/proto/previews/proto"
|
||||||
|
"service/app/mix/service"
|
||||||
|
"service/bizcommon/util"
|
||||||
|
"service/library/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ApiGetOriginalImage(ctx *gin.Context) {
|
||||||
|
req := ctx.MustGet("client_req").(*previewsproto.ApiOriginalImageReq)
|
||||||
|
if req.ImageId <= 0 {
|
||||||
|
logger.Error(" ApiGetOriginalImage, invalid param, req: %v", util.ToJson(req))
|
||||||
|
ReplyErrCodeMsg(ctx, errcode.ErrCodeBadParam)
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err, ec := service.DefaultService.ApiGetOriginalImage(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("image ApiGetOriginalImage ApiGetOriginalImage err, req: %v", util.ToJson(req))
|
||||||
|
ReplyErrCodeMsg(ctx, ec)
|
||||||
|
}
|
||||||
|
|
||||||
|
ReplyOk(ctx, data)
|
||||||
|
}
|
||||||
|
|
|
@ -38,6 +38,7 @@ import (
|
||||||
loginproto "service/api/proto/login/proto"
|
loginproto "service/api/proto/login/proto"
|
||||||
momentproto "service/api/proto/moment/proto"
|
momentproto "service/api/proto/moment/proto"
|
||||||
moment_audit_taskproto "service/api/proto/moment_audit_task/proto"
|
moment_audit_taskproto "service/api/proto/moment_audit_task/proto"
|
||||||
|
imageproto "service/api/proto/previews/proto"
|
||||||
productproto "service/api/proto/product/proto"
|
productproto "service/api/proto/product/proto"
|
||||||
realname_authenticationproto "service/api/proto/realname_authentication/proto"
|
realname_authenticationproto "service/api/proto/realname_authentication/proto"
|
||||||
streamerproto "service/api/proto/streamer/proto"
|
streamerproto "service/api/proto/streamer/proto"
|
||||||
|
@ -318,6 +319,9 @@ func Init(r *gin.Engine) {
|
||||||
apiConfigGroup := r.Group("/api/config", PrepareToC())
|
apiConfigGroup := r.Group("/api/config", PrepareToC())
|
||||||
apiConfigGroup.POST("cold_config", middleware.JSONParamValidator(base.BaseRequest{}), middleware.JwtAuthenticator(), ColdConfigHandler)
|
apiConfigGroup.POST("cold_config", middleware.JSONParamValidator(base.BaseRequest{}), middleware.JwtAuthenticator(), ColdConfigHandler)
|
||||||
|
|
||||||
|
apiPreviewsGroup := r.Group("/api/previews", PrepareToC())
|
||||||
|
apiPreviewsGroup.POST("original_image", middleware.JSONParamValidator(imageproto.ApiOriginalImageReq{}), middleware.JwtAuthenticator(), ApiGetOriginalImage)
|
||||||
|
|
||||||
// =============================== 以下是服务,只允许内网调用 ===============================
|
// =============================== 以下是服务,只允许内网调用 ===============================
|
||||||
|
|
||||||
// op相关,直接调用服务,不调用gateway
|
// op相关,直接调用服务,不调用gateway
|
||||||
|
|
|
@ -59,6 +59,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
Raven_IQ_testproto "service/api/proto/Raven_IQ_test/proto"
|
Raven_IQ_testproto "service/api/proto/Raven_IQ_test/proto"
|
||||||
|
previewsproto "service/api/proto/previews/proto"
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
goproto "google.golang.org/protobuf/proto"
|
goproto "google.golang.org/protobuf/proto"
|
||||||
|
@ -4462,3 +4463,41 @@ func (s *Service) ApiGetRavenIQTestVisitCount(ctx *gin.Context, req *Raven_IQ_te
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Service) ApiGetOriginalImage(ctx *gin.Context, req *previewsproto.ApiOriginalImageReq) (*previewsproto.ApiOriginalImageData, error, errcode.ErrCode) {
|
||||||
|
ec := errcode.ErrCodeMediaSrvOk
|
||||||
|
// 获取用户付费状态
|
||||||
|
account, err := _DefaultAccount.OpListByMid(ctx, &accountproto.OpListByMidReq{
|
||||||
|
Mid: &req.Mid,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("ApiGetOriginalImage failed : %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 会员可以查看原图
|
||||||
|
if account.GetIsAMember() != consts.PermanentMember {
|
||||||
|
ec = errcode.ErrCodeImageOriginalVipView
|
||||||
|
return nil, nil, ec
|
||||||
|
}
|
||||||
|
|
||||||
|
ids := make([]int64, 0)
|
||||||
|
ids = append(ids, req.ImageId)
|
||||||
|
// 获取图片
|
||||||
|
list, err := _DefaultMedia.GetImageByIds(ctx, ids)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("ApiGetOriginalImage GetImageByIds fail, req: %v, err: %v", util.ToJson(req), err)
|
||||||
|
ec = errcode.ErrCodeMediaSrvFail
|
||||||
|
return nil, err, ec
|
||||||
|
}
|
||||||
|
|
||||||
|
images := make([]*dbstruct.ToCImage, 0)
|
||||||
|
for _, image := range list {
|
||||||
|
images = append(images, _DefaultImage.TransToCImage(image, account.GetIsAMember()))
|
||||||
|
}
|
||||||
|
|
||||||
|
data := &previewsproto.ApiOriginalImageData{
|
||||||
|
Images: images,
|
||||||
|
}
|
||||||
|
|
||||||
|
return data, err, ec
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package logic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math/rand"
|
||||||
|
"service/api/consts"
|
||||||
|
"service/app/mix/dao"
|
||||||
|
"service/dbstruct"
|
||||||
|
_ "service/library/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Image struct {
|
||||||
|
store *dao.Store
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *Image) TransToCImage(image *dbstruct.Image, isAMember int64) *dbstruct.ToCImage {
|
||||||
|
if image == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 选择内存最小的图片
|
||||||
|
imgSrcId := image.SelectMinSizeOssId()
|
||||||
|
|
||||||
|
// 会员可以查看原图
|
||||||
|
if isAMember == consts.PermanentMember {
|
||||||
|
imgSrcId = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return &dbstruct.ToCImage{
|
||||||
|
Id: image.Id,
|
||||||
|
W: image.W,
|
||||||
|
H: image.H,
|
||||||
|
Fmt: image.Fmt,
|
||||||
|
Urls: []string{v.getFileServerDomain() + imgSrcId},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *Image) getFileServerDomain() string {
|
||||||
|
return "https://filecdntx01.tiefen.fun/"
|
||||||
|
if rand.Intn(100) < 50 {
|
||||||
|
return "https://filecdntx01.tiefen.fun/"
|
||||||
|
}
|
||||||
|
return "https://filecdn01.tiefen.fun/"
|
||||||
|
|
||||||
|
//return defaultMediaFiller.fileServerDomainName
|
||||||
|
}
|
|
@ -155,6 +155,7 @@ var (
|
||||||
_DefaultRavenIQTest *logic.RavenIQTest
|
_DefaultRavenIQTest *logic.RavenIQTest
|
||||||
_DefaultRavenIQTestVisit *logic.RavenIQTestVisit
|
_DefaultRavenIQTestVisit *logic.RavenIQTestVisit
|
||||||
_DefaultVeriCodeWrongTimes *logic.VeriCodeWrongTimes
|
_DefaultVeriCodeWrongTimes *logic.VeriCodeWrongTimes
|
||||||
|
_DefaultImage *logic.Image
|
||||||
|
|
||||||
_DefaultStreamerDecrtByEs *logic.StreamerDecrtByEs
|
_DefaultStreamerDecrtByEs *logic.StreamerDecrtByEs
|
||||||
_DefaultZoneDecrtByEs *logic.ZoneDecrtByEs
|
_DefaultZoneDecrtByEs *logic.ZoneDecrtByEs
|
||||||
|
|
|
@ -3,9 +3,7 @@ package mediafiller
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
accountproto "service/api/proto/account/proto"
|
|
||||||
"service/api/proto/gateway/proto"
|
"service/api/proto/gateway/proto"
|
||||||
"service/app/mix/service/logic"
|
|
||||||
"service/dbstruct"
|
"service/dbstruct"
|
||||||
"service/library/logger"
|
"service/library/logger"
|
||||||
"time"
|
"time"
|
||||||
|
@ -24,7 +22,6 @@ func init() {
|
||||||
|
|
||||||
var (
|
var (
|
||||||
defaultMediaFiller *MediaFiller
|
defaultMediaFiller *MediaFiller
|
||||||
_DefaultAccount *logic.Account
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type GetImageByIdsFunc func(ctx *gin.Context, ids []int64) ([]*dbstruct.Image, error)
|
type GetImageByIdsFunc func(ctx *gin.Context, ids []int64) ([]*dbstruct.Image, error)
|
||||||
|
@ -96,21 +93,12 @@ func FillEntity(ctx *gin.Context, entity MediaFillable) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取用户付费状态
|
|
||||||
account, err := _DefaultAccount.OpListByMid(ctx, &accountproto.OpListByMidReq{
|
|
||||||
Mid: &baseReq.Mid,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
logger.Error("FillEntity mediafiller component opListByMid failed : %v", err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
images := make([]*dbstruct.ToCImage, 0)
|
images := make([]*dbstruct.ToCImage, 0)
|
||||||
videos := make([]*dbstruct.ToCVideo, 0)
|
videos := make([]*dbstruct.ToCVideo, 0)
|
||||||
|
|
||||||
for _, imageId := range imageIds {
|
for _, imageId := range imageIds {
|
||||||
if image, ok := imageMap[imageId]; ok {
|
if image, ok := imageMap[imageId]; ok {
|
||||||
images = append(images, transToCImage(image, account.GetIsAMember()))
|
images = append(images, transToCImage(image))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, videoId := range videoIds {
|
for _, videoId := range videoIds {
|
||||||
|
@ -165,22 +153,13 @@ func FillList(ctx *gin.Context, list []MediaFillable) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取用户付费状态
|
|
||||||
account, err := _DefaultAccount.OpListByMid(ctx, &accountproto.OpListByMidReq{
|
|
||||||
Mid: &baseReq.Mid,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
logger.Error("FillEntity mediafiller component opListByMid failed : %v", err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range list {
|
for _, v := range list {
|
||||||
|
|
||||||
images := make([]*dbstruct.ToCImage, 0)
|
images := make([]*dbstruct.ToCImage, 0)
|
||||||
videos := make([]*dbstruct.ToCVideo, 0)
|
videos := make([]*dbstruct.ToCVideo, 0)
|
||||||
for _, imageId := range v.GetImageIds() {
|
for _, imageId := range v.GetImageIds() {
|
||||||
if image, ok := imageMap[imageId]; ok {
|
if image, ok := imageMap[imageId]; ok {
|
||||||
images = append(images, transToCImage(image, account.GetIsAMember()))
|
images = append(images, transToCImage(image))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, videoId := range v.GetVideoIds() {
|
for _, videoId := range v.GetVideoIds() {
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package mediafiller
|
package mediafiller
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"service/api/consts"
|
|
||||||
"service/dbstruct"
|
"service/dbstruct"
|
||||||
"service/library/logger"
|
"service/library/logger"
|
||||||
|
|
||||||
|
@ -43,7 +42,7 @@ func getVideoMapByIds(ctx *gin.Context, ids []int64) (map[int64]*dbstruct.Video,
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo
|
// todo
|
||||||
func transToCImage(image *dbstruct.Image, isAMember int64) *dbstruct.ToCImage {
|
func transToCImage(image *dbstruct.Image) *dbstruct.ToCImage {
|
||||||
if image == nil {
|
if image == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -51,11 +50,6 @@ func transToCImage(image *dbstruct.Image, isAMember int64) *dbstruct.ToCImage {
|
||||||
// 选择内存最小的图片
|
// 选择内存最小的图片
|
||||||
imgSrcId := image.SelectMinSizeOssId()
|
imgSrcId := image.SelectMinSizeOssId()
|
||||||
|
|
||||||
// 会员可以查看原图
|
|
||||||
if isAMember == consts.PermanentMember {
|
|
||||||
imgSrcId = ""
|
|
||||||
}
|
|
||||||
|
|
||||||
return &dbstruct.ToCImage{
|
return &dbstruct.ToCImage{
|
||||||
Id: image.Id,
|
Id: image.Id,
|
||||||
W: image.W,
|
W: image.W,
|
||||||
|
|
Loading…
Reference in New Issue