Files
query-orchestration/api/controllers/query.go
T

145 lines
3.3 KiB
Go
Raw Normal View History

2025-01-07 13:01:14 +00:00
package controllers
import (
"context"
2025-01-03 13:41:07 +00:00
"queryorchestration/api/grpc/spec"
2025-01-07 13:01:14 +00:00
serviceinterfaces "queryorchestration/api/serviceInterfaces"
"queryorchestration/internal/query"
2025-01-03 13:41:07 +00:00
queryprocessor "queryorchestration/internal/queryProcessor"
2025-01-07 13:01:14 +00:00
"github.com/go-playground/validator/v10"
2025-01-02 16:07:35 +00:00
"github.com/google/uuid"
2025-01-07 13:01:14 +00:00
"google.golang.org/protobuf/types/known/emptypb"
)
type QueryController struct {
serviceinterfaces.UnimplementedQueryServiceServer
query query.Service
validator *validator.Validate
}
func NewQueryController(querySvc query.Service, validator *validator.Validate) *QueryController {
return &QueryController{
query: querySvc,
validator: validator,
}
}
func (s *QueryController) List(ctx context.Context, req *serviceinterfaces.QueryFilter) (*serviceinterfaces.Queries, error) {
2025-01-03 13:41:07 +00:00
types := make([]queryprocessor.Type, len(req.GetTypes()))
2025-01-02 16:07:35 +00:00
for index, t := range req.GetTypes() {
2025-01-03 13:41:07 +00:00
types[index] = queryprocessor.Type(ParseSpecQueryType(t))
2025-01-02 16:07:35 +00:00
}
filters := query.ListFilters{
Types: types,
}
queries, err := s.query.List(ctx, filters)
if err != nil {
return nil, err
}
outQueries := make([]*serviceinterfaces.Query, len(*queries))
for index, query := range *queries {
outQueries[index] = ParseQuery(&query)
}
return &serviceinterfaces.Queries{
Queries: outQueries,
}, nil
2025-01-07 13:01:14 +00:00
}
func (s *QueryController) Get(ctx context.Context, req *serviceinterfaces.IdMessage) (*serviceinterfaces.Query, error) {
2025-01-02 16:07:35 +00:00
id, err := uuid.Parse(req.GetId())
if err != nil {
return nil, err
}
query, err := s.query.Get(ctx, id)
if err != nil {
return nil, err
}
return ParseQuery(query), nil
2025-01-07 13:01:14 +00:00
}
func (s *QueryController) Create(ctx context.Context, req *serviceinterfaces.QueryCreate) (*serviceinterfaces.IdMessage, error) {
2025-01-02 18:56:26 +00:00
requiredQueryIDs := make([]uuid.UUID, len(req.GetRequiredQueries()))
for index, id := range req.GetRequiredQueries() {
parsedID, err := uuid.Parse(id)
if err != nil {
return nil, err
}
requiredQueryIDs[index] = parsedID
}
2025-01-03 13:41:07 +00:00
id, err := s.query.Create(ctx, &queryprocessor.Create{
2025-01-02 18:56:26 +00:00
Type: ParseSpecQueryType(req.GetType()),
RequiredQueryIDs: requiredQueryIDs,
})
if err != nil {
return nil, err
}
return &serviceinterfaces.IdMessage{
Id: id.String(),
}, nil
2025-01-07 13:01:14 +00:00
}
func (s *QueryController) Update(ctx context.Context, req *serviceinterfaces.QueryUpdate) (*emptypb.Empty, error) {
2025-01-02 18:56:26 +00:00
id, err := uuid.Parse(req.GetId())
if err != nil {
return nil, err
}
2025-01-03 13:41:07 +00:00
err = s.query.Update(ctx, &queryprocessor.Update{
2025-01-02 18:56:26 +00:00
ID: id,
})
if err != nil {
return nil, err
}
2025-01-07 13:01:14 +00:00
return &emptypb.Empty{}, nil
}
2025-01-03 13:41:07 +00:00
func (s *QueryController) Deprecate(ctx context.Context, req *spec.IdMessage) (*emptypb.Empty, error) {
2025-01-02 18:56:26 +00:00
id, err := uuid.Parse(req.GetId())
if err != nil {
return nil, err
}
2025-01-03 13:41:07 +00:00
err = s.query.Deprecate(ctx, id)
2025-01-02 18:56:26 +00:00
if err != nil {
return nil, err
}
2025-01-07 13:01:14 +00:00
return &emptypb.Empty{}, nil
}
func (s *QueryController) Test(ctx context.Context, req *serviceinterfaces.QueryTestRequest) (*serviceinterfaces.QueryTestResponse, error) {
2025-01-03 14:21:14 +00:00
queryId, err := uuid.Parse(req.GetQueryId())
if err != nil {
return nil, err
}
docId, err := uuid.Parse(req.GetDocumentId())
2025-01-02 18:56:26 +00:00
if err != nil {
return nil, err
}
value, err := s.query.Test(ctx, query.Test{
2025-01-03 14:21:14 +00:00
QueryID: queryId,
QueryVersion: req.GetQueryVersion(),
DocumentID: docId,
2025-01-02 18:56:26 +00:00
})
if err != nil {
return nil, err
}
return &serviceinterfaces.QueryTestResponse{
Value: value,
}, nil
2025-01-07 13:01:14 +00:00
}