package transport import ( "context" "git.sch9.ru/new_gate/ms-tester/internal/models" problemv1 "git.sch9.ru/new_gate/ms-tester/pkg/go/gen/proto/problem/v1" sessionv1 "git.sch9.ru/new_gate/ms-tester/pkg/go/gen/proto/session/v1" "go.uber.org/zap" "google.golang.org/protobuf/types/known/timestamppb" "time" "google.golang.org/grpc" ) type ProblemService interface { CreateProblem(ctx context.Context, problem *models.Problem, ch <-chan []byte) (int32, error) // FIXME: specify chan type ReadProblemById(ctx context.Context, id int32) (*models.Problem, error) UpdateProblem(ctx context.Context, problem *models.Problem) error DeleteProblem(ctx context.Context, id int32) error } type SessionClient interface { Read(ctx context.Context, in *sessionv1.ReadSessionRequest, opts ...grpc.CallOption, ) (*sessionv1.ReadSessionResponse, error) } type TesterServer struct { problemv1.UnimplementedProblemServiceServer problemService ProblemService sessionClient SessionClient grpcServer *grpc.Server logger *zap.Logger } func NewTesterServer( problemService ProblemService, sessionClient SessionClient, logger *zap.Logger, ) *TesterServer { server := &TesterServer{ problemService: problemService, sessionClient: sessionClient, logger: logger, } grpcServer := grpc.NewServer( grpc.UnaryInterceptor(server.AuthInterceptor()), ) problemv1.RegisterProblemServiceServer(grpcServer, server) return server } func AsTimeP(t *timestamppb.Timestamp) *time.Time { if t == nil { return nil } tt := t.AsTime() return &tt } func AsTimestampP(t *time.Time) *timestamppb.Timestamp { if t == nil { return nil } return timestamppb.New(*t) }