You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
213 lines
6.1 KiB
213 lines
6.1 KiB
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 |
|
}
|
|
|