Files
hgmj_server/app/api/searchctrl/searchctrl.go
T
2026-10-08 16:50:13 +08:00

246 lines
7.1 KiB
Go

package searchctrl
import (
"91jd-server/app/service/moduleser"
"91jd-server/app/service/search"
"91jd-server/app/service/vidser"
"91jd-server/common"
"91jd-server/common/filter"
"91jd-server/common/stderr"
"91jd-server/models/commod"
"91jd-server/models/l/searchlogmod"
"fmt"
"github.com/gin-gonic/gin"
)
// List doc
// @Summary 搜索模块 - 搜索keyWords和realm指定的相关资源
// @Description 获取FILE域 Token
// @Tags Search
// @Accept mpfd,json
// @Produce json,html
// @Param q body search.NewsKeywordSearchReq true "参数"
// @Success 200 object search.NewsKeywordSearchRep "成功"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /app/search/list [post]
func List(c *gin.Context) {
var req search.NewsKeywordSearchReq
if err := c.ShouldBind(&req); err != nil {
common.ServeJSON(c, stderr.ErrParamError, "search List arg error "+err.Error())
return
}
// 检查uid是否存在
uid, err := common.GetUID(c)
if err != nil {
common.ServeJSON(c, stderr.ErrAccessForbid, "search List Context USER_ID is not exist ")
return
}
req.KeyWords, err = filterKeyWord(req.KeyWords)
if err != nil {
common.ServeJSON(c, stderr.TagAddTagNameInvalidErr, err)
return
}
//录入搜索日志
common.Go(func() {
_ = searchlogmod.InsertMany(uid, req.Realm, req.KeyWords)
})
data, err := req.Search(uid)
if err != nil {
common.ServeJSON(c, stderr.ErrNetWorkBusy, err)
return
}
common.ServeJSON(c, stderr.Success, data)
//if arg.Realm == constant.Video {
// if items, ok := result.Data().([]searcher.VideoRes); ok {
// // 查询用户信息
// u, err := usermod.FindUserByUID(uid)
// if err != nil {
// common.ServeJSON(c, stderr.ErrNetWorkBusy, err)
// return
// }
// if u.VipExpireDate.After(time.Now()) {
// for k, item := range items {
// if item.Coins != nil && *item.Coins < 10 {
// var zero int64 = 0
// item.Coins = &zero
// }
// items[k] = item
// }
// }
// common.ServeJSON(c, stderr.Success, gin.H{
// "list": items,
// "hasNext": result.HasNext(),
// })
// return
// }
//}
//
//if req.Realm == constant.SearchSP || req.Realm == constant.SearchShort {
// // 额外获取TAG相关信息
// tagId, err := tagmod.GetTagIDByName(req.KeyWords[0])
// if tagId.IsZero() || err != nil {
// common.ServeJSON(c, stderr.Success, gin.H{
// "list": result.Data(),
// "tagID": "",
// "tagVidList": nil,
// "hasNext": result.HasNext(),
// })
// return
// }
// // 6-最多收藏
// vmodList, err := vidser.GetVideosByTagID(tagId, req.Realm, 6, 0, 4)
// if err != nil {
// common.ServeJSON(c, stderr.Success, gin.H{
// "list": result.Data(),
// "tagID": "",
// "tagVidList": nil,
// "hasNext": result.HasNext(),
// })
// return
// }
// oids := make([]primitive.ObjectID, len(vmodList))
// for i, v := range vmodList {
// oids[i] = v.ID
// }
// if len(oids) > int(req.PageSize) {
// oids = oids[:req.PageSize]
// }
// vidList := vidhelpser.GetVideosByIDs(0, oids)
// common.ServeJSON(c, stderr.Success, gin.H{
// "list": result.Data(),
// "tagID": tagId.Hex(),
// "tagVidList": vidList,
// "hasNext": result.HasNext(),
// })
// return
//}
//common.ServeJSON(c, stderr.Success, gin.H{
// "list": result.Data(),
// "hasNext": result.HasNext(),
//})
}
// 如返回为空数组 则表示所输入关键字 全为违规词汇
func filterKeyWord(KeyWords []string) ([]string, error) {
//过滤掉违规词汇
pureKw := make([]string, 0, len(KeyWords))
for _, v := range KeyWords {
s, e := filter.TagFilter.Filter(v)
if len(s) == 0 && e == nil {
pureKw = append(pureKw, v)
}
}
if len(pureKw) == 0 {
return pureKw, fmt.Errorf("Invalid tag name: %v", KeyWords)
}
return pureKw, nil
}
// HotTagSearch doc
// @Summary 搜索
// @Description 猜你想要
// @Tags Search
// @Accept mpfd,json
// @Produce json,html
// @Success 200 {object} proto.Tag
// @Failure 400 {string} json "{"msg": "操作失败" "data":{}}"
// @Router /search/hotTag [get]
func HotTagSearch(c *gin.Context) {
data, err := search.GetHotTag()
if err != nil {
common.ServeJSON(c, stderr.ErrNetWorkBusy, err.Error())
return
}
common.ServeJSON(c, stderr.Success, gin.H{
"list": data,
})
}
// HotVid doc
// @Summary 热门视频列表
// @Description 热门视频列表
// @Tags Search
// @Accept mpfd,json
// @Produce json,html
// @Param pageNumber query int true "当前页"
// @Param pageSize query int true "每页条数"
// @Param type query int true "0最新热播 1本月最热 2上月最热"
// @Success 200 {object} vidmod.VideoModel "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /app/search/hotVid/list [get]
func HotVid(c *gin.Context) {
var arg struct {
commod.Page
T int `json:"type" form:"type"` // 0 最新热播 1本月最热 2上月最热
}
if err := c.ShouldBind(&arg); err != nil {
common.ServeJSON(c, stderr.ErrParamError, "searchCtrl WonderTagList arg error "+err.Error())
return
}
res, err := vidser.GetHotVideo(int64(arg.PageNumber), int64(arg.PageSize), arg.T)
if err != nil {
common.ServeJSON(c, stderr.Failure, err)
return
}
common.ServeJSON(c, stderr.Success, res)
}
// HotPublisher doc
// @Summary 热门博主
// @Description 热门博主
// @Tags Search
// @Accept mpfd,json
// @Produce json,html
// @Param pageNumber query int true "当前页"
// @Param pageSize query int true "每页条数"
// @Success 200 {object} proto.HotPublisher "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /search/hotPublisher/list [get]
func HotPublisher(c *gin.Context) {
// 检查uid是否存在
uid, err := common.GetUID(c)
if err != nil {
common.ServeJSON(c, stderr.ErrAccessForbid, "search HotPublisher Context USER_ID is not exist ")
return
}
list, err := vidser.GetHotPublisher(uid)
if err != nil {
common.ServeJSON(c, stderr.Failure, err)
return
}
common.ServeJSON(c, stderr.Success, gin.H{
"list": list,
})
}
// PublisherList doc
// @Summary 热门板块
// @Description 热门板块
// @Tags 发布
// @Accept mpfd,json
// @Produce json,html
// @Success 200 {object} tagmod.TagInfoRes "{"msg": "操作成功"}"
// @Failure 400 {string} json "{"msg": "操作失败"}"
// @Router /app/search/publisher/list [get]
func PublisherList(c *gin.Context) {
// 检查uid是否存在
uid, err := common.GetUID(c)
if err != nil {
common.ServeJSON(c, stderr.ErrAccessForbid, "search HotPublisher Context USER_ID is not exist ")
return
}
list, err := moduleser.GetPublishTag(uid)
if err != nil {
common.ServeJSON(c, stderr.Failure, err)
return
}
common.ServeJSON(c, stderr.Success, list)
}