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.
115 lines
2.7 KiB
115 lines
2.7 KiB
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) |
|
}
|
|
|