104 lines
2.6 KiB
Go
104 lines
2.6 KiB
Go
|
package favorite
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"net/url"
|
||
|
|
||
|
"go-common/app/interface/main/tv/conf"
|
||
|
"go-common/app/interface/main/tv/model"
|
||
|
favrpc "go-common/app/service/main/favorite/api/gorpc"
|
||
|
favmdl "go-common/app/service/main/favorite/model"
|
||
|
"go-common/library/ecode"
|
||
|
"go-common/library/log"
|
||
|
bm "go-common/library/net/http/blademaster"
|
||
|
"go-common/library/net/metadata"
|
||
|
|
||
|
"github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
// Dao is account dao.
|
||
|
type Dao struct {
|
||
|
favRPC *favrpc.Service // rpc
|
||
|
conf *conf.Config
|
||
|
client *bm.Client
|
||
|
}
|
||
|
|
||
|
// New account dao.
|
||
|
func New(c *conf.Config) (d *Dao) {
|
||
|
d = &Dao{
|
||
|
favRPC: favrpc.New2(c.FavoriteRPC),
|
||
|
conf: c,
|
||
|
client: bm.NewClient(c.HTTPClient),
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
const (
|
||
|
_FavBusiness = 2
|
||
|
_DefaultFav = 0
|
||
|
)
|
||
|
|
||
|
// FavoriteV3 picks favorite info from rpc
|
||
|
func (d *Dao) FavoriteV3(ctx context.Context, mid int64, pn int) (res *favmdl.Favorites, err error) {
|
||
|
var ip = metadata.String(ctx, metadata.RemoteIP)
|
||
|
arg := &favmdl.ArgFavs{
|
||
|
Type: _FavBusiness,
|
||
|
Mid: mid,
|
||
|
Fid: _DefaultFav,
|
||
|
Tv: 1,
|
||
|
Pn: pn,
|
||
|
Ps: d.conf.Cfg.FavPs,
|
||
|
RealIP: ip,
|
||
|
}
|
||
|
if res, err = d.favRPC.Favorites(ctx, arg); err != nil {
|
||
|
err = errors.Wrapf(err, "%v", arg)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// favAct adds/deletes favorite into/from the default folder
|
||
|
func (d *Dao) favAct(ctx context.Context, mid int64, aid int64, host string) (err error) {
|
||
|
var (
|
||
|
ip = metadata.String(ctx, metadata.RemoteIP)
|
||
|
params = url.Values{}
|
||
|
res = model.RespFavAct{}
|
||
|
)
|
||
|
params.Set("mid", fmt.Sprintf("%d", mid))
|
||
|
params.Set("aid", fmt.Sprintf("%d", aid))
|
||
|
if err = d.client.Post(ctx, host, ip, params, &res); err != nil {
|
||
|
log.Error("FavAdd Aid %d, Mid %d, Err %v", aid, mid, err)
|
||
|
return
|
||
|
}
|
||
|
if res.Code != ecode.OK.Code() {
|
||
|
err = errors.Wrap(ecode.Int(res.Code), fmt.Sprintf("Fav AID %d, Mid %d, API Error %s", aid, mid, res.Message))
|
||
|
log.Error("FavAdd ERROR:%v, URL: %s", err, host+"?"+params.Encode())
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// FavAdd def.
|
||
|
func (d *Dao) FavAdd(ctx context.Context, mid, aid int64) (err error) {
|
||
|
host := d.conf.Host.FavAdd
|
||
|
return d.favAct(ctx, mid, aid, host)
|
||
|
}
|
||
|
|
||
|
// FavDel deletes favorite from the default folder
|
||
|
func (d *Dao) FavDel(ctx context.Context, mid int64, aid int64) (err error) {
|
||
|
host := d.conf.Host.FavDel
|
||
|
return d.favAct(ctx, mid, aid, host)
|
||
|
}
|
||
|
|
||
|
// InDefault returns whether the aid is in Default of Mid
|
||
|
func (d *Dao) InDefault(ctx context.Context, mid int64, aid int64) (bool, error) {
|
||
|
var ip = metadata.String(ctx, metadata.RemoteIP)
|
||
|
arg := &favmdl.ArgInDefaultFolder{
|
||
|
Type: _FavBusiness,
|
||
|
Mid: mid,
|
||
|
RealIP: ip,
|
||
|
Oid: aid,
|
||
|
}
|
||
|
return d.favRPC.InDefault(ctx, arg)
|
||
|
}
|