diff --git a/api/controllers/query.go b/api/controllers/query.go index 2d038524..a0e3db03 100644 --- a/api/controllers/query.go +++ b/api/controllers/query.go @@ -64,17 +64,73 @@ func (s *QueryController) Get(ctx context.Context, req *serviceinterfaces.IdMess } func (s *QueryController) Create(ctx context.Context, req *serviceinterfaces.QueryCreate) (*serviceinterfaces.IdMessage, error) { - return &serviceinterfaces.IdMessage{}, nil + 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 + } + + id, err := s.query.Create(ctx, query.Create{ + Type: ParseSpecQueryType(req.GetType()), + RequiredQueryIDs: requiredQueryIDs, + }) + if err != nil { + return nil, err + } + + return &serviceinterfaces.IdMessage{ + Id: id.String(), + }, nil } func (s *QueryController) Update(ctx context.Context, req *serviceinterfaces.QueryUpdate) (*emptypb.Empty, error) { + id, err := uuid.Parse(req.GetId()) + if err != nil { + return nil, err + } + + err = s.query.Update(ctx, query.Update{ + ID: id, + }) + if err != nil { + return nil, err + } + return &emptypb.Empty{}, nil } func (s *QueryController) Remove(ctx context.Context, req *serviceinterfaces.IdMessage) (*emptypb.Empty, error) { + id, err := uuid.Parse(req.GetId()) + if err != nil { + return nil, err + } + + err = s.query.Remove(ctx, id) + if err != nil { + return nil, err + } + return &emptypb.Empty{}, nil } func (s *QueryController) Test(ctx context.Context, req *serviceinterfaces.QueryTestRequest) (*serviceinterfaces.QueryTestResponse, error) { - return &serviceinterfaces.QueryTestResponse{}, nil + id, err := uuid.Parse(req.GetId()) + if err != nil { + return nil, err + } + + value, err := s.query.Test(ctx, query.Test{ + ID: id, + }) + if err != nil { + return nil, err + } + + return &serviceinterfaces.QueryTestResponse{ + Value: value, + }, nil } diff --git a/internal/query/service.go b/internal/query/service.go index 3ddba863..011136dd 100644 --- a/internal/query/service.go +++ b/internal/query/service.go @@ -33,6 +33,19 @@ type ListFilters struct { Types []Type } +type Create struct { + Type Type + RequiredQueryIDs []uuid.UUID +} + +type Update struct { + ID uuid.UUID +} + +type Test struct { + ID uuid.UUID +} + type Processor interface { Process(ctx context.Context, query QueryRow, values *[]result.Value) (string, error) } @@ -52,3 +65,22 @@ func (s *Service) Get(ctx context.Context, id uuid.UUID) (*Query, error) { func (s *Service) List(ctx context.Context, filters ListFilters) (*[]Query, error) { return nil, nil } + +func (s *Service) Create(ctx context.Context, entity Create) (uuid.UUID, error) { + return uuid.Nil, nil +} + +func (s *Service) Update(ctx context.Context, entity Update) error { + return nil +} + +func (s *Service) Remove(ctx context.Context, id uuid.UUID) error { + return nil +} + +func (s *Service) Test(ctx context.Context, filters Test) (string, error) { + // Sync doc + // Run test + + return "", nil +}