123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package service
- import (
- "context"
- "go-common/app/interface/openplatform/article/dao"
- artmdl "go-common/app/interface/openplatform/article/model"
- favmdl "go-common/app/service/main/favorite/model"
- "go-common/library/log"
- )
- // AddFavorite add article favorite .
- func (s *Service) AddFavorite(c context.Context, mid, aid, fid int64, ip string) (err error) {
- if err = s.checkArticle(c, aid); err != nil {
- return
- }
- arg := &favmdl.ArgAdd{Type: favmdl.Article, Mid: mid, Oid: aid, Fid: fid}
- if err = s.favRPC.Add(c, arg); err != nil {
- dao.PromError("rpc:添加收藏")
- log.Error("s.favRPC.Add(%+v) error(%+v)", arg, err)
- }
- return
- }
- // DelFavorite del article favorite .
- func (s *Service) DelFavorite(c context.Context, mid, aid, fid int64, ip string) (err error) {
- arg := &favmdl.ArgDel{Type: favmdl.Article, Mid: mid, Oid: aid, Fid: fid}
- if err = s.favRPC.Del(c, arg); err != nil {
- dao.PromError("rpc:删除收藏")
- log.Error("s.favRPC.Del(%+v) error(%+v)", arg, err)
- }
- return
- }
- // Favorites article favorites.
- func (s *Service) Favorites(c context.Context, mid, fid int64, pn, ps int, ip string) (favs *favmdl.Favorites, err error) {
- arg := &favmdl.ArgFavs{Type: favmdl.Article, Mid: mid, Fid: fid, Pn: pn, Ps: ps}
- if favs, err = s.favRPC.Favorites(c, arg); err != nil {
- dao.PromError("rpc:获取收藏列表")
- log.Error("s.favRPC.Favorites(%+v) error(%+v)", arg, err)
- }
- return
- }
- // IsFav return user is fav article
- func (s *Service) IsFav(c context.Context, mid, aid int64) (res bool, err error) {
- arg := &favmdl.ArgIsFav{Type: favmdl.Article, Mid: mid, Oid: aid}
- if res, err = s.favRPC.IsFav(c, arg); err != nil {
- dao.PromError("rpc:是否已收藏")
- log.Error("s.favRPC.IsFav(%+v) error(%+v)", arg, err)
- }
- return
- }
- // Favs gets user favorite article list.
- func (s *Service) Favs(c context.Context, mid, fid int64, pn, ps int, ip string) (favs []*artmdl.Favorite, page *artmdl.Page, err error) {
- var (
- a *artmdl.Meta
- ok bool
- fs *favmdl.Favorites
- aids []int64
- as = make(map[int64]*artmdl.Meta)
- ts = make(map[int64]int64)
- )
- favs = make([]*artmdl.Favorite, 0)
- if fs, err = s.Favorites(c, mid, fid, pn, ps, ip); err != nil {
- return
- }
- page = &artmdl.Page{
- Pn: fs.Page.Num,
- Ps: fs.Page.Size,
- Total: fs.Page.Count,
- }
- if len(fs.List) == 0 {
- return
- }
- aids = make([]int64, 0, len(fs.List))
- for _, v := range fs.List {
- aids = append(aids, v.Oid)
- ts[v.Oid] = v.MTime.Time().Unix()
- }
- if as, err = s.ArticleMetas(c, aids); err != nil {
- return
- }
- for _, aid := range aids {
- var (
- valid = true
- meta *artmdl.Meta
- )
- if a, ok = as[aid]; !ok {
- meta = &artmdl.Meta{ID: aid}
- valid = false
- } else {
- meta = a
- }
- favs = append(favs, &artmdl.Favorite{
- Meta: meta,
- FavoriteTime: ts[aid],
- Valid: valid,
- })
- }
- return
- }
- // ValidFavs get valid favorites
- func (s *Service) ValidFavs(c context.Context, mid, fid int64, pn, ps int, ip string) (res []*artmdl.Favorite, page *artmdl.Page, err error) {
- defer func() {
- if res == nil {
- res = make([]*artmdl.Favorite, 0)
- }
- }()
- var favs []*artmdl.Favorite
- if favs, page, err = s.Favs(c, mid, fid, pn, ps, ip); err != nil {
- return
- }
- for _, fav := range favs {
- if fav.Valid {
- res = append(res, fav)
- }
- }
- if page.Total <= ps {
- page.Total -= (len(favs) - len(res))
- }
- return
- }
|