zone_url
This commit is contained in:
parent
04d757c62a
commit
1464052697
|
@ -312,6 +312,9 @@ func Init(r *gin.Engine) {
|
|||
apiAppGroup := r.Group("/api/app", PrepareToC())
|
||||
apiAppGroup.POST("install_info", middleware.JSONParamValidator(base.BaseRequest{}), OpGetInstallInfo)
|
||||
|
||||
apiShareGroup := r.Group("/api/share", PrepareToC())
|
||||
apiShareGroup.POST("zone_url", GetZoneShareUrl)
|
||||
|
||||
// =============================== 以下是服务,只允许内网调用 ===============================
|
||||
|
||||
// op相关,直接调用服务,不调用gateway
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"service/app/mix/service"
|
||||
"service/library/logger"
|
||||
)
|
||||
|
||||
func GetZoneShareUrl(ctx *gin.Context) {
|
||||
url, err := service.DefaultService.GetZoneShareUrl(ctx)
|
||||
if err != nil {
|
||||
logger.Error("GetZoneShareUrl fail, err: %v", err)
|
||||
data := map[string]any{
|
||||
"share_url": "",
|
||||
}
|
||||
ReplyOk(ctx, data)
|
||||
return
|
||||
}
|
||||
data := map[string]any{
|
||||
"share_url": url,
|
||||
}
|
||||
ReplyOk(ctx, data)
|
||||
}
|
|
@ -247,6 +247,9 @@ const (
|
|||
DBRavenIQTest = "Raven_IQ_test"
|
||||
COLRavenIQTest = "Raven_IQ_test"
|
||||
COLRavenIQTestVisit = "Raven_IQ_test_visit"
|
||||
|
||||
DBShare = "share"
|
||||
COLShareUrl = "share_url"
|
||||
)
|
||||
|
||||
// 商品表
|
||||
|
@ -648,6 +651,11 @@ func (m *Mongo) getColRavenIQTestVisit() *qmgo.Collection {
|
|||
return m.clientMix.Database(DBRavenIQTest).Collection(COLRavenIQTestVisit)
|
||||
}
|
||||
|
||||
// 商品表
|
||||
func (m *Mongo) getColShareUrl() *qmgo.Collection {
|
||||
return m.clientMix.Database(DBShare).Collection(COLShareUrl)
|
||||
}
|
||||
|
||||
// 商品相关
|
||||
func (m *Mongo) CreateProduct(ctx *gin.Context, product *dbstruct.Product) error {
|
||||
col := m.getColProduct()
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
package dao
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/qiniu/qmgo"
|
||||
"github.com/qiniu/qmgo/operator"
|
||||
"service/dbstruct"
|
||||
)
|
||||
|
||||
// 获取有效的分享链接
|
||||
func (m *Mongo) GetValidShareUrl(ctx *gin.Context) ([]*dbstruct.ShareUrl, error) {
|
||||
list := make([]*dbstruct.ShareUrl, 0)
|
||||
col := m.getColShareUrl()
|
||||
query := qmgo.M{
|
||||
"status": dbstruct.ShareUrlStatusAvailable,
|
||||
}
|
||||
err := col.Find(ctx, query).All(&list)
|
||||
if err == qmgo.ErrNoSuchDocuments {
|
||||
err = nil
|
||||
return make([]*dbstruct.ShareUrl, 0), nil
|
||||
}
|
||||
if err != nil {
|
||||
return make([]*dbstruct.ShareUrl, 0), err
|
||||
}
|
||||
return list, nil
|
||||
}
|
||||
|
||||
// 分享链接使用次数 +1
|
||||
func (m *Mongo) IncShareUrlUseCnt(ctx *gin.Context, url string) error {
|
||||
col := m.getColShareUrl()
|
||||
up := qmgo.M{
|
||||
operator.Inc: qmgo.M{
|
||||
"use_cnt": 1,
|
||||
},
|
||||
}
|
||||
err := col.UpdateId(ctx, url, up)
|
||||
if err == qmgo.ErrNoSuchDocuments {
|
||||
err = nil
|
||||
return nil
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package logic
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"math/rand"
|
||||
"service/app/mix/dao"
|
||||
"service/bizcommon/util"
|
||||
"service/library/logger"
|
||||
)
|
||||
|
||||
type Share struct {
|
||||
store *dao.Store
|
||||
}
|
||||
|
||||
func NewShare(store *dao.Store) (s *Share) {
|
||||
s = &Share{
|
||||
store: store,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (p *Share) GetZoneShareUrl(ctx *gin.Context) (string, error) {
|
||||
list, err := p.store.GetValidShareUrl(ctx)
|
||||
if err != nil {
|
||||
logger.Error("GetValidShareUrl fail, list: %v, err: %v", util.ToJson(list), err)
|
||||
return "", err
|
||||
}
|
||||
if len(list) <= 0 {
|
||||
logger.Error("GetValidShareUrl fail, nil, list: %v", util.ToJson(list))
|
||||
return "", nil
|
||||
}
|
||||
doc := list[rand.Intn(len(list))-1]
|
||||
retUrl := doc.Url
|
||||
err1 := p.store.IncShareUrlUseCnt(ctx, retUrl)
|
||||
if err1 != nil {
|
||||
logger.Error("IncShareUrlUseCnt fail, url: %v, err: %v", retUrl, err1)
|
||||
}
|
||||
return retUrl, nil
|
||||
}
|
|
@ -158,6 +158,8 @@ var (
|
|||
|
||||
_DefaultStreamerDecrtByEs *logic.StreamerDecrtByEs
|
||||
_DefaultZoneDecrtByEs *logic.ZoneDecrtByEs
|
||||
|
||||
_DefaultShare *logic.Share
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
|
@ -275,6 +277,7 @@ func (s *Service) Init(c any) (err error) {
|
|||
|
||||
_DefaultStreamerDecrtByEs = logic.NewStreamerDecrtByEs(_DefaultStreamerAcct, _DefaultStreamer)
|
||||
_DefaultZoneDecrtByEs = logic.NewZoneDecrtByEs(_DefaultStreamerAcct, _DefaultZone)
|
||||
_DefaultShare = logic.NewShare(store)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func (s *Service) GetZoneShareUrl(ctx *gin.Context) (string, error) {
|
||||
return _DefaultShare.GetZoneShareUrl(ctx)
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package dbstruct
|
||||
|
||||
const (
|
||||
ShareUrlStatusInit = "000" // 初始化
|
||||
ShareUrlStatusForbidden = "101" // 被屏蔽
|
||||
ShareUrlStatusAvailable = "102" // 可用
|
||||
ShareUrlStatusUnknown = "103" // 未知、查空
|
||||
ShareUrlStatusInvalidParam = "001" // 调用异常:参数有误请检查参数
|
||||
ShareUrlStatusInvalidFreq = "002" // 调用异常:接口调用频率过快,如需更快调用升级VIP
|
||||
ShareUrlStatusServerError = "003" // 调用异常:其它异常,不影响.
|
||||
)
|
||||
|
||||
type ShareUrl struct {
|
||||
Url string `json:"url" bson:"_id"` // url
|
||||
Ct int64 `json:"ct" bson:"ct"` // 创建时间
|
||||
Ut int64 `json:"ut" bson:"ut"` // 更新时间
|
||||
Status string `json:"status" bson:"status"` // Url状态
|
||||
ApiRes string `json:"api_res" bson:"api_res"` // 接口返回数据
|
||||
UseCnt int64 `json:"use_cnt" bson:"use_cnt"` // 使用次数
|
||||
}
|
Loading…
Reference in New Issue