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

86 lines
2.0 KiB
Go

package grpc_client
import (
"context"
"fmt"
pb "datarush/pkg/api/submission"
"google.golang.org/grpc"
)
type SubmissionClient struct {
client pb.SubmissionServiceClient
conn *grpc.ClientConn
}
func NewSubmissionClient(ctx context.Context, address string, factory *ClientFactory) (*SubmissionClient, error) {
conn, err := factory.GetConnection(ctx, address)
if err != nil {
return nil, fmt.Errorf("failed to create submission client: %w", err)
}
return &SubmissionClient{
client: pb.NewSubmissionServiceClient(conn),
conn: conn,
}, nil
}
func (c *SubmissionClient) SubmitTask(
ctx context.Context,
userID, competitionID, taskID, fileURL string,
) (*pb.Submission, error) {
req := &pb.SubmitTaskRequest{
UserId: userID,
CompetitionId: competitionID,
TaskId: taskID,
FileUrl: fileURL,
}
resp, err := c.client.SubmitTask(ctx, req)
if err != nil {
return nil, fmt.Errorf("submit task failed: %w", err)
}
return resp, nil
}
func (c *SubmissionClient) GetSubmissionsHistory(
ctx context.Context,
userID, competitionID, taskID string,
) ([]*pb.Submission, error) {
req := &pb.GetSubmissionsHistoryRequest{
UserId: userID,
CompetitionId: competitionID,
TaskId: taskID,
}
resp, err := c.client.GetSubmissionsHistory(ctx, req)
if err != nil {
return nil, fmt.Errorf("get submissions history failed: %w", err)
}
return resp.Submissions, nil
}
func (c *SubmissionClient) GetSubmission(ctx context.Context, submissionID string) (*pb.Submission, error) {
req := &pb.GetSubmissionRequest{
SubmissionId: submissionID,
}
resp, err := c.client.GetSubmission(ctx, req)
if err != nil {
return nil, fmt.Errorf("get submission failed: %w", err)
}
return resp, nil
}
func (c *SubmissionClient) ListSubmissions(
ctx context.Context,
req *pb.ListSubmissionsRequest,
) (*pb.ListSubmissionsResponse, error) {
resp, err := c.client.ListSubmissions(ctx, req)
if err != nil {
return nil, fmt.Errorf("list submissions failed: %w", err)
}
return resp, nil
}