diff --git a/.mockery.yml b/.mockery.yml index 79cac707..374293f6 100644 --- a/.mockery.yml +++ b/.mockery.yml @@ -1,6 +1,6 @@ with-expecter: true packages: - gotemplate/internal: + queryorchestration/internal: config: recursive: true all: true diff --git a/Taskfile.yml b/Taskfile.yml index 56fe81c8..b4adf65f 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -13,6 +13,6 @@ includes: PROJECT_MAIN: cmd/grpc/main.go PROTOBUF_DIR: api/serviceInterfaces/queryOrchestration API_GRPC_DIR: api/grpc - IMAGE_NAME: gotemplate + IMAGE_NAME: queryorchestration DOCKERFILE_DIR: build/package COMPOSE_FILE: deployments/compose.yaml diff --git a/api/grpc/controllers/export.go b/api/grpc/controllers/export.go index fc319649..1d9f4155 100644 --- a/api/grpc/controllers/export.go +++ b/api/grpc/controllers/export.go @@ -2,8 +2,8 @@ package controllers import ( "context" - "gotemplate/api/grpc/spec" - "gotemplate/internal/export" + "queryorchestration/api/grpc/spec" + "queryorchestration/internal/export" "github.com/go-playground/validator/v10" ) diff --git a/api/grpc/controllers/jobcollector.go b/api/grpc/controllers/jobcollector.go index ef4d75c0..9e832100 100644 --- a/api/grpc/controllers/jobcollector.go +++ b/api/grpc/controllers/jobcollector.go @@ -2,8 +2,8 @@ package controllers import ( "context" - "gotemplate/api/grpc/spec" - "gotemplate/internal/collector" + "queryorchestration/api/grpc/spec" + "queryorchestration/internal/collector" "github.com/go-playground/validator/v10" diff --git a/api/grpc/controllers/query.go b/api/grpc/controllers/query.go index 6ac01297..948b09c7 100644 --- a/api/grpc/controllers/query.go +++ b/api/grpc/controllers/query.go @@ -2,8 +2,8 @@ package controllers import ( "context" - "gotemplate/api/grpc/spec" - "gotemplate/internal/query" + "queryorchestration/api/grpc/spec" + "queryorchestration/internal/query" "github.com/go-playground/validator/v10" diff --git a/api/queue/document.go b/api/queue/document.go index 2e390988..e4c60205 100644 --- a/api/queue/document.go +++ b/api/queue/document.go @@ -3,8 +3,8 @@ package queue import ( "context" "encoding/json" - "gotemplate/internal/document" - "gotemplate/internal/queue" + "queryorchestration/internal/document" + "queryorchestration/internal/queue" "github.com/go-playground/validator/v10" diff --git a/api/queue/poll.go b/api/queue/poll.go index 30d9a9cc..7430c26f 100644 --- a/api/queue/poll.go +++ b/api/queue/poll.go @@ -2,8 +2,8 @@ package queue import ( "context" - "gotemplate/internal/queue" "log" + "queryorchestration/internal/queue" "github.com/aws/aws-sdk-go-v2/service/sqs" ) diff --git a/cmd/grpc/main.go b/cmd/grpc/main.go index a4bed5c2..955f7d82 100644 --- a/cmd/grpc/main.go +++ b/cmd/grpc/main.go @@ -2,16 +2,16 @@ package main import ( "context" - "gotemplate/api/grpc/controllers" - "gotemplate/api/grpc/spec" - "gotemplate/internal/collector" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" - "gotemplate/internal/export" - "gotemplate/internal/otel" - "gotemplate/internal/query" "log" "net" + "queryorchestration/api/grpc/controllers" + "queryorchestration/api/grpc/spec" + "queryorchestration/internal/collector" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/export" + "queryorchestration/internal/otel" + "queryorchestration/internal/query" "strconv" "github.com/go-playground/validator/v10" diff --git a/cmd/queue/main.go b/cmd/queue/main.go index 63d50ae9..f73159bb 100644 --- a/cmd/queue/main.go +++ b/cmd/queue/main.go @@ -2,14 +2,14 @@ package main import ( "context" - "gotemplate/api/queue" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" - "gotemplate/internal/document" - "gotemplate/internal/env" - "gotemplate/internal/otel" - queueSVC "gotemplate/internal/queue" "log" + "queryorchestration/api/queue" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/document" + "queryorchestration/internal/env" + "queryorchestration/internal/otel" + queueSVC "queryorchestration/internal/queue" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/sqs" diff --git a/database/migrations/20241202153118_create_querytype_enum.up.sql b/database/migrations/20241202153118_create_querytype_enum.up.sql index 435afd16..c8bfe85c 100644 --- a/database/migrations/20241202153118_create_querytype_enum.up.sql +++ b/database/migrations/20241202153118_create_querytype_enum.up.sql @@ -1 +1 @@ -CREATE TYPE queryType AS ENUM ('json_extractor'); \ No newline at end of file +CREATE TYPE queryType AS ENUM ('context_full', 'json_extractor'); \ No newline at end of file diff --git a/go.mod b/go.mod index 067efb69..fe50cfeb 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module gotemplate +module queryorchestration go 1.23 diff --git a/internal/collector/collector.go b/internal/collector/collector.go index 98b5848f..e6a6e570 100644 --- a/internal/collector/collector.go +++ b/internal/collector/collector.go @@ -2,8 +2,8 @@ package collector import ( "context" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" "github.com/google/uuid" ) diff --git a/internal/collector/service.go b/internal/collector/service.go index cc17637f..168872d1 100644 --- a/internal/collector/service.go +++ b/internal/collector/service.go @@ -1,6 +1,6 @@ package collector -import "gotemplate/internal/database/repository" +import "queryorchestration/internal/database/repository" type Service struct { db *repository.Queries diff --git a/internal/contextFull/result.go b/internal/contextFull/result.go new file mode 100644 index 00000000..a69841e4 --- /dev/null +++ b/internal/contextFull/result.go @@ -0,0 +1,18 @@ +package contextfull + +import ( + "context" +) + +type Result struct { + value string +} + +func NewResult(value string) *Result { + return &Result{value} +} + +func (r *Result) GetValue(ctx context.Context) (string, error) { + // TODO - get value from s3 + return r.value, nil +} diff --git a/internal/contextFull/service.go b/internal/contextFull/service.go new file mode 100644 index 00000000..549ceb3e --- /dev/null +++ b/internal/contextFull/service.go @@ -0,0 +1,23 @@ +package contextfull + +import ( + "context" + "fmt" + "queryorchestration/internal/query" + "queryorchestration/internal/result" +) + +type Extractor struct { +} + +func New() *Extractor { + return &Extractor{} +} + +func (e *Extractor) Process(ctx context.Context, query query.Query, values *[]result.Value) (string, error) { + if len(*values) > 0 { + return "", fmt.Errorf("no requirements expected") + } + + return "", nil +} diff --git a/internal/database/connection.go b/internal/database/connection.go index 3e72d306..a45aa8b4 100644 --- a/internal/database/connection.go +++ b/internal/database/connection.go @@ -3,8 +3,8 @@ package database import ( "context" "fmt" - "gotemplate/internal/env" "log" + "queryorchestration/internal/env" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" diff --git a/internal/database/migrations.go b/internal/database/migrations.go index efe77e56..1f5de2fe 100644 --- a/internal/database/migrations.go +++ b/internal/database/migrations.go @@ -3,10 +3,10 @@ package database import ( "database/sql" "fmt" - "gotemplate/internal/env" "log" "os" "path" + "queryorchestration/internal/env" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/postgres" diff --git a/internal/database/repository/models.go b/internal/database/repository/models.go index d3879f21..db1fccdf 100644 --- a/internal/database/repository/models.go +++ b/internal/database/repository/models.go @@ -14,6 +14,7 @@ import ( type Querytype string const ( + QuerytypeContextFull Querytype = "context_full" QuerytypeJsonExtractor Querytype = "json_extractor" ) diff --git a/internal/document/service.go b/internal/document/service.go index 3bba9bc8..4c8d974e 100644 --- a/internal/document/service.go +++ b/internal/document/service.go @@ -2,11 +2,11 @@ package document import ( "context" - "gotemplate/internal/collector" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" - "gotemplate/internal/queryQueue" - "gotemplate/internal/result" + "queryorchestration/internal/collector" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/queryQueue" + "queryorchestration/internal/result" "github.com/google/uuid" ) diff --git a/internal/export/service.go b/internal/export/service.go index 6649c701..0a7bf214 100644 --- a/internal/export/service.go +++ b/internal/export/service.go @@ -1,6 +1,6 @@ package export -import "gotemplate/internal/database/repository" +import "queryorchestration/internal/database/repository" type Service struct { db *repository.Queries diff --git a/internal/jsonExtractor/result.go b/internal/jsonExtractor/result.go new file mode 100644 index 00000000..3ac237ec --- /dev/null +++ b/internal/jsonExtractor/result.go @@ -0,0 +1,17 @@ +package jsonextractor + +import ( + "context" +) + +type Result struct { + value string +} + +func NewResult(value string) *Result { + return &Result{value} +} + +func (r *Result) GetValue(ctx context.Context) (string, error) { + return r.value, nil +} diff --git a/internal/jsonExtractor/service.go b/internal/jsonExtractor/service.go index da42da57..6b4e4ce2 100644 --- a/internal/jsonExtractor/service.go +++ b/internal/jsonExtractor/service.go @@ -4,10 +4,10 @@ import ( "context" "encoding/json" "fmt" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" - "gotemplate/internal/query" - "gotemplate/internal/result" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/query" + "queryorchestration/internal/result" "github.com/tidwall/gjson" ) @@ -29,7 +29,10 @@ func (e *Extractor) Process(ctx context.Context, query query.Query, values *[]re return "", fmt.Errorf("JSON Extraction requires 1 result") } - value := (*values)[0].Value + value, err := (*values)[0].GetValue(ctx) + if err != nil { + return "", err + } byteConfig, err := e.db.GetQueryConfig(ctx, repository.GetQueryConfigParams{ Queryid: database.MustToDBUUID(query.ID), diff --git a/internal/query/database.go b/internal/query/database.go index 1cad2921..5c9a0ece 100644 --- a/internal/query/database.go +++ b/internal/query/database.go @@ -2,8 +2,8 @@ package query import ( "fmt" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" ) func ParseDBQuery(dbQuery *repository.GetCollectorQueriesRow) (*Query, error) { @@ -28,6 +28,8 @@ func ParseDBType(qType repository.NullQuerytype) (Type, error) { switch qType.Querytype { case repository.QuerytypeJsonExtractor: return TypeJsonExtractor, nil + case repository.QuerytypeContextFull: + return TypeContextFull, nil default: return TypeJsonExtractor, fmt.Errorf("invalid database query type") } @@ -39,6 +41,8 @@ func ToDBQueryType(t Type) (repository.NullQuerytype, error) { switch t { case TypeJsonExtractor: dbType = repository.QuerytypeJsonExtractor + case TypeContextFull: + dbType = repository.QuerytypeContextFull default: return repository.NullQuerytype{}, fmt.Errorf("invalid database query type") } diff --git a/internal/query/service.go b/internal/query/service.go index c76319e3..796ed47a 100644 --- a/internal/query/service.go +++ b/internal/query/service.go @@ -2,8 +2,8 @@ package query import ( "context" - "gotemplate/internal/database/repository" - "gotemplate/internal/result" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/result" "github.com/google/uuid" ) @@ -12,6 +12,7 @@ type Type int const ( TypeJsonExtractor = iota + TypeContextFull ) type Query struct { diff --git a/internal/queryQueue/create.go b/internal/queryQueue/create.go index 2da1b228..498856f6 100644 --- a/internal/queryQueue/create.go +++ b/internal/queryQueue/create.go @@ -2,8 +2,8 @@ package queryQueue import ( "context" - "gotemplate/internal/database" - "gotemplate/internal/query" + "queryorchestration/internal/database" + "queryorchestration/internal/query" ) func (q *Queue) getUnsyncedQueries() { @@ -75,7 +75,7 @@ func (q *Queue) Add(qu *query.Query) { } if requiredIndex != -1 { - *q.unsyncedQueue = append((*q.unsyncedQueue)[:requiredIndex], append([]query.Query{*qu}, (*q.unsyncedQueue)[requiredIndex:]...)...) + *q.unsyncedQueue = append((*q.unsyncedQueue)[:requiredIndex+1], append([]query.Query{*qu}, (*q.unsyncedQueue)[requiredIndex+1:]...)...) } else { *q.unsyncedQueue = append([]query.Query{*qu}, *q.unsyncedQueue...) } diff --git a/internal/queryQueue/execute.go b/internal/queryQueue/execute.go index 375c423c..080bc6b1 100644 --- a/internal/queryQueue/execute.go +++ b/internal/queryQueue/execute.go @@ -2,9 +2,13 @@ package queryQueue import ( "context" - "gotemplate/internal/database" - "gotemplate/internal/query" - "gotemplate/internal/result" + "fmt" + contextfull "queryorchestration/internal/contextFull" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" + jsonextractor "queryorchestration/internal/jsonExtractor" + "queryorchestration/internal/query" + "queryorchestration/internal/result" "github.com/google/uuid" "github.com/jackc/pgx/v5/pgtype" @@ -59,9 +63,13 @@ func (q *Queue) executeQuery(ctx context.Context, qu query.Query) error { } cleanValues := make([]result.Value, len(values)) - for _, r := range values { - cleanValue := result.ParseValue(&r) - cleanValues = append(cleanValues, *cleanValue) + for index, r := range values { + cleanValue, err := q.getResultValue(&r) + if err != nil { + return err + } + + cleanValues[index] = cleanValue } err = q.setResult(ctx, qu, &cleanValues) @@ -71,3 +79,21 @@ func (q *Queue) executeQuery(ctx context.Context, qu query.Query) error { return nil } + +func (q *Queue) getResultValue(res *repository.ListResultValuesByIDRow) (result.Value, error) { + var queryType query.Type + for _, qu := range *q.collectorQueries { + if qu.ID == database.MustToUUID(res.Queryid) { + queryType = qu.Type + } + } + + switch queryType { + case query.TypeJsonExtractor: + return jsonextractor.NewResult(res.Value), nil + case query.TypeContextFull: + return contextfull.NewResult(res.Value), nil + default: + return nil, fmt.Errorf("attempting to process invalid query type") + } +} diff --git a/internal/queryQueue/result.go b/internal/queryQueue/result.go index 58044868..bb776509 100644 --- a/internal/queryQueue/result.go +++ b/internal/queryQueue/result.go @@ -3,9 +3,10 @@ package queryQueue import ( "context" "fmt" - jsonextractor "gotemplate/internal/jsonExtractor" - "gotemplate/internal/query" - "gotemplate/internal/result" + contextfull "queryorchestration/internal/contextFull" + jsonextractor "queryorchestration/internal/jsonExtractor" + "queryorchestration/internal/query" + "queryorchestration/internal/result" ) func (q *Queue) setResult(ctx context.Context, qu query.Query, resultValues *[]result.Value) error { @@ -44,6 +45,8 @@ func (q *Queue) getProcessor(queryType query.Type) (query.Processor, error) { switch queryType { case query.TypeJsonExtractor: return jsonextractor.New(q.db), nil + case query.TypeContextFull: + return contextfull.New(), nil default: return nil, fmt.Errorf("attempting to process invalid query type") } diff --git a/internal/queryQueue/service.go b/internal/queryQueue/service.go index 42a63035..f83fc39d 100644 --- a/internal/queryQueue/service.go +++ b/internal/queryQueue/service.go @@ -2,10 +2,10 @@ package queryQueue import ( "context" - "gotemplate/internal/collector" - "gotemplate/internal/database/repository" - "gotemplate/internal/query" - "gotemplate/internal/result" + "queryorchestration/internal/collector" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/query" + "queryorchestration/internal/result" "github.com/google/uuid" ) diff --git a/internal/result/parse.go b/internal/result/parse.go index 7ae57a12..1ed70d7f 100644 --- a/internal/result/parse.go +++ b/internal/result/parse.go @@ -1,18 +1,10 @@ package result import ( - "gotemplate/internal/database" - "gotemplate/internal/database/repository" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" ) -func ParseValue(result *repository.ListResultValuesByIDRow) *Value { - return &Value{ - ID: database.MustToUUID(result.ID), - QueryID: database.MustToUUID(result.Queryid), - Value: result.Value, - } -} - func Parse(dbQuery *repository.ListResultsByDocumentIDRow) *Result { return &Result{ ID: database.MustToUUID(dbQuery.ID), diff --git a/internal/result/service.go b/internal/result/service.go index d594fae0..b0ce5922 100644 --- a/internal/result/service.go +++ b/internal/result/service.go @@ -2,8 +2,8 @@ package result import ( "context" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" "github.com/google/uuid" ) @@ -14,10 +14,8 @@ type Result struct { QueryVersion int32 } -type Value struct { - ID uuid.UUID - QueryID uuid.UUID - Value string +type Value interface { + GetValue(ctx context.Context) (string, error) } type ResultStore struct { diff --git a/test/integration/grpc/container_test.go b/test/integration/grpc/container_test.go index 675cdeb4..f94d8351 100644 --- a/test/integration/grpc/container_test.go +++ b/test/integration/grpc/container_test.go @@ -26,7 +26,7 @@ func createContainer(t *testing.T, ctx context.Context, config *containerConfig) } req := testcontainers.ContainerRequest{ - Image: "gotemplate_grpc:latest", + Image: "queryorchestration_grpc:latest", Env: map[string]string{ "DB_USER": config.DB.User, "DB_PASS": config.DB.Password, @@ -85,7 +85,7 @@ func createDB(t *testing.T, ctx context.Context, network *testcontainers.DockerN } config := dbConfig{ - Name: "gotemplate", + Name: "queryorchestration", Password: "pass", User: "postgres", Port: port.Int(), diff --git a/test/integration/grpc/query_test.go b/test/integration/grpc/query_test.go index 96c30b26..cebe26cd 100644 --- a/test/integration/grpc/query_test.go +++ b/test/integration/grpc/query_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "gotemplate/api/grpc/spec" + "queryorchestration/api/grpc/spec" "github.com/stretchr/testify/assert" ) diff --git a/test/integration/queue/container_test.go b/test/integration/queue/container_test.go index a175f2cc..9b976dcf 100644 --- a/test/integration/queue/container_test.go +++ b/test/integration/queue/container_test.go @@ -32,7 +32,7 @@ func createContainer(t *testing.T, ctx context.Context, config containerConfig) } req := testcontainers.ContainerRequest{ - Image: "gotemplate_queue:latest", + Image: "queryorchestration_queue:latest", Env: map[string]string{ "QUEUE_URL": config.Queue.URL, "AWS_DEFAULT_REGION": config.Queue.Region, @@ -178,7 +178,7 @@ func createDB(t *testing.T, ctx context.Context, network *testcontainers.DockerN } config := dbConfig{ - Name: "gotemplate", + Name: "queryorchestration", Password: "pass", User: "postgres", Port: port.Int(), diff --git a/test/integration/queue/querysync_test.go b/test/integration/queue/querysync_test.go index 6e683378..32d0b35f 100644 --- a/test/integration/queue/querysync_test.go +++ b/test/integration/queue/querysync_test.go @@ -3,7 +3,7 @@ package queue_test import ( "context" "encoding/json" - "gotemplate/internal/document" + "queryorchestration/internal/document" "testing" "github.com/google/uuid" diff --git a/test/unit/internal/collector/service_test.go b/test/unit/internal/collector/service_test.go index 069bb419..e0789dfe 100644 --- a/test/unit/internal/collector/service_test.go +++ b/test/unit/internal/collector/service_test.go @@ -2,9 +2,9 @@ package document_test import ( "context" - "gotemplate/internal/collector" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" + "queryorchestration/internal/collector" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" "testing" "github.com/google/uuid" diff --git a/test/unit/internal/contextfull/process_test.go b/test/unit/internal/contextfull/process_test.go new file mode 100644 index 00000000..c8c9eab6 --- /dev/null +++ b/test/unit/internal/contextfull/process_test.go @@ -0,0 +1,38 @@ +package document_test + +import ( + "context" + contextfull "queryorchestration/internal/contextFull" + "queryorchestration/internal/query" + "queryorchestration/internal/result" + "testing" + + "github.com/google/uuid" + "github.com/stretchr/testify/assert" +) + +func TestContextFull(t *testing.T) { + ctx := context.Background() + + extractor := contextfull.New() + + query := query.Query{ + ID: uuid.New(), + Type: query.TypeJsonExtractor, + RequiredQueryID: uuid.Nil, + Version: int32(1), + } + + values := &[]result.Value{} + + value, err := extractor.Process(ctx, query, values) + assert.Nil(t, err) + assert.Equal(t, "", value) + + values = &[]result.Value{ + contextfull.NewResult("example_result"), + } + + _, err = extractor.Process(ctx, query, values) + assert.EqualError(t, err, "no requirements expected") +} diff --git a/test/unit/internal/database/uuid_test.go b/test/unit/internal/database/uuid_test.go index fa61b4c4..092a2727 100644 --- a/test/unit/internal/database/uuid_test.go +++ b/test/unit/internal/database/uuid_test.go @@ -1,7 +1,7 @@ package database_test import ( - "gotemplate/internal/database" + "queryorchestration/internal/database" "testing" "github.com/google/uuid" diff --git a/test/unit/internal/document/sync_test.go b/test/unit/internal/document/sync_test.go index f85d8a67..bacc202f 100644 --- a/test/unit/internal/document/sync_test.go +++ b/test/unit/internal/document/sync_test.go @@ -2,9 +2,9 @@ package document_test import ( "context" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" - "gotemplate/internal/document" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/document" "testing" "github.com/google/uuid" diff --git a/test/unit/internal/env/get_test.go b/test/unit/internal/env/get_test.go index 65335daf..6aa44eb1 100644 --- a/test/unit/internal/env/get_test.go +++ b/test/unit/internal/env/get_test.go @@ -1,8 +1,8 @@ package env_test import ( - "gotemplate/internal/env" "os" + "queryorchestration/internal/env" "testing" "github.com/stretchr/testify/assert" diff --git a/test/unit/internal/env/getfatal_test.go b/test/unit/internal/env/getfatal_test.go index 254c7b5d..98505780 100644 --- a/test/unit/internal/env/getfatal_test.go +++ b/test/unit/internal/env/getfatal_test.go @@ -1,8 +1,8 @@ package env_test import ( - "gotemplate/internal/env" "os" + "queryorchestration/internal/env" "testing" "github.com/stretchr/testify/assert" diff --git a/test/unit/internal/jsonextractor/process_test.go b/test/unit/internal/jsonextractor/process_test.go index 29407f5f..a99633b5 100644 --- a/test/unit/internal/jsonextractor/process_test.go +++ b/test/unit/internal/jsonextractor/process_test.go @@ -3,11 +3,12 @@ package document_test import ( "context" "fmt" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" - jsonextractor "gotemplate/internal/jsonExtractor" - "gotemplate/internal/query" - "gotemplate/internal/result" + contextfull "queryorchestration/internal/contextFull" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" + jsonextractor "queryorchestration/internal/jsonExtractor" + "queryorchestration/internal/query" + "queryorchestration/internal/result" "testing" "github.com/google/uuid" @@ -39,7 +40,7 @@ func TestJSONProcess(t *testing.T) { jsonString := fmt.Sprintf("{\"key\": \"%s\"}", entryValue) values := &[]result.Value{ - {ID: uuid.New(), QueryID: uuid.New(), Value: jsonString}, + contextfull.NewResult(jsonString), } config := "{\"path\":\"key\"}" @@ -57,7 +58,7 @@ func TestJSONProcess(t *testing.T) { entryValue = "" jsonString = fmt.Sprintf("{\"key\": \"%s\"}", entryValue) values = &[]result.Value{ - {ID: uuid.New(), QueryID: uuid.New(), Value: jsonString}, + contextfull.NewResult(jsonString), } db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(query.ID), query.Version). WillReturnRows( @@ -72,7 +73,7 @@ func TestJSONProcess(t *testing.T) { entryValue = "1" jsonString = fmt.Sprintf("{\"key\": %s", entryValue) values = &[]result.Value{ - {ID: uuid.New(), QueryID: uuid.New(), Value: jsonString}, + contextfull.NewResult(jsonString), } db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(query.ID), query.Version). WillReturnRows( @@ -108,7 +109,7 @@ func TestJSONProcessJSON(t *testing.T) { jsonString := fmt.Sprintf("{\"key\": \"%s\"}", entryValue) values := &[]result.Value{ - {ID: uuid.New(), QueryID: uuid.New(), Value: jsonString}, + contextfull.NewResult(jsonString), } config := "{\"path\":\"invalid_key\"}" @@ -185,17 +186,17 @@ func TestJSONProcessResults(t *testing.T) { assert.Empty(t, value) results = &[]result.Value{ - {ID: uuid.New(), QueryID: uuid.New(), Value: ""}, - {ID: uuid.New(), QueryID: uuid.New(), Value: ""}, + contextfull.NewResult(""), + contextfull.NewResult(""), } value, err = extractor.Process(ctx, query, results) assert.EqualError(t, err, "JSON Extraction requires 1 result") assert.Empty(t, value) results = &[]result.Value{ - {ID: uuid.New(), QueryID: uuid.New(), Value: ""}, - {ID: uuid.New(), QueryID: uuid.New(), Value: ""}, - {ID: uuid.New(), QueryID: uuid.New(), Value: ""}, + contextfull.NewResult(""), + contextfull.NewResult(""), + contextfull.NewResult(""), } value, err = extractor.Process(ctx, query, results) assert.EqualError(t, err, "JSON Extraction requires 1 result") diff --git a/test/unit/internal/query/parse_test.go b/test/unit/internal/query/parse_test.go index 13eb0cb9..0727afa4 100644 --- a/test/unit/internal/query/parse_test.go +++ b/test/unit/internal/query/parse_test.go @@ -1,8 +1,8 @@ package document_test import ( - "gotemplate/internal/database/repository" - "gotemplate/internal/query" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/query" "testing" "github.com/google/uuid" @@ -43,6 +43,11 @@ func TestParseDBType(t *testing.T) { qType = repository.NullQuerytype{Valid: true} _, err = query.ParseDBType(qType) assert.EqualError(t, err, "invalid database query type") + + qType = repository.NullQuerytype{Valid: true, Querytype: repository.QuerytypeContextFull} + value, err = query.ParseDBType(qType) + assert.Nil(t, err) + assert.Equal(t, query.Type(query.TypeContextFull), value) } func TestToDBQueryType(t *testing.T) { @@ -54,4 +59,9 @@ func TestToDBQueryType(t *testing.T) { dbQueryType = query.Type(-1) _, err = query.ToDBQueryType(dbQueryType) assert.EqualError(t, err, "invalid database query type") + + dbQueryType = query.Type(query.TypeContextFull) + value, err = query.ToDBQueryType(dbQueryType) + assert.Nil(t, err) + assert.Equal(t, repository.NullQuerytype{Querytype: repository.QuerytypeContextFull, Valid: true}, value) } diff --git a/test/unit/internal/query/service_test.go b/test/unit/internal/query/service_test.go index 70e34f76..23111b58 100644 --- a/test/unit/internal/query/service_test.go +++ b/test/unit/internal/query/service_test.go @@ -2,8 +2,8 @@ package document_test import ( "context" - "gotemplate/internal/database/repository" - "gotemplate/internal/query" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/query" "testing" "github.com/pashagolub/pgxmock/v3" diff --git a/test/unit/internal/queryQueue/queue_test.go b/test/unit/internal/queryQueue/queue_test.go index 9299d1d3..fad87561 100644 --- a/test/unit/internal/queryQueue/queue_test.go +++ b/test/unit/internal/queryQueue/queue_test.go @@ -2,12 +2,13 @@ package document_test import ( "context" - "gotemplate/internal/collector" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" - "gotemplate/internal/query" - "gotemplate/internal/queryQueue" - "gotemplate/internal/result" + "fmt" + "queryorchestration/internal/collector" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/query" + "queryorchestration/internal/queryQueue" + "queryorchestration/internal/result" "testing" "github.com/google/uuid" @@ -52,14 +53,16 @@ func TestQueue(t *testing.T) { queryFiveVersion := int32(5) querySixID := uuid.New() querySixVersion := int32(6) + contextID := uuid.New() + contextVersion := int32(1) collectorQueries := []query.Query{ - {ID: queryOneID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: queryOneVersion}, + {ID: contextID, Type: query.TypeContextFull, RequiredQueryID: uuid.Nil, Version: contextVersion}, + {ID: queryOneID, Type: query.TypeJsonExtractor, RequiredQueryID: contextID, Version: queryOneVersion}, {ID: queryTwoID, Type: query.TypeJsonExtractor, RequiredQueryID: queryOneID, Version: queryTwoVersion}, {ID: queryThreeID, Type: query.TypeJsonExtractor, RequiredQueryID: queryOneID, Version: queryThreeVersion}, - {ID: queryThreeID, Type: query.TypeJsonExtractor, RequiredQueryID: queryTwoID, Version: queryThreeVersion}, - {ID: queryFourID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: queryFourVersion}, + {ID: queryFourID, Type: query.TypeJsonExtractor, RequiredQueryID: contextID, Version: queryFourVersion}, {ID: queryFiveID, Type: query.TypeJsonExtractor, RequiredQueryID: querySixID, Version: queryFiveVersion}, - {ID: querySixID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: querySixVersion}, + {ID: querySixID, Type: query.TypeJsonExtractor, RequiredQueryID: contextID, Version: querySixVersion}, } rows := pgxmock.NewRows([]string{"collectorId", "queryId", "type", "requiredQueryId", "queryVersion"}) @@ -74,18 +77,20 @@ func TestQueue(t *testing.T) { db.ExpectQuery("name: GetCollectorQueries :many").WithArgs(dbCollectorID).WillReturnRows(rows) + contextResultID := uuid.New() results := []result.Result{ + {ID: contextResultID, QueryID: contextID, QueryVersion: contextVersion}, {ID: uuid.New(), QueryID: queryFourID, QueryVersion: queryFourVersion}, {ID: uuid.New(), QueryID: querySixID, QueryVersion: querySixVersion - 1}, {ID: uuid.New(), QueryID: queryOneID, QueryVersion: queryOneVersion - 1}, } expectedQueries := []query.Query{ - {ID: querySixID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: querySixVersion}, + {ID: querySixID, Type: query.TypeJsonExtractor, RequiredQueryID: contextID, Version: querySixVersion}, {ID: queryFiveID, Type: query.TypeJsonExtractor, RequiredQueryID: querySixID, Version: queryFiveVersion}, - {ID: queryThreeID, Type: query.TypeJsonExtractor, RequiredQueryID: queryTwoID, Version: queryThreeVersion}, + {ID: queryOneID, Type: query.TypeJsonExtractor, RequiredQueryID: contextID, Version: queryOneVersion}, + {ID: queryThreeID, Type: query.TypeJsonExtractor, RequiredQueryID: queryOneID, Version: queryThreeVersion}, {ID: queryTwoID, Type: query.TypeJsonExtractor, RequiredQueryID: queryOneID, Version: queryTwoVersion}, - {ID: queryOneID, Type: query.TypeJsonExtractor, RequiredQueryID: uuid.Nil, Version: queryOneVersion}, } docID := uuid.New() @@ -96,22 +101,67 @@ func TestQueue(t *testing.T) { assert.Nil(t, err) assert.Equal(t, expectedQueries, q.GetQueue()) - db.ExpectQuery("name: ListResultValuesByID :many").WithArgs([]pgtype.UUID{}).WillReturnRows(rows) - db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(querySixID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, querySixVersion). + keyLayerOne := "key" + keyLayerTwo := "key5" + valueLayerTwo := "value" + valueLayerOne := fmt.Sprintf("{\"%s\":\"%s\"}", keyLayerTwo, valueLayerTwo) + valueContext := fmt.Sprintf("{\"%s\":%s}", keyLayerOne, valueLayerOne) + + db.ExpectQuery("name: ListResultValuesByID :many").WithArgs([]pgtype.UUID{database.MustToDBUUID(contextResultID)}).WillReturnRows( + pgxmock.NewRows([]string{"id", "queryId", "value"}). + AddRow(database.MustToDBUUID(contextResultID), database.MustToDBUUID(contextID), valueContext), + ) + db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(querySixID), querySixVersion).WillReturnRows( + pgxmock.NewRows([]string{"id", "config"}). + AddRow(pgtype.UUID{}, []byte(fmt.Sprintf("{\"path\":\"%s\"}", keyLayerOne))), + ) + db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(querySixID), database.MustToDBUUID(docID), valueLayerOne, cleanVersion, textVersion, querySixVersion). WillReturnResult(pgxmock.NewResult("", 1)) - db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(rows) - db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryFiveID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, queryFiveVersion). + + db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows( + pgxmock.NewRows([]string{"id", "queryId", "value"}). + AddRow(pgtype.UUID{}, database.MustToDBUUID(querySixID), valueLayerOne), + ) + db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(queryFiveID), queryFiveVersion).WillReturnRows( + pgxmock.NewRows([]string{"id", "config"}). + AddRow(pgtype.UUID{}, []byte(fmt.Sprintf("{\"path\":\"%s\"}", keyLayerTwo))), + ) + db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryFiveID), database.MustToDBUUID(docID), valueLayerTwo, cleanVersion, textVersion, queryFiveVersion). WillReturnResult(pgxmock.NewResult("", 1)) - db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(rows) - db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryThreeID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, queryThreeVersion). + + db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows( + pgxmock.NewRows([]string{"id", "queryId", "value"}). + AddRow(database.MustToDBUUID(contextResultID), database.MustToDBUUID(contextID), valueContext), + ) + db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(queryOneID), queryOneVersion).WillReturnRows( + pgxmock.NewRows([]string{"id", "config"}). + AddRow(pgtype.UUID{}, []byte(fmt.Sprintf("{\"path\":\"%s\"}", keyLayerOne))), + ) + db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryOneID), database.MustToDBUUID(docID), valueLayerOne, cleanVersion, textVersion, queryOneVersion). WillReturnResult(pgxmock.NewResult("", 1)) - db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(rows) - db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryTwoID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, queryTwoVersion). + + db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows( + pgxmock.NewRows([]string{"id", "queryId", "value"}). + AddRow(pgtype.UUID{}, database.MustToDBUUID(queryOneID), valueLayerOne), + ) + db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(queryThreeID), queryThreeVersion).WillReturnRows( + pgxmock.NewRows([]string{"id", "config"}). + AddRow(pgtype.UUID{}, []byte(fmt.Sprintf("{\"path\":\"%s\"}", keyLayerTwo))), + ) + db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryThreeID), database.MustToDBUUID(docID), valueLayerTwo, cleanVersion, textVersion, queryThreeVersion). WillReturnResult(pgxmock.NewResult("", 1)) - db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows(rows) - db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryOneID), database.MustToDBUUID(docID), pgxmock.AnyArg(), cleanVersion, textVersion, queryOneVersion). + + db.ExpectQuery("name: ListResultValuesByID :many").WithArgs(pgxmock.AnyArg()).WillReturnRows( + pgxmock.NewRows([]string{"id", "queryId", "value"}). + AddRow(pgtype.UUID{}, database.MustToDBUUID(queryOneID), valueLayerOne), + ) + db.ExpectQuery("name: GetQueryConfig :one").WithArgs(database.MustToDBUUID(queryTwoID), queryTwoVersion).WillReturnRows( + pgxmock.NewRows([]string{"id", "config"}). + AddRow(pgtype.UUID{}, []byte(fmt.Sprintf("{\"path\":\"%s\"}", keyLayerTwo))), + ) + db.ExpectExec("name: SetResult :exec").WithArgs(pgxmock.AnyArg(), database.MustToDBUUID(queryTwoID), database.MustToDBUUID(docID), valueLayerTwo, cleanVersion, textVersion, queryTwoVersion). WillReturnResult(pgxmock.NewResult("", 1)) err = q.Execute(ctx) - assert.EqualError(t, err, "JSON Extraction requires 1 result") + assert.Nil(t, err) } diff --git a/test/unit/internal/result/parse_test.go b/test/unit/internal/result/parse_test.go index 1f50a09c..e86e81d3 100644 --- a/test/unit/internal/result/parse_test.go +++ b/test/unit/internal/result/parse_test.go @@ -1,8 +1,8 @@ package document_test import ( - "gotemplate/internal/database/repository" - "gotemplate/internal/result" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/result" "testing" "github.com/google/uuid" @@ -10,19 +10,6 @@ import ( "github.com/stretchr/testify/assert" ) -func TestParseValue(t *testing.T) { - dbResult := repository.ListResultValuesByIDRow{ - ID: pgtype.UUID{}, - Queryid: pgtype.UUID{}, - Value: "", - } - - value := result.ParseValue(&dbResult) - assert.Equal(t, dbResult.Value, value.Value) - assert.Equal(t, uuid.Nil, value.ID) - assert.Equal(t, uuid.Nil, value.QueryID) -} - func TestParseResultValue(t *testing.T) { dbResult := repository.ListResultsByDocumentIDRow{ ID: pgtype.UUID{}, diff --git a/test/unit/internal/result/store_test.go b/test/unit/internal/result/store_test.go index fb180dfc..b120711c 100644 --- a/test/unit/internal/result/store_test.go +++ b/test/unit/internal/result/store_test.go @@ -3,9 +3,9 @@ package document_test import ( "context" "fmt" - "gotemplate/internal/database" - "gotemplate/internal/database/repository" - "gotemplate/internal/result" + "queryorchestration/internal/database" + "queryorchestration/internal/database/repository" + "queryorchestration/internal/result" "testing" "github.com/google/uuid"