package grpc_client import ( "context" "fmt" pb "datarush/pkg/api/review" "google.golang.org/grpc" ) type ReviewClient struct { client pb.ReviewServiceClient conn *grpc.ClientConn } func NewReviewClient(ctx context.Context, address string, factory *ClientFactory) (*ReviewClient, error) { conn, err := factory.GetConnection(ctx, address) if err != nil { return nil, fmt.Errorf("failed to create review client: %w", err) } return &ReviewClient{client: pb.NewReviewServiceClient(conn), conn: conn}, nil } func (c *ReviewClient) ValidateReviewToken(ctx context.Context, token string) (*pb.ValidateReviewTokenResponse, error) { req := &pb.ValidateReviewTokenRequest{Token: token} resp, err := c.client.ValidateReviewToken(ctx, req) if err != nil { return nil, fmt.Errorf("validate review token failed: %w", err) } return resp, nil } func (c *ReviewClient) ListSubmissionsForReview( ctx context.Context, req *pb.ListSubmissionsForReviewRequest, ) (*pb.ListSubmissionsForReviewResponse, error) { resp, err := c.client.ListSubmissionsForReview(ctx, req) if err != nil { return nil, fmt.Errorf("list submissions for review failed: %w", err) } return resp, nil } func (c *ReviewClient) GetSubmissionForReview( ctx context.Context, token, submissionID string, ) (*pb.SubmissionForReview, error) { req := &pb.GetSubmissionForReviewRequest{ Token: token, SubmissionId: submissionID, } resp, err := c.client.GetSubmissionForReview(ctx, req) if err != nil { return nil, fmt.Errorf("get submission for review failed: %w", err) } return resp, nil } func (c *ReviewClient) EvaluateSubmission( ctx context.Context, req *pb.EvaluateSubmissionRequest, ) (*pb.EvaluateSubmissionResponse, error) { resp, err := c.client.EvaluateSubmission(ctx, req) if err != nil { return nil, fmt.Errorf("evaluate submission failed: %w", err) } return resp, nil } func (c *ReviewClient) ReleaseSubmission(ctx context.Context, token, submissionID string) error { req := &pb.ReleaseSubmissionRequest{ Token: token, SubmissionId: submissionID, } _, err := c.client.ReleaseSubmission(ctx, req) if err != nil { return fmt.Errorf("release submission failed: %w", err) } return nil }