2026-06-16 17:00:06 +08:00

65 lines
2.0 KiB
Go

package client
import (
"context"
"google.golang.org/grpc"
userv1 "hyapp.local/api/proto/user/v1"
"hyapp/pkg/appcode"
domain "hyapp/services/activity-service/internal/domain/cpweeklyrank"
)
// GRPCCPWeeklyRankSource reads CP weekly rank snapshots from user-service, the owner of CP relationship facts.
type GRPCCPWeeklyRankSource struct {
client userv1.UserCPInternalServiceClient
}
func NewGRPCCPWeeklyRankSource(conn *grpc.ClientConn) *GRPCCPWeeklyRankSource {
return &GRPCCPWeeklyRankSource{client: userv1.NewUserCPInternalServiceClient(conn)}
}
func (s *GRPCCPWeeklyRankSource) ListCPWeeklyRankEntries(ctx context.Context, relationType string, startMS int64, endMS int64, limit int32) ([]domain.Entry, error) {
resp, err := s.client.ListCPWeeklyRankEntries(ctx, &userv1.ListCPWeeklyRankEntriesRequest{
Meta: &userv1.RequestMeta{
RequestId: "cp-weekly-rank",
Caller: "activity-service",
AppCode: appcode.FromContext(ctx),
},
RelationType: relationType,
StartMs: startMS,
EndMs: endMS,
Limit: limit,
})
if err != nil {
return nil, err
}
entries := make([]domain.Entry, 0, len(resp.GetEntries()))
for _, item := range resp.GetEntries() {
entries = append(entries, domain.Entry{
Rank: item.GetRank(),
RelationshipID: item.GetRelationshipId(),
RelationType: item.GetRelationType(),
Score: item.GetScore(),
UserA: cpWeeklyRankUserFromProto(item.GetUserA()),
UserB: cpWeeklyRankUserFromProto(item.GetUserB()),
FormedAtMS: item.GetFormedAtMs(),
UpdatedAtMS: item.GetUpdatedAtMs(),
FirstScoredAtMS: item.GetFirstScoredAtMs(),
LastScoredAtMS: item.GetLastScoredAtMs(),
})
}
return entries, nil
}
func cpWeeklyRankUserFromProto(user *userv1.CPIntimacyLeaderboardUser) domain.User {
if user == nil {
return domain.User{}
}
return domain.User{
UserID: user.GetUserId(),
DisplayUserID: user.GetDisplayUserId(),
Username: user.GetUsername(),
Avatar: user.GetAvatar(),
}
}