Files
Datarush/internal/gw/grpc_client/results_client.go
T
2025-12-17 11:00:50 +03:00

59 lines
1.5 KiB
Go

package grpc_client
import (
"context"
"fmt"
pb "datarush/pkg/api/results"
"google.golang.org/grpc"
)
type ResultsClient struct {
client pb.ResultsServiceClient
conn *grpc.ClientConn
}
func NewResultsClient(ctx context.Context, address string, factory *ClientFactory) (*ResultsClient, error) {
conn, err := factory.GetConnection(ctx, address)
if err != nil {
return nil, fmt.Errorf("failed to create results client: %w", err)
}
return &ResultsClient{client: pb.NewResultsServiceClient(conn), conn: conn}, nil
}
func (c *ResultsClient) GetCompetitionResults(
ctx context.Context,
req *pb.GetCompetitionResultsRequest,
) (*pb.GetCompetitionResultsResponse, error) {
resp, err := c.client.GetCompetitionResults(ctx, req)
if err != nil {
return nil, fmt.Errorf("get competition results failed: %w", err)
}
return resp, nil
}
func (c *ResultsClient) GetUserCompetitionResults(
ctx context.Context,
competitionID, userID string,
) (*pb.UserResult, error) {
req := &pb.GetUserCompetitionResultsRequest{
CompetitionId: competitionID,
UserId: userID,
}
resp, err := c.client.GetUserCompetitionResults(ctx, req)
if err != nil {
return nil, fmt.Errorf("get user competition results failed: %w", err)
}
return resp.Result, nil
}
func (c *ResultsClient) RecalculateResults(ctx context.Context, competitionID string) error {
req := &pb.RecalculateResultsRequest{CompetitionId: competitionID}
_, err := c.client.RecalculateResults(ctx, req)
if err != nil {
return fmt.Errorf("recalculate results failed: %w", err)
}
return nil
}