116 lines
2.7 KiB
Go
116 lines
2.7 KiB
Go
|
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)
|
||
|
}
|