123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- package search
- import (
- "encoding/json"
- "go-common/app/interface/main/tv/model"
- "go-common/app/interface/main/tv/model/thirdp"
- "go-common/library/time"
- "github.com/siddontang/go-mysql/mysql"
- )
- const (
- _pgcType = 1
- _ugcType = 2
- _hotestOrder = 2
- // AllLabel is the string that means all data
- AllLabel = "-1" // it means all for index
- )
- // EsPage def.
- type EsPage struct {
- Num int `json:"num"`
- Size int `json:"size"`
- Total int `json:"total"`
- PageNum int `json:"page_num"`
- }
- // GetPageNb def.
- func (v *EsPage) GetPageNb() {
- if v.Total%v.Size == 0 {
- v.PageNum = v.Total / v.Size
- } else {
- v.PageNum = v.Total/v.Size + 1
- }
- }
- // EsPgcResult def.
- type EsPgcResult struct {
- Page *EsPage `json:"page"`
- Result []*PgcEsMdl `json:"result"`
- }
- // EsUgcResult def.
- type EsUgcResult struct {
- Page *EsPage `json:"page"`
- Result []*UgcEsMdl `json:"result"`
- }
- // UgcEsMdl def.
- type UgcEsMdl struct {
- AID int64 `json:"aid"`
- TypeID int32 `json:"typeid"`
- }
- // PgcEsMdl def.
- type PgcEsMdl struct {
- SeasonID int64 `json:"season_id"`
- }
- // EsCard def.
- type EsCard struct {
- model.Card
- DataType int `json:"data_type"` // 1=pgc, 2=ugc
- }
- // EsPager def.
- type EsPager struct {
- Title string `json:"title"`
- Page *EsPage `json:"page"`
- Result []*EsCard `json:"result"`
- }
- // FromPgc def.
- func (v *EsCard) FromPgc(card *model.Card) {
- v.Card = *card
- v.DataType = _pgcType
- }
- // FromUgc def.
- func (v *EsCard) FromUgc(card *model.Card) {
- v.Card = *card
- v.DataType = _ugcType
- }
- // ReqEsPn is part of the es request for page related cfg
- type ReqEsPn struct {
- Ps int `form:"ps" default:"50"`
- Pn int `form:"pn" default:"1"`
- Order int `form:"order" validate:"required"`
- Sort int `form:"sort" default:"0"`
- }
- // ReqPgcIdx is bm request for pgc index
- type ReqPgcIdx struct {
- SeasonType int `form:"category" validate:"required,max=5"`
- ProducerID int `form:"producer_id"`
- Year string `form:"year"`
- StyleID int `form:"style_id"`
- PubDate string `form:"pub_date"`
- SeasonMonth int `form:"season_month" validate:"max=10"`
- SeasonStatus []int `form:"season_status,split"`
- Copyright []int `form:"copyright,split"`
- IsFinish string `form:"is_finish"`
- Area []int `form:"area,split"`
- SeasonVersion int `form:"season_version"`
- ReqEsPn
- }
- // IsDefault def.
- func (v *ReqPgcIdx) IsDefault() bool {
- return v.Order == _hotestOrder && v.ProducerID <= 0 &&
- v.IsAllStr(v.Year) && v.StyleID <= 0 && v.IsAllStr(v.PubDate) && v.SeasonMonth <= 0 &&
- v.IsAll(v.SeasonStatus) && v.IsAll(v.Copyright) && v.IsAllStr(v.IsFinish) && v.IsAll(v.Area) &&
- v.SeasonVersion <= 0
- }
- // IsDefault def.
- func (v *ReqUgcIdx) IsDefault() bool {
- return v.Order == _hotestOrder && v.SecondTID <= 0 && (v.PubTime == "" || v.PubTime == AllLabel)
- }
- // Title def.
- func (v *ReqPgcIdx) Title() string {
- return thirdp.PgcCat(v.SeasonType)
- }
- // PgcOrder treats the order to get the responding field
- func (v *ReqPgcIdx) PgcOrder() (field string) {
- switch v.Order {
- case 0: // update time
- return "latest_time"
- case 1:
- return "dm_count"
- case 2:
- return "play_count"
- case 3: // follow
- return "fav_count"
- case 4:
- return "score"
- case 5: // for others
- return "pub_time"
- case 6: // for movie
- return "release_date"
- default:
- return "play_count"
- }
- }
- // IdxSort treats the sort
- func IdxSort(sortV int) (sort string) {
- switch sortV {
- case 0:
- return "desc"
- case 1:
- return "asc"
- default:
- return "desc"
- }
- }
- // ReqUgcIdx is bm request for ugc index
- type ReqUgcIdx struct {
- ParentTID int32 `form:"category" validate:"required"`
- SecondTID int32 `form:"typeid"`
- PubTime string `form:"pubtime"`
- ReqEsPn
- }
- // TimeStr picks json str from request and returns the time range struct in String format
- func (v *ReqUgcIdx) TimeStr() (res *UgcTime, err error) {
- var pubTimeV = &UgcTimeV{}
- if err = json.Unmarshal([]byte(v.PubTime), &pubTimeV); err != nil {
- return
- }
- res = &UgcTime{
- STime: pubTimeV.STime.Time().Format(mysql.TimeFormat),
- ETime: pubTimeV.ETime.Time().Format(mysql.TimeFormat),
- }
- return
- }
- // UgcTimeV def. INT64 for http
- type UgcTimeV struct {
- STime time.Time `json:"stime"`
- ETime time.Time `json:"etime"`
- }
- // UgcTime def. STRING for ES
- type UgcTime struct {
- STime string `json:"stime"`
- ETime string `json:"etime"`
- }
- // SrvUgcIdx is the request treated by service for DAO, like type_id field and pub_time
- type SrvUgcIdx struct {
- TIDs []int32
- PubTime *UgcTime
- ReqEsPn
- }
- // UgcOrder treats the order to get the responding field
- func (v *SrvUgcIdx) UgcOrder() (field string) {
- switch v.Order {
- case 1: // update time
- return "pubtime"
- case 2:
- return "click"
- default:
- return "click"
- }
- }
- // ReqIdxInterv is used for index intervention treatment
- type ReqIdxInterv struct {
- EsIDs []int64
- Category int
- IsPGC bool
- Pn int
- }
- // FromPGC def.
- func (v *ReqIdxInterv) FromPGC(sids []int64, req *ReqPgcIdx) {
- v.EsIDs = sids
- v.Category = req.SeasonType
- v.IsPGC = true
- v.Pn = req.Pn
- }
- // FromUGC def.
- func (v *ReqIdxInterv) FromUGC(aids []int64, req *ReqUgcIdx) {
- v.EsIDs = aids
- v.Category = int(req.ParentTID)
- v.IsPGC = false
- v.Pn = req.Pn
- }
- // IdxIntervSave def.
- type IdxIntervSave struct {
- Pgc map[int][]int64
- Ugc map[int][]int64
- }
- // IsAll checks whether a slice of int means all data
- func (v *ReqPgcIdx) IsAll(params []int) (res bool) {
- if len(params) == 0 {
- return true
- }
- for _, v := range params {
- if v < 0 {
- return true
- }
- }
- return false
- }
- // IsAllStr checks whether a string means all data
- func (v *ReqPgcIdx) IsAllStr(duration string) (res bool) {
- if duration == "" {
- return true
- }
- if duration == AllLabel {
- return true
- }
- return false
- }
|