2019-04-22 02:59:20 +00:00

142 lines
4.0 KiB
Go

package grpc
import (
"context"
pb "go-common/app/service/main/thumbup/api"
"go-common/app/service/main/thumbup/model"
"go-common/app/service/main/thumbup/service"
"go-common/library/net/rpc/warden"
"github.com/golang/protobuf/ptypes/empty"
)
// New Coin warden rpc server
func New(c *warden.ServerConfig, svr *service.Service) *warden.Server {
ws := warden.NewServer(c)
pb.RegisterThumbupServer(ws.Server(), &server{s: svr})
ws, err := ws.Start()
if err != nil {
panic(err)
}
return ws
}
type server struct {
s *service.Service
}
func (r server) Like(c context.Context, req *pb.LikeReq) (reply *pb.LikeReply, err error) {
res, err := r.s.Like(c, req.Business, req.Mid, req.OriginID, req.MessageID, int8(req.Action), req.UpMid)
reply = &pb.LikeReply{
OriginID: res.OriginID,
MessageID: res.ID,
LikeNumber: res.Likes,
DislikeNumber: res.Dislikes,
}
return
}
func (r server) Stats(c context.Context, req *pb.StatsReq) (reply *pb.StatsReply, err error) {
res, err := r.s.StatsWithLike(c, req.Business, req.Mid, req.OriginID, req.MessageIds)
reply = &pb.StatsReply{Stats: map[int64]*pb.StatState{}}
for name, item := range res {
reply.Stats[name] = &pb.StatState{
OriginID: item.OriginID,
MessageID: item.ID,
LikeNumber: item.Likes,
DislikeNumber: item.Dislikes,
LikeState: pb.State(item.LikeState),
}
}
return
}
func (r server) MultiStats(c context.Context, req *pb.MultiStatsReq) (reply *pb.MultiStatsReply, err error) {
arg := &model.MultiBusiness{
Mid: req.Mid,
Businesses: make(map[string][]*model.MultiBusinessItem),
}
for name, b := range req.Business {
for _, i := range b.Records {
arg.Businesses[name] = append(arg.Businesses[name], &model.MultiBusinessItem{
OriginID: i.OriginID,
MessageID: i.MessageID,
})
}
}
res, err := r.s.MultiStatsWithLike(c, arg)
reply = &pb.MultiStatsReply{}
if res != nil {
reply.Business = make(map[string]*pb.MultiStatsReply_Records)
for k, v := range res {
items := &pb.MultiStatsReply_Records{
Records: make(map[int64]*pb.StatState),
}
for id, state := range v {
items.Records[id] = &pb.StatState{
OriginID: state.OriginID,
MessageID: state.ID,
LikeNumber: state.Likes,
DislikeNumber: state.Dislikes,
LikeState: pb.State(state.LikeState),
}
}
reply.Business[k] = items
}
}
return
}
func (r server) HasLike(c context.Context, req *pb.HasLikeReq) (reply *pb.HasLikeReply, err error) {
_, res, err := r.s.HasLike(c, req.Business, req.Mid, req.MessageIds)
reply = &pb.HasLikeReply{States: res}
return
}
func (r server) UserLikes(c context.Context, req *pb.UserLikesReq) (reply *pb.UserLikesReply, err error) {
res, err := r.s.UserTotalLike(c, req.Business, req.Mid, int(req.Pn), int(req.Ps))
reply = &pb.UserLikesReply{}
if res != nil {
reply.Total = int64(res.Total)
for _, item := range res.List {
reply.Items = append(reply.Items, &pb.ItemRecord{
MessageID: item.MessageID,
Time: item.Time,
})
}
}
return
}
func (r server) ItemLikes(c context.Context, req *pb.ItemLikesReq) (reply *pb.ItemLikesReply, err error) {
res, err := r.s.ItemLikes(c, req.Business, req.OriginID, req.MessageID, int(req.Pn), int(req.Ps), req.LastMid)
reply = &pb.ItemLikesReply{}
for _, item := range res {
reply.Users = append(reply.Users, &pb.UserRecord{
Mid: item.Mid,
Time: item.Time,
})
}
return
}
func (r server) UpdateCount(c context.Context, req *pb.UpdateCountReq) (reply *empty.Empty, err error) {
reply = &empty.Empty{}
err = r.s.UpdateCount(c, req.Business, req.OriginID, req.MessageID, req.LikeChange, req.DislikeChange, req.IP, req.Operator)
return
}
func (r server) RawStat(c context.Context, req *pb.RawStatReq) (reply *pb.RawStatReply, err error) {
res, err := r.s.RawStats(c, req.Business, req.OriginID, req.MessageID)
reply = &pb.RawStatReply{
OriginID: res.OriginID,
MessageID: res.ID,
LikeNumber: res.Likes,
DislikeNumber: res.Dislikes,
LikeChange: res.LikesChange,
DislikeChange: res.DislikesChange,
}
return
}