123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- package activity
- import (
- "context"
- "encoding/json"
- "net/url"
- "strconv"
- "strings"
- "go-common/app/interface/main/creative/conf"
- "go-common/app/interface/main/creative/model/activity"
- "go-common/library/ecode"
- "go-common/library/log"
- httpx "go-common/library/net/http/blademaster"
- )
- const (
- _activityAllList = "/activity/list/videoall"
- _activityUpdate = "/api/likes/upbyaid/%d"
- _activitySubject = "/activity/subject/%d"
- _activityProtocol = "/activity/protocol/%d"
- _actOnlineByTypeURI = "/activity/online/by/type"
- _actURLType16 = "https://www.bilibili.com/blackboard/x/activity-tougao-h5/detail?from=snap&id="
- _actLike = "/activity/likes/list/%d"
- )
- // Dao define
- type Dao struct {
- c *conf.Config
- // http
- client *httpx.Client
- // uri
- ActAllListURI string
- ActUpdateURI string
- ActSubjectURI string
- ActProtocolURI string
- ActOnlineByTypeURL string
- ActLikeURI string
- }
- // New init dao
- func New(c *conf.Config) (d *Dao) {
- d = &Dao{
- c: c,
- client: httpx.NewClient(c.HTTPClient.Normal),
- ActAllListURI: c.Host.Activity + _activityAllList,
- ActUpdateURI: c.Host.Act + _activityUpdate,
- ActSubjectURI: c.Host.Activity + _activitySubject,
- ActProtocolURI: c.Host.Act + _activityProtocol,
- ActOnlineByTypeURL: c.Host.Activity + _actOnlineByTypeURI,
- ActLikeURI: c.Host.Activity + _actLike,
- }
- return
- }
- // MissionOnlineByTid fn
- func (d *Dao) MissionOnlineByTid(c context.Context, tid, plat int16) (mm []*activity.ActWithTP, err error) {
- var res struct {
- Code int `json:"code"`
- Data []*activity.ActWithTP `json:"data"`
- }
- mm = make([]*activity.ActWithTP, 0)
- params := url.Values{}
- params.Set("type", strconv.Itoa(int(tid)))
- params.Set("plat", strconv.Itoa(int(plat)))
- if err = d.client.Get(c, d.ActOnlineByTypeURL, "", params, &res); err != nil {
- log.Error("videoup ActOnlineByTypeURL error(%v) | ActOnlineByTypeURL(%s)", err, d.ActOnlineByTypeURL+"?"+params.Encode())
- err = ecode.CreativeActivityErr
- return
- }
- if res.Code != 0 {
- log.Error("videoup ActOnlineByTypeURL res.Code nq zero error(%v) | ActOnlineByTypeURL(%s) res(%v)", res.Code, d.ActOnlineByTypeURL+"?"+params.Encode(), res)
- err = ecode.CreativeActivityErr
- return
- }
- for _, m := range res.Data {
- miss := &activity.ActWithTP{
- ID: m.ID,
- Name: m.Name,
- Hot: m.Hot,
- Protocol: m.Protocol,
- Types: m.Types,
- }
- if len(m.Tags) > 0 {
- miss.Tags = strings.Split(m.Tags, ",")[0]
- } else {
- miss.Tags = m.Name
- }
- if m.Type == 16 && len(m.ActURL) == 0 {
- miss.ActURL = _actURLType16 + strconv.FormatInt(miss.ID, 10)
- } else {
- miss.ActURL = m.ActURL
- }
- mm = append(mm, miss)
- }
- return
- }
- // Activities get activity list.
- func (d *Dao) Activities(c context.Context) (act []*activity.Activity, err error) {
- var (
- url string
- res struct {
- Code int `json:"code"`
- Data []*activity.Activity `json:"data"`
- }
- )
- url = d.ActAllListURI
- if err = d.client.Get(c, url, "", nil, &res); err != nil {
- log.Error("ActivityList url(%s) response(%v) error(%v)", url, res, err)
- err = ecode.CreativeActivityErr
- return
- }
- if res.Code != 0 {
- log.Error("ActivityList url(%s) res(%v)", url, res)
- err = ecode.CreativeActivityErr
- return
- }
- for _, v := range res.Data {
- if v.Type == 16 && len(v.ActURL) == 0 {
- v.ActURL = _actURLType16 + strconv.FormatInt(v.ID, 10)
- }
- }
- act = res.Data
- return
- }
- // Unbind update the aid a status of this activity
- func (d *Dao) Unbind(c context.Context, aid, missionID int64, ip string) (err error) {
- params := url.Values{}
- params.Set("mission_id", strconv.FormatInt(missionID, 10))
- params.Set("aid", strconv.FormatInt(aid, 10))
- params.Set("state", "-1")
- ms := json.RawMessage{}
- if err = d.client.RESTfulPost(c, d.ActUpdateURI, ip, params, &ms, missionID); err != nil {
- log.Error("ActUpdateURI url(%s) missionID(%d) error(%v)", d.ActUpdateURI, missionID, err)
- err = ecode.CreativeActivityErr
- return
- }
- log.Info("d.UpdateByAid url(%s) params(%s) res(%s)", d.ActUpdateURI, params.Encode(), string(ms))
- return
- }
- //Subject get any exist activity by missionID
- func (d *Dao) Subject(c context.Context, missionID int64) (sub *activity.Activity, err error) {
- var res struct {
- Code int `json:"code"`
- Data *activity.Subject `json:"data"`
- }
- if err = d.client.RESTfulGet(c, d.ActSubjectURI, "", url.Values{}, &res, missionID); err != nil {
- log.Error("ActSubjectURI url(%s) missionID(%d) error(%v)", d.ActSubjectURI, missionID, err)
- err = ecode.CreativeActivityErr
- return
- }
- if res.Code != 0 {
- log.Error("ActSubjectURI url(%s) res(%v)", d.ActSubjectURI, res)
- err = ecode.CreativeActivityErr
- return
- }
- var ID int
- if ID, err = strconv.Atoi(res.Data.ID); err != nil {
- log.Error("ActSubjectURI url(%s) res(%v)", d.ActSubjectURI, res)
- err = ecode.CreativeActivityErr
- return
- }
- sub = &activity.Activity{
- Name: res.Data.Name,
- ID: int64(ID),
- }
- return
- }
- // Protocol fn
- func (d *Dao) Protocol(c context.Context, missionID int64) (p *activity.Protocol, err error) {
- var res struct {
- Code int `json:"code"`
- Data *activity.Protocol `json:"data"`
- }
- if err = d.client.RESTfulGet(c, d.ActProtocolURI, "", url.Values{}, &res, missionID); err != nil {
- log.Error("ActProtocolURI url(%s) missionID(%d) error(%v)", d.ActProtocolURI, missionID, err)
- err = ecode.CreativeActivityErr
- return
- }
- if res.Code != 0 {
- log.Error("ActProtocolURI url(%s) res(%v)", d.ActProtocolURI, res)
- err = ecode.CreativeActivityErr
- return
- }
- p = res.Data
- return
- }
- //Likes fn
- func (d *Dao) Likes(c context.Context, missionID int64) (likeCnt int, err error) {
- var res struct {
- Code int `json:"code"`
- Data *activity.Like `json:"data"`
- }
- if err = d.client.RESTfulGet(c, d.ActLikeURI, "", url.Values{}, &res, missionID); err != nil {
- log.Error("ActLikeURI url(%s) missionID(%d) error(%v)", d.ActLikeURI, missionID, err)
- err = ecode.CreativeActivityErr
- return
- }
- if res.Code != 0 {
- log.Error("ActLikeURI url(%s) res(%v)", d.ActLikeURI, res)
- err = ecode.CreativeActivityErr
- return
- }
- if res.Data != nil {
- likeCnt = res.Data.Count
- }
- return
- }
|