From d6fd74ac2dd152ef1afbea50310f6176bb98edeb Mon Sep 17 00:00:00 2001 From: Michael McGuinness Date: Tue, 7 Jan 2025 16:12:18 +0000 Subject: [PATCH] basestructure --- Taskfile.yml | 11 ++++++ database/queries/query.sql | 10 ++--- internal/database/repository/query.sql.go | 10 ++--- internal/query/create.go | 7 +++- test/integration/queryrunner_test.go | 2 +- test/integration/queryservice_test.go | 33 ++++++++++++++--- .../database/repository/querytype_test.go | 37 +++++++++++++++++++ 7 files changed, 92 insertions(+), 18 deletions(-) create mode 100644 Taskfile.yml create mode 100644 test/unit/internal/database/repository/querytype_test.go diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 00000000..8e74433f --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,11 @@ +# https://taskfile.dev + +version: '3' + +includes: + lib: + taskfile: scripts/Taskfile.yml + flatten: true + vars: + IMAGE_NAME: queryorchestration + COVERAGE_THRESHOLD: 80 diff --git a/database/queries/query.sql b/database/queries/query.sql index 4355ed2a..08488057 100644 --- a/database/queries/query.sql +++ b/database/queries/query.sql @@ -10,10 +10,10 @@ SELECT EXISTS ( ); -- name: GetQuery :one -SELECT q.id, q.type, q.activeVersion, q.latestVersion, c.config, ARRAY_AGG(r.requiredQueryId) AS requiredIds +SELECT q.id, q.type, q.activeVersion, q.latestVersion, c.config, ARRAY_AGG(DISTINCT r.requiredQueryId) as requiredIds FROM queries AS q - JOIN queryConfigs AS c ON q.id = c.queryId - JOIN requiredQueries AS r ON q.id = r.queryId + LEFT JOIN queryConfigs AS c ON q.id = c.queryId + LEFT JOIN requiredQueries AS r ON q.id = r.queryId WHERE q.id = $1 and c.addedVersion >= q.activeVersion and COALESCE(c.removedVersion, q.activeVersion - 1) < q.activeVersion @@ -24,8 +24,8 @@ SELECT q.id, q.type, q.activeVersion, q.latestVersion, c.config, ARRAY_AGG(r.req -- name: ListQueries :many SELECT q.id, q.type, q.activeVersion, q.latestVersion, c.config, ARRAY_AGG(r.requiredQueryId) AS requiredIds FROM queries AS q - JOIN queryConfigs AS c ON q.id = c.queryId - JOIN requiredQueries AS r ON q.id = r.queryId + LEFT JOIN queryConfigs AS c ON q.id = c.queryId + LEFT JOIN requiredQueries AS r ON q.id = r.queryId WHERE c.addedVersion >= q.activeVersion and COALESCE(c.removedVersion, q.activeVersion - 1) < q.activeVersion and r.addedVersion >= q.activeVersion diff --git a/internal/database/repository/query.sql.go b/internal/database/repository/query.sql.go index 431cc359..c3ab0ad7 100644 --- a/internal/database/repository/query.sql.go +++ b/internal/database/repository/query.sql.go @@ -62,10 +62,10 @@ func (q *Queries) DeprecateQuery(ctx context.Context, queryid pgtype.UUID) error } const getQuery = `-- name: GetQuery :one -SELECT q.id, q.type, q.activeVersion, q.latestVersion, c.config, ARRAY_AGG(r.requiredQueryId) AS requiredIds +SELECT q.id, q.type, q.activeVersion, q.latestVersion, c.config, ARRAY_AGG(DISTINCT r.requiredQueryId) as requiredIds FROM queries AS q - JOIN queryConfigs AS c ON q.id = c.queryId - JOIN requiredQueries AS r ON q.id = r.queryId + LEFT JOIN queryConfigs AS c ON q.id = c.queryId + LEFT JOIN requiredQueries AS r ON q.id = r.queryId WHERE q.id = $1 and c.addedVersion >= q.activeVersion and COALESCE(c.removedVersion, q.activeVersion - 1) < q.activeVersion @@ -134,8 +134,8 @@ func (q *Queries) IsQueryDeprecated(ctx context.Context, queryid pgtype.UUID) (b const listQueries = `-- name: ListQueries :many SELECT q.id, q.type, q.activeVersion, q.latestVersion, c.config, ARRAY_AGG(r.requiredQueryId) AS requiredIds FROM queries AS q - JOIN queryConfigs AS c ON q.id = c.queryId - JOIN requiredQueries AS r ON q.id = r.queryId + LEFT JOIN queryConfigs AS c ON q.id = c.queryId + LEFT JOIN requiredQueries AS r ON q.id = r.queryId WHERE c.addedVersion >= q.activeVersion and COALESCE(c.removedVersion, q.activeVersion - 1) < q.activeVersion and r.addedVersion >= q.activeVersion diff --git a/internal/query/create.go b/internal/query/create.go index b5ffab0e..b7eb57ac 100644 --- a/internal/query/create.go +++ b/internal/query/create.go @@ -42,7 +42,7 @@ func (s *Service) submitCreate(ctx context.Context, entity *queryprocessor.Creat if err != nil { return uuid.Nil, err } - defer tx.Rollback(ctx) + // defer tx.Rollback(ctx) qtx := s.db.Queries.WithTx(tx) @@ -73,6 +73,11 @@ func (s *Service) submitCreate(ctx context.Context, entity *queryprocessor.Creat } } + err = tx.Commit(ctx) + if err != nil { + return uuid.Nil, err + } + id := database.MustToUUID(dbID) return id, nil diff --git a/test/integration/queryrunner_test.go b/test/integration/queryrunner_test.go index 078911d7..2337757f 100644 --- a/test/integration/queryrunner_test.go +++ b/test/integration/queryrunner_test.go @@ -10,7 +10,7 @@ import ( "github.com/stretchr/testify/assert" ) -func TestName(t *testing.T) { +func TestQueryRunner(t *testing.T) { ctx := context.Background() queue, cleanup := createQueueDependencies(t, ctx, "queryrunner") diff --git a/test/integration/queryservice_test.go b/test/integration/queryservice_test.go index d6f57b7e..4b2f0808 100644 --- a/test/integration/queryservice_test.go +++ b/test/integration/queryservice_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" ) -func TestQuery(t *testing.T) { +func TestQueryService(t *testing.T) { ctx := context.Background() conn, cleanup := createAPIDependencies(t, ctx, "queryservice") @@ -16,11 +16,32 @@ func TestQuery(t *testing.T) { client := serviceinterfaces.NewQueryServiceClient(conn) - id := "sample_id" - - _, err := client.Get(ctx, &serviceinterfaces.IdMessage{ - Id: id, + config := "" + reqQueries := []string{} + idRes, err := client.Create(ctx, &serviceinterfaces.QueryCreate{ + Type: 1, + Config: &config, + RequiredQueries: reqQueries, }) - assert.Nil(t, err) + id := idRes.GetId() + assert.NotEmpty(t, id) + + // queryRes, err := client.Get(ctx, &serviceinterfaces.IdMessage{ + // Id: id, + // }) + // log.Print(err) + // assert.Nil(t, err) + // assert.EqualExportedValues(t, serviceinterfaces.Query{ + // Id: id, + // Type: serviceinterfaces.QueryType_QUERY_TYPE_CONTEXT_FULL, + // ActiveVersion: int32(1), + // LatestVersion: int32(1), + // Config: &config, + // RequiredQueries: reqQueries, + // }, *queryRes) + + //QueryService - List, Update, Test + //JobController - Create, Update, Get + //Export - Trigger } diff --git a/test/unit/internal/database/repository/querytype_test.go b/test/unit/internal/database/repository/querytype_test.go new file mode 100644 index 00000000..81b77b17 --- /dev/null +++ b/test/unit/internal/database/repository/querytype_test.go @@ -0,0 +1,37 @@ +package database_test + +import ( + "fmt" + "queryorchestration/internal/database/repository" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestQueryTypeScan(t *testing.T) { + qType := repository.Querytype(fmt.Sprint(0)) + + stringType := "context_full" + err := qType.Scan(stringType) + assert.Nil(t, err) +} + +func TestNullQueryTypeScan(t *testing.T) { + qType := repository.NullQuerytype{} + + stringType := "context_full" + err := qType.Scan(stringType) + assert.Nil(t, err) +} + +func TestNullQueryTypeValue(t *testing.T) { + qType := repository.NullQuerytype{} + + stringType := "context_full" + err := qType.Scan(stringType) + assert.Nil(t, err) + + val, err := qType.Value() + assert.Nil(t, err) + assert.Equal(t, stringType, val) +}