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 }