Files
query-orchestration/internal/query/result/process.go
T
Michael McGuinness 0ac5ff9e15 Merged in feature/testquery (pull request #39)
Test Query

* depstextandclean

* startedcleaningresult

* resulttidyup

* roundone

* cleaning

* unsyncedquery

* startedtestsandsimplification

* api

* querytests

* resultprocessortests

* unittests

* cleanup
2025-01-29 11:52:37 +00:00

71 lines
1.8 KiB
Go

package result
import (
"context"
"errors"
"fmt"
resultprocessor "queryorchestration/internal/query/result/processor"
contextfull "queryorchestration/internal/query/types/contextFull"
jsonextractor "queryorchestration/internal/query/types/jsonExtractor"
"github.com/google/uuid"
)
type Process struct {
DocumentID uuid.UUID
MinCleanVersion int32
MinTextVersion int32
Query *resultprocessor.Query
}
func (s *Service) Process(ctx context.Context, p *Process) (resultprocessor.Value, error) {
values, err := s.listRequiredValues(ctx, p)
if err != nil {
return nil, err
}
processor, err := s.getProcessor(p.Query.Type)
if err != nil {
return nil, err
}
val, err := processor.Process(ctx, p.Query, values)
if err != nil {
return nil, err
}
return getValueByType(p.Query.Type, val)
}
func (s *Service) listRequiredValues(ctx context.Context, p *Process) (*[]resultprocessor.Value, error) {
if p == nil || p.Query == nil || p.Query.RequiredQueryIDs == nil || len(*p.Query.RequiredQueryIDs) == 0 {
return nil, nil
}
values, err := s.ListQueryRequirementValues(ctx, &ListQueryRequirementValuesParams{
QueryID: p.Query.ID,
QueryVersion: p.Query.Version,
DocumentID: p.DocumentID,
MinCleanVersion: p.MinCleanVersion,
MinTextVersion: p.MinTextVersion,
})
if err != nil {
return nil, err
} else if values == nil || len(*values) != len(*p.Query.RequiredQueryIDs) {
return nil, errors.New("document not synced")
}
return values, nil
}
func (s *Service) getProcessor(queryType resultprocessor.Type) (resultprocessor.Processor, error) {
switch queryType {
case resultprocessor.TypeJsonExtractor:
return jsonextractor.NewExtractor(s.db), nil
case resultprocessor.TypeContextFull:
return contextfull.NewExtractor(), nil
default:
return nil, fmt.Errorf("attempting to process invalid query type")
}
}