go-common/app/admin/main/relation/service/relations.go

116 lines
2.7 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package service
import (
"context"
"go-common/app/admin/main/relation/model"
relationPB "go-common/app/service/main/relation/api"
)
// Followers is.
func (s *Service) Followers(ctx context.Context, param *model.FollowersParam) (*model.FollowersListPage, error) {
list, err := s.dao.Followers(ctx, param.Fid, param.Mid)
if err != nil {
return nil, err
}
list.OrderByMTime(param.Desc())
from, err := model.ParseTime(param.MTimeFrom)
if err == nil {
list = list.FilterMTimeFrom(from)
}
to, err := model.ParseTime(param.MTimeTo)
if err == nil {
list = list.FilterMTimeTo(to)
}
plist := list.Paginate(param.PS*(param.PN-1), param.PS)
flist := plist.FollowersList()
uids := make([]int64, 0, len(flist)*2)
for _, r := range flist {
uids = append(uids, r.Mid)
uids = append(uids, r.Fid)
}
uinfos, err := s.dao.RPCInfos(ctx, uids)
if err != nil {
return nil, err
}
for _, r := range flist {
if mi, ok := uinfos[r.Mid]; ok {
r.MemberName = mi.Name
}
}
for _, r := range flist {
if fi, ok := uinfos[r.Fid]; ok {
r.FollowerName = fi.Name
}
}
page := &model.FollowersListPage{}
page.Sort = param.Sort
page.Order = param.Order
page.List = flist
page.TotalCount = len(list)
page.PN = param.PN
page.PS = param.PS
return page, nil
}
// Followings is.
func (s *Service) Followings(ctx context.Context, param *model.FollowingsParam) (*model.FollowingsListPage, error) {
list, err := s.dao.Followings(ctx, param.Mid, param.Fid)
if err != nil {
return nil, err
}
list.OrderByMTime(param.Desc())
from, err := model.ParseTime(param.MTimeFrom)
if err == nil {
list = list.FilterMTimeFrom(from)
}
to, err := model.ParseTime(param.MTimeTo)
if err == nil {
list = list.FilterMTimeTo(to)
}
plist := list.Paginate(param.PS*(param.PN-1), param.PS)
flist := plist.FollowingsList()
uids := make([]int64, 0, len(flist)*2)
for _, r := range flist {
uids = append(uids, r.Mid)
uids = append(uids, r.Fid)
}
minfos, err := s.dao.RPCInfos(ctx, uids)
if err != nil {
return nil, err
}
for _, r := range flist {
if mi, ok := minfos[r.Mid]; ok {
r.MemberName = mi.Name
}
}
for _, r := range flist {
if fi, ok := minfos[r.Fid]; ok {
r.FollowingName = fi.Name
}
}
page := &model.FollowingsListPage{}
page.Sort = param.Sort
page.Order = param.Order
page.List = flist
page.TotalCount = len(list)
page.PN = param.PN
page.PS = param.PS
return page, nil
}
// Stat is
func (s *Service) Stat(ctx context.Context, param *model.ArgMid) (*relationPB.StatReply, error) {
return s.dao.Stat(ctx, param.Mid)
}
// Stats is
func (s *Service) Stats(ctx context.Context, param *model.ArgMids) (map[int64]*relationPB.StatReply, error) {
return s.dao.Stats(ctx, param.Mids)
}