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 := r.Group("/api/app", PrepareToC())
|
||||||
apiAppGroup.POST("install_info", middleware.JSONParamValidator(base.BaseRequest{}), OpGetInstallInfo)
|
apiAppGroup.POST("install_info", middleware.JSONParamValidator(base.BaseRequest{}), OpGetInstallInfo)
|
||||||
|
|
||||||
|
apiShareGroup := r.Group("/api/share", PrepareToC())
|
||||||
|
apiShareGroup.POST("zone_url", GetZoneShareUrl)
|
||||||
|
|
||||||
// =============================== 以下是服务,只允许内网调用 ===============================
|
// =============================== 以下是服务,只允许内网调用 ===============================
|
||||||
|
|
||||||
// op相关,直接调用服务,不调用gateway
|
// 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"
|
DBRavenIQTest = "Raven_IQ_test"
|
||||||
COLRavenIQTest = "Raven_IQ_test"
|
COLRavenIQTest = "Raven_IQ_test"
|
||||||
COLRavenIQTestVisit = "Raven_IQ_test_visit"
|
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)
|
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 {
|
func (m *Mongo) CreateProduct(ctx *gin.Context, product *dbstruct.Product) error {
|
||||||
col := m.getColProduct()
|
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
|
_DefaultStreamerDecrtByEs *logic.StreamerDecrtByEs
|
||||||
_DefaultZoneDecrtByEs *logic.ZoneDecrtByEs
|
_DefaultZoneDecrtByEs *logic.ZoneDecrtByEs
|
||||||
|
|
||||||
|
_DefaultShare *logic.Share
|
||||||
)
|
)
|
||||||
|
|
||||||
type Service struct {
|
type Service struct {
|
||||||
|
@ -275,6 +277,7 @@ func (s *Service) Init(c any) (err error) {
|
||||||
|
|
||||||
_DefaultStreamerDecrtByEs = logic.NewStreamerDecrtByEs(_DefaultStreamerAcct, _DefaultStreamer)
|
_DefaultStreamerDecrtByEs = logic.NewStreamerDecrtByEs(_DefaultStreamerAcct, _DefaultStreamer)
|
||||||
_DefaultZoneDecrtByEs = logic.NewZoneDecrtByEs(_DefaultStreamerAcct, _DefaultZone)
|
_DefaultZoneDecrtByEs = logic.NewZoneDecrtByEs(_DefaultStreamerAcct, _DefaultZone)
|
||||||
|
_DefaultShare = logic.NewShare(store)
|
||||||
return
|
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