Skip to content

Commit

Permalink
feat: Add team members statistics API
Browse files Browse the repository at this point in the history
  • Loading branch information
ValentinTrinque committed Dec 8, 2023
1 parent c744032 commit 2b3e06e
Show file tree
Hide file tree
Showing 18 changed files with 4,205 additions and 2,241 deletions.
37 changes: 37 additions & 0 deletions datanode/api/trading_data_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -4634,6 +4634,43 @@ func (t *TradingDataServiceV2) ListTeamsStatistics(ctx context.Context, req *v2.
}, nil
}

func (t *TradingDataServiceV2) ListTeamMembersStatistics(ctx context.Context, req *v2.ListTeamMembersStatisticsRequest) (*v2.ListTeamMembersStatisticsResponse, error) {
defer metrics.StartAPIRequestAndTimeGRPC("ListTeamMembersStatistics")()

pagination, err := entities.CursorPaginationFromProto(req.Pagination)
if err != nil {
return nil, formatE(ErrInvalidPagination, err)
}

filters := sqlstore.ListTeamMembersStatisticsFilters{
AggregationEpochs: 10,
}

if req.PartyId != nil {
filters.PartyID = ptr.From(entities.PartyID(*req.PartyId))
}
if req.AggregationEpochs != nil {
filters.AggregationEpochs = *req.AggregationEpochs
}

stats, pageInfo, err := t.teamsService.ListTeamMembersStatistics(ctx, pagination, filters)
if err != nil {
return nil, formatE(ErrListTeamReferees, err)
}

edges, err := makeEdges[*v2.TeamMemberStatisticsEdge](stats)
if err != nil {
return nil, formatE(err)
}

return &v2.ListTeamMembersStatisticsResponse{
Statistics: &v2.TeamMembersStatisticsConnection{
Edges: edges,
PageInfo: pageInfo.ToProto(),
},
}, nil
}

func (t *TradingDataServiceV2) ListTeamReferees(ctx context.Context, req *v2.ListTeamRefereesRequest) (*v2.ListTeamRefereesResponse, error) {
defer metrics.StartAPIRequestAndTimeGRPC("ListTeamReferees")()
pagination, err := entities.CursorPaginationFromProto(req.Pagination)
Expand Down
2 changes: 1 addition & 1 deletion datanode/entities/entities.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ type Entities interface {
ProtocolUpgradeProposal | CoreSnapshotData | EpochRewardSummary | SuccessorMarket | StopOrder |
LiquidityProvider | FundingPeriod | FundingPeriodDataPoint | ReferralSet | ReferralSetRefereeStats |
FlattenReferralSetStats | Team | TeamMember | TeamMemberHistory | FundingPayment | FlattenVolumeDiscountStats |
PaidLiquidityFeesStats | CurrentAndPreviousLiquidityProvisions | TransferDetails | Game | TeamsStatistics
PaidLiquidityFeesStats | CurrentAndPreviousLiquidityProvisions | TransferDetails | Game | TeamsStatistics | TeamMembersStatistics
}

type PagedEntity[T proto.Message] interface {
Expand Down
65 changes: 65 additions & 0 deletions datanode/entities/teams.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,71 @@ func (c *TeamsStatisticsCursor) Parse(cursorString string) error {
return json.Unmarshal([]byte(cursorString), c)
}

type TeamMembersStatistics struct {
PartyID PartyID
TotalQuantumRewards num.Decimal
QuantumRewards []QuantumRewardsPerEpoch
TotalGamesPlayed uint64
GamesPlayed []GameID
}

func (t TeamMembersStatistics) Cursor() *Cursor {
tc := TeamMemberStatisticsCursor{
ID: t.PartyID,
}
return NewCursor(tc.String())
}

func (t TeamMembersStatistics) ToProto() *v2.TeamMemberStatistics {
gamesPlayed := make([]string, 0, len(t.GamesPlayed))
for _, id := range t.GamesPlayed {
gamesPlayed = append(gamesPlayed, id.String())
}

quantumRewards := make([]*v2.QuantumRewardsPerEpoch, 0, len(t.QuantumRewards))
for _, r := range t.QuantumRewards {
quantumRewards = append(quantumRewards, &v2.QuantumRewardsPerEpoch{
Epoch: r.Epoch,
TotalQuantumRewards: r.Total.String(),
})
}

return &v2.TeamMemberStatistics{
PartyId: string(t.PartyID),
TotalQuantumVolume: "",
TotalQuantumRewards: t.TotalQuantumRewards.String(),
QuantumRewards: quantumRewards,
TotalGamePlayed: t.TotalGamesPlayed,
GamesPlayed: gamesPlayed,
}
}

func (t TeamMembersStatistics) ToProtoEdge(_ ...any) (*v2.TeamMemberStatisticsEdge, error) {
return &v2.TeamMemberStatisticsEdge{
Node: t.ToProto(),
Cursor: t.Cursor().Encode(),
}, nil
}

type TeamMemberStatisticsCursor struct {
ID PartyID
}

func (c TeamMemberStatisticsCursor) String() string {
bs, err := json.Marshal(c)
if err != nil {
panic(fmt.Errorf("could not marshal team member stats cursor: %v", err))
}
return string(bs)
}

func (c *TeamMemberStatisticsCursor) Parse(cursorString string) error {
if cursorString == "" {
return nil
}
return json.Unmarshal([]byte(cursorString), c)
}

type TeamMember struct {
TeamID TeamID
PartyID PartyID
Expand Down
Loading

0 comments on commit 2b3e06e

Please sign in to comment.