From 933d2d9703b8202ec75e6b90a550920ef5fc1643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Ga=C4=87e=C5=A1a?= Date: Thu, 28 Sep 2023 12:05:52 +0200 Subject: [PATCH] remove sqlx.DB from controllers and services --- app/api/controller/check/check_list.go | 3 +- app/api/controller/check/controller.go | 9 ++-- app/api/controller/check/wire.go | 6 +-- app/api/controller/connector/controller.go | 5 --- app/api/controller/connector/wire.go | 5 +-- app/api/controller/execution/controller.go | 9 ++-- app/api/controller/execution/list.go | 2 +- app/api/controller/execution/wire.go | 7 ++-- app/api/controller/githook/controller.go | 5 --- app/api/controller/githook/wire.go | 5 +-- app/api/controller/logs/controller.go | 5 --- app/api/controller/logs/wire.go | 5 +-- app/api/controller/pipeline/controller.go | 5 --- app/api/controller/pipeline/wire.go | 5 +-- app/api/controller/plugin/controller.go | 5 --- app/api/controller/plugin/wire.go | 7 +--- app/api/controller/pullreq/comment_status.go | 2 +- app/api/controller/pullreq/controller.go | 9 ++-- app/api/controller/pullreq/pr_list.go | 2 +- app/api/controller/pullreq/review_submit.go | 3 +- app/api/controller/pullreq/reviewer_add.go | 3 +- app/api/controller/pullreq/wire.go | 6 +-- app/api/controller/repo/controller.go | 9 ++-- app/api/controller/repo/import.go | 3 +- app/api/controller/repo/list_pipelines.go | 2 +- app/api/controller/repo/wire.go | 6 +-- app/api/controller/secret/controller.go | 5 --- app/api/controller/secret/wire.go | 5 +-- app/api/controller/service/controller.go | 4 +- app/api/controller/space/controller.go | 9 ++-- app/api/controller/space/create.go | 3 +- app/api/controller/space/export.go | 3 +- app/api/controller/space/import.go | 3 +- app/api/controller/space/list_secrets.go | 2 +- app/api/controller/space/list_spaces.go | 2 +- app/api/controller/space/membership_list.go | 2 +- app/api/controller/space/move.go | 3 +- app/api/controller/space/wire.go | 6 +-- app/api/controller/template/controller.go | 5 --- app/api/controller/template/wire.go | 5 +-- app/api/controller/trigger/controller.go | 5 --- app/api/controller/trigger/wire.go | 5 +-- app/api/controller/tx.go | 6 +-- app/api/controller/user/controller.go | 8 ++-- app/api/controller/user/membership_spaces.go | 2 +- app/api/controller/user/wire.go | 6 +-- app/api/controller/webhook/controller.go | 5 --- app/api/controller/webhook/wire.go | 12 +++--- app/pipeline/triggerer/trigger.go | 9 ++-- app/pipeline/triggerer/wire.go | 6 +-- app/services/importer/pipelines.go | 2 +- app/services/importer/repository.go | 4 +- app/services/importer/wire.go | 6 +-- app/services/pullreq/service.go | 5 --- app/services/pullreq/wire.go | 4 +- app/store/logs/db.go | 2 +- cmd/gitness/wire.go | 2 + cmd/gitness/wire_gen.go | 42 ++++++++++--------- livelog/wire.go | 4 +- store/database/dbtx/ctx.go | 15 +------ store/database/dbtx/db.go | 6 +-- store/database/dbtx/interface.go | 16 +++++--- store/database/dbtx/runner.go | 18 ++++---- store/database/dbtx/runner_test.go | 17 ++++---- store/database/dbtx/wire.go | 43 ++++++++++++++++++++ 65 files changed, 203 insertions(+), 237 deletions(-) create mode 100644 store/database/dbtx/wire.go diff --git a/app/api/controller/check/check_list.go b/app/api/controller/check/check_list.go index 6650f6a98..bb5336134 100644 --- a/app/api/controller/check/check_list.go +++ b/app/api/controller/check/check_list.go @@ -19,7 +19,6 @@ import ( "fmt" "github.com/harness/gitness/app/auth" - "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" ) @@ -40,7 +39,7 @@ func (c *Controller) ListChecks( var checks []types.Check var count int - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) (err error) { + err = c.tx.WithTx(ctx, func(ctx context.Context) (err error) { count, err = c.checkStore.Count(ctx, repo.ID, commitSHA, opts) if err != nil { return fmt.Errorf("failed to count status check results for repo=%s: %w", repo.UID, err) diff --git a/app/api/controller/check/controller.go b/app/api/controller/check/controller.go index f8afc2d9d..a6b16a179 100644 --- a/app/api/controller/check/controller.go +++ b/app/api/controller/check/controller.go @@ -24,14 +24,13 @@ import ( "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/store" "github.com/harness/gitness/gitrpc" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" - - "github.com/jmoiron/sqlx" ) type Controller struct { - db *sqlx.DB + tx dbtx.Transactor authorizer authz.Authorizer repoStore store.RepoStore checkStore store.CheckStore @@ -39,14 +38,14 @@ type Controller struct { } func NewController( - db *sqlx.DB, + tx dbtx.Transactor, authorizer authz.Authorizer, repoStore store.RepoStore, checkStore store.CheckStore, gitRPCClient gitrpc.Interface, ) *Controller { return &Controller{ - db: db, + tx: tx, authorizer: authorizer, repoStore: repoStore, checkStore: checkStore, diff --git a/app/api/controller/check/wire.go b/app/api/controller/check/wire.go index 6b69573e9..2c312fc8e 100644 --- a/app/api/controller/check/wire.go +++ b/app/api/controller/check/wire.go @@ -18,9 +18,9 @@ import ( "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/store" "github.com/harness/gitness/gitrpc" + "github.com/harness/gitness/store/database/dbtx" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -29,14 +29,14 @@ var WireSet = wire.NewSet( ) func ProvideController( - db *sqlx.DB, + tx dbtx.Transactor, authorizer authz.Authorizer, repoStore store.RepoStore, checkStore store.CheckStore, rpcClient gitrpc.Interface, ) *Controller { return NewController( - db, + tx, authorizer, repoStore, checkStore, diff --git a/app/api/controller/connector/controller.go b/app/api/controller/connector/controller.go index fbd5617ca..b6783c432 100644 --- a/app/api/controller/connector/controller.go +++ b/app/api/controller/connector/controller.go @@ -18,12 +18,9 @@ import ( "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/store" "github.com/harness/gitness/types/check" - - "github.com/jmoiron/sqlx" ) type Controller struct { - db *sqlx.DB uidCheck check.PathUID connectorStore store.ConnectorStore authorizer authz.Authorizer @@ -31,14 +28,12 @@ type Controller struct { } func NewController( - db *sqlx.DB, uidCheck check.PathUID, authorizer authz.Authorizer, connectorStore store.ConnectorStore, spaceStore store.SpaceStore, ) *Controller { return &Controller{ - db: db, uidCheck: uidCheck, connectorStore: connectorStore, authorizer: authorizer, diff --git a/app/api/controller/connector/wire.go b/app/api/controller/connector/wire.go index 96c97e10f..f9b9102f1 100644 --- a/app/api/controller/connector/wire.go +++ b/app/api/controller/connector/wire.go @@ -20,7 +20,6 @@ import ( "github.com/harness/gitness/types/check" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -28,11 +27,11 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(db *sqlx.DB, +func ProvideController( uidCheck check.PathUID, connectorStore store.ConnectorStore, authorizer authz.Authorizer, spaceStore store.SpaceStore, ) *Controller { - return NewController(db, uidCheck, authorizer, connectorStore, spaceStore) + return NewController(uidCheck, authorizer, connectorStore, spaceStore) } diff --git a/app/api/controller/execution/controller.go b/app/api/controller/execution/controller.go index bb71716e4..8424a2023 100644 --- a/app/api/controller/execution/controller.go +++ b/app/api/controller/execution/controller.go @@ -20,12 +20,11 @@ import ( "github.com/harness/gitness/app/pipeline/commit" "github.com/harness/gitness/app/pipeline/triggerer" "github.com/harness/gitness/app/store" - - "github.com/jmoiron/sqlx" + "github.com/harness/gitness/store/database/dbtx" ) type Controller struct { - db *sqlx.DB + tx dbtx.Transactor authorizer authz.Authorizer executionStore store.ExecutionStore checkStore store.CheckStore @@ -38,7 +37,7 @@ type Controller struct { } func NewController( - db *sqlx.DB, + tx dbtx.Transactor, authorizer authz.Authorizer, executionStore store.ExecutionStore, checkStore store.CheckStore, @@ -50,7 +49,7 @@ func NewController( pipelineStore store.PipelineStore, ) *Controller { return &Controller{ - db: db, + tx: tx, authorizer: authorizer, executionStore: executionStore, checkStore: checkStore, diff --git a/app/api/controller/execution/list.go b/app/api/controller/execution/list.go index 07d47598f..3cda998a3 100644 --- a/app/api/controller/execution/list.go +++ b/app/api/controller/execution/list.go @@ -50,7 +50,7 @@ func (c *Controller) List( var count int64 var executions []*types.Execution - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) (err error) { + err = c.tx.WithTx(ctx, func(ctx context.Context) (err error) { count, err = c.executionStore.Count(ctx, pipeline.ID) if err != nil { return fmt.Errorf("failed to count child executions: %w", err) diff --git a/app/api/controller/execution/wire.go b/app/api/controller/execution/wire.go index d6ddb7fc7..ea4586da7 100644 --- a/app/api/controller/execution/wire.go +++ b/app/api/controller/execution/wire.go @@ -20,9 +20,9 @@ import ( "github.com/harness/gitness/app/pipeline/commit" "github.com/harness/gitness/app/pipeline/triggerer" "github.com/harness/gitness/app/store" + "github.com/harness/gitness/store/database/dbtx" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -30,7 +30,8 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(db *sqlx.DB, +func ProvideController( + tx dbtx.Transactor, authorizer authz.Authorizer, executionStore store.ExecutionStore, checkStore store.CheckStore, @@ -41,6 +42,6 @@ func ProvideController(db *sqlx.DB, stageStore store.StageStore, pipelineStore store.PipelineStore, ) *Controller { - return NewController(db, authorizer, executionStore, checkStore, + return NewController(tx, authorizer, executionStore, checkStore, canceler, commitService, triggerer, repoStore, stageStore, pipelineStore) } diff --git a/app/api/controller/githook/controller.go b/app/api/controller/githook/controller.go index 72b50dc1f..f2432371a 100644 --- a/app/api/controller/githook/controller.go +++ b/app/api/controller/githook/controller.go @@ -26,8 +26,6 @@ import ( "github.com/harness/gitness/app/url" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" - - "github.com/jmoiron/sqlx" ) // ServerHookOutput represents the output of server hook api calls. @@ -54,7 +52,6 @@ type BaseInput struct { } type Controller struct { - db *sqlx.DB authorizer authz.Authorizer principalStore store.PrincipalStore repoStore store.RepoStore @@ -64,7 +61,6 @@ type Controller struct { } func NewController( - db *sqlx.DB, authorizer authz.Authorizer, principalStore store.PrincipalStore, repoStore store.RepoStore, @@ -73,7 +69,6 @@ func NewController( urlProvider url.Provider, ) *Controller { return &Controller{ - db: db, authorizer: authorizer, principalStore: principalStore, repoStore: repoStore, diff --git a/app/api/controller/githook/wire.go b/app/api/controller/githook/wire.go index 63d3a06f2..2769a661c 100644 --- a/app/api/controller/githook/wire.go +++ b/app/api/controller/githook/wire.go @@ -21,7 +21,6 @@ import ( "github.com/harness/gitness/app/url" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -29,8 +28,8 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(db *sqlx.DB, authorizer authz.Authorizer, principalStore store.PrincipalStore, +func ProvideController(authorizer authz.Authorizer, principalStore store.PrincipalStore, repoStore store.RepoStore, gitReporter *eventsgit.Reporter, pullreqStore store.PullReqStore, urlProvider url.Provider) *Controller { - return NewController(db, authorizer, principalStore, repoStore, gitReporter, pullreqStore, urlProvider) + return NewController(authorizer, principalStore, repoStore, gitReporter, pullreqStore, urlProvider) } diff --git a/app/api/controller/logs/controller.go b/app/api/controller/logs/controller.go index 40d819b95..bf994d310 100644 --- a/app/api/controller/logs/controller.go +++ b/app/api/controller/logs/controller.go @@ -18,12 +18,9 @@ import ( "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/store" "github.com/harness/gitness/livelog" - - "github.com/jmoiron/sqlx" ) type Controller struct { - db *sqlx.DB authorizer authz.Authorizer executionStore store.ExecutionStore repoStore store.RepoStore @@ -35,7 +32,6 @@ type Controller struct { } func NewController( - db *sqlx.DB, authorizer authz.Authorizer, executionStore store.ExecutionStore, repoStore store.RepoStore, @@ -46,7 +42,6 @@ func NewController( logStream livelog.LogStream, ) *Controller { return &Controller{ - db: db, authorizer: authorizer, executionStore: executionStore, repoStore: repoStore, diff --git a/app/api/controller/logs/wire.go b/app/api/controller/logs/wire.go index 2abd6a1d3..4b5820b14 100644 --- a/app/api/controller/logs/wire.go +++ b/app/api/controller/logs/wire.go @@ -20,7 +20,6 @@ import ( "github.com/harness/gitness/livelog" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -28,7 +27,7 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(db *sqlx.DB, +func ProvideController( authorizer authz.Authorizer, executionStore store.ExecutionStore, repoStore store.RepoStore, @@ -38,6 +37,6 @@ func ProvideController(db *sqlx.DB, logStore store.LogStore, logStream livelog.LogStream, ) *Controller { - return NewController(db, authorizer, executionStore, repoStore, + return NewController(authorizer, executionStore, repoStore, pipelineStore, stageStore, stepStore, logStore, logStream) } diff --git a/app/api/controller/pipeline/controller.go b/app/api/controller/pipeline/controller.go index 3d8656b35..d0618917e 100644 --- a/app/api/controller/pipeline/controller.go +++ b/app/api/controller/pipeline/controller.go @@ -18,13 +18,10 @@ import ( "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/store" "github.com/harness/gitness/types/check" - - "github.com/jmoiron/sqlx" ) type Controller struct { defaultBranch string - db *sqlx.DB uidCheck check.PathUID repoStore store.RepoStore triggerStore store.TriggerStore @@ -33,7 +30,6 @@ type Controller struct { } func NewController( - db *sqlx.DB, uidCheck check.PathUID, authorizer authz.Authorizer, repoStore store.RepoStore, @@ -41,7 +37,6 @@ func NewController( pipelineStore store.PipelineStore, ) *Controller { return &Controller{ - db: db, uidCheck: uidCheck, repoStore: repoStore, triggerStore: triggerStore, diff --git a/app/api/controller/pipeline/wire.go b/app/api/controller/pipeline/wire.go index b159fe762..592add22e 100644 --- a/app/api/controller/pipeline/wire.go +++ b/app/api/controller/pipeline/wire.go @@ -20,7 +20,6 @@ import ( "github.com/harness/gitness/types/check" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -28,13 +27,13 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(db *sqlx.DB, +func ProvideController( uidCheck check.PathUID, repoStore store.RepoStore, triggerStore store.TriggerStore, authorizer authz.Authorizer, pipelineStore store.PipelineStore, ) *Controller { - return NewController(db, uidCheck, authorizer, + return NewController(uidCheck, authorizer, repoStore, triggerStore, pipelineStore) } diff --git a/app/api/controller/plugin/controller.go b/app/api/controller/plugin/controller.go index 9d4d294d7..37cb1e29a 100644 --- a/app/api/controller/plugin/controller.go +++ b/app/api/controller/plugin/controller.go @@ -16,21 +16,16 @@ package plugin import ( "github.com/harness/gitness/app/store" - - "github.com/jmoiron/sqlx" ) type Controller struct { - db *sqlx.DB pluginStore store.PluginStore } func NewController( - db *sqlx.DB, pluginStore store.PluginStore, ) *Controller { return &Controller{ - db: db, pluginStore: pluginStore, } } diff --git a/app/api/controller/plugin/wire.go b/app/api/controller/plugin/wire.go index 423ff5dd2..3ebfffe44 100644 --- a/app/api/controller/plugin/wire.go +++ b/app/api/controller/plugin/wire.go @@ -18,7 +18,6 @@ import ( "github.com/harness/gitness/app/store" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -26,8 +25,6 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(db *sqlx.DB, - pluginStore store.PluginStore, -) *Controller { - return NewController(db, pluginStore) +func ProvideController(pluginStore store.PluginStore) *Controller { + return NewController(pluginStore) } diff --git a/app/api/controller/pullreq/comment_status.go b/app/api/controller/pullreq/comment_status.go index bbd310e15..f16aab947 100644 --- a/app/api/controller/pullreq/comment_status.go +++ b/app/api/controller/pullreq/comment_status.go @@ -67,7 +67,7 @@ func (c *Controller) CommentStatus( var pr *types.PullReq var act *types.PullReqActivity - err = controller.TxOptLock(ctx, c.db, func(ctx context.Context) error { + err = controller.TxOptLock(ctx, c.tx, func(ctx context.Context) error { pr, err = c.pullreqStore.FindByNumber(ctx, repo.ID, prNum) if err != nil { return fmt.Errorf("failed to find pull request by number: %w", err) diff --git a/app/api/controller/pullreq/controller.go b/app/api/controller/pullreq/controller.go index 8c90aa643..e7660bb3a 100644 --- a/app/api/controller/pullreq/controller.go +++ b/app/api/controller/pullreq/controller.go @@ -31,14 +31,13 @@ import ( "github.com/harness/gitness/gitrpc" gitrpcenum "github.com/harness/gitness/gitrpc/enum" "github.com/harness/gitness/lock" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" - - "github.com/jmoiron/sqlx" ) type Controller struct { - db *sqlx.DB + tx dbtx.Transactor urlProvider url.Provider authorizer authz.Authorizer pullreqStore store.PullReqStore @@ -58,7 +57,7 @@ type Controller struct { } func NewController( - db *sqlx.DB, + tx dbtx.Transactor, urlProvider url.Provider, authorizer authz.Authorizer, pullreqStore store.PullReqStore, @@ -77,7 +76,7 @@ func NewController( sseStreamer sse.Streamer, ) *Controller { return &Controller{ - db: db, + tx: tx, urlProvider: urlProvider, authorizer: authorizer, pullreqStore: pullreqStore, diff --git a/app/api/controller/pullreq/pr_list.go b/app/api/controller/pullreq/pr_list.go index e070e42e8..d761df25f 100644 --- a/app/api/controller/pullreq/pr_list.go +++ b/app/api/controller/pullreq/pr_list.go @@ -52,7 +52,7 @@ func (c *Controller) List( filter.TargetRepoID = repo.ID - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { + err = c.tx.WithTx(ctx, func(ctx context.Context) error { list, err = c.pullreqStore.List(ctx, filter) if err != nil { return fmt.Errorf("failed to list pull requests: %w", err) diff --git a/app/api/controller/pullreq/review_submit.go b/app/api/controller/pullreq/review_submit.go index e6edd38a3..7edae4aac 100644 --- a/app/api/controller/pullreq/review_submit.go +++ b/app/api/controller/pullreq/review_submit.go @@ -25,7 +25,6 @@ import ( "github.com/harness/gitness/app/auth" "github.com/harness/gitness/gitrpc" "github.com/harness/gitness/store" - "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" @@ -98,7 +97,7 @@ func (c *Controller) ReviewSubmit( var review *types.PullReqReview - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { + err = c.tx.WithTx(ctx, func(ctx context.Context) error { now := time.Now().UnixMilli() review = &types.PullReqReview{ ID: 0, diff --git a/app/api/controller/pullreq/reviewer_add.go b/app/api/controller/pullreq/reviewer_add.go index da062b6fa..8444898ea 100644 --- a/app/api/controller/pullreq/reviewer_add.go +++ b/app/api/controller/pullreq/reviewer_add.go @@ -24,7 +24,6 @@ import ( "github.com/harness/gitness/app/api/usererror" "github.com/harness/gitness/app/auth" "github.com/harness/gitness/store" - "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" @@ -95,7 +94,7 @@ func (c *Controller) ReviewerAdd( var reviewer *types.PullReqReviewer - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { + err = c.tx.WithTx(ctx, func(ctx context.Context) error { reviewer, err = c.reviewerStore.Find(ctx, pr.ID, in.ReviewerID) if err != nil && !errors.Is(err, store.ErrResourceNotFound) { return err diff --git a/app/api/controller/pullreq/wire.go b/app/api/controller/pullreq/wire.go index a29ab4abd..de9d2b976 100644 --- a/app/api/controller/pullreq/wire.go +++ b/app/api/controller/pullreq/wire.go @@ -24,9 +24,9 @@ import ( "github.com/harness/gitness/app/url" "github.com/harness/gitness/gitrpc" "github.com/harness/gitness/lock" + "github.com/harness/gitness/store/database/dbtx" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -34,7 +34,7 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(db *sqlx.DB, urlProvider url.Provider, authorizer authz.Authorizer, +func ProvideController(tx dbtx.Transactor, urlProvider url.Provider, authorizer authz.Authorizer, pullReqStore store.PullReqStore, pullReqActivityStore store.PullReqActivityStore, codeCommentsView store.CodeCommentView, pullReqReviewStore store.PullReqReviewStore, pullReqReviewerStore store.PullReqReviewerStore, @@ -43,7 +43,7 @@ func ProvideController(db *sqlx.DB, urlProvider url.Provider, authorizer authz.A mtxManager lock.MutexManager, codeCommentMigrator *codecomments.Migrator, pullreqService *pullreq.Service, sseStreamer sse.Streamer, ) *Controller { - return NewController(db, urlProvider, authorizer, + return NewController(tx, urlProvider, authorizer, pullReqStore, pullReqActivityStore, codeCommentsView, pullReqReviewStore, pullReqReviewerStore, diff --git a/app/api/controller/repo/controller.go b/app/api/controller/repo/controller.go index a44a38089..2d5255b97 100644 --- a/app/api/controller/repo/controller.go +++ b/app/api/controller/repo/controller.go @@ -29,16 +29,15 @@ import ( "github.com/harness/gitness/app/store" "github.com/harness/gitness/app/url" "github.com/harness/gitness/gitrpc" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" "github.com/harness/gitness/types/enum" - - "github.com/jmoiron/sqlx" ) type Controller struct { defaultBranch string - db *sqlx.DB + tx dbtx.Transactor urlProvider url.Provider uidCheck check.PathUID authorizer authz.Authorizer @@ -52,7 +51,7 @@ type Controller struct { func NewController( defaultBranch string, - db *sqlx.DB, + tx dbtx.Transactor, urlProvider url.Provider, uidCheck check.PathUID, authorizer authz.Authorizer, @@ -65,7 +64,7 @@ func NewController( ) *Controller { return &Controller{ defaultBranch: defaultBranch, - db: db, + tx: tx, urlProvider: urlProvider, uidCheck: uidCheck, authorizer: authorizer, diff --git a/app/api/controller/repo/import.go b/app/api/controller/repo/import.go index 5333bb6e6..f8f8c8035 100644 --- a/app/api/controller/repo/import.go +++ b/app/api/controller/repo/import.go @@ -20,7 +20,6 @@ import ( "github.com/harness/gitness/app/auth" "github.com/harness/gitness/app/services/importer" - "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" ) @@ -51,7 +50,7 @@ func (c *Controller) Import(ctx context.Context, session *auth.Session, in *Impo } var repo *types.Repository - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { + err = c.tx.WithTx(ctx, func(ctx context.Context) error { repo = remoteRepository.ToRepo(parentSpace.ID, in.UID, in.Description, &session.Principal) err = c.repoStore.Create(ctx, repo) diff --git a/app/api/controller/repo/list_pipelines.go b/app/api/controller/repo/list_pipelines.go index 087bb1421..39d08112f 100644 --- a/app/api/controller/repo/list_pipelines.go +++ b/app/api/controller/repo/list_pipelines.go @@ -40,7 +40,7 @@ func (c *Controller) ListPipelines( var count int64 var pipelines []*types.Pipeline - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) (err error) { + err = c.tx.WithTx(ctx, func(ctx context.Context) (err error) { count, err = c.pipelineStore.Count(ctx, repo.ID, filter) if err != nil { return fmt.Errorf("failed to count child executions: %w", err) diff --git a/app/api/controller/repo/wire.go b/app/api/controller/repo/wire.go index 71a08791c..09586e1d6 100644 --- a/app/api/controller/repo/wire.go +++ b/app/api/controller/repo/wire.go @@ -20,11 +20,11 @@ import ( "github.com/harness/gitness/app/store" "github.com/harness/gitness/app/url" "github.com/harness/gitness/gitrpc" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -32,13 +32,13 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(config *types.Config, db *sqlx.DB, urlProvider url.Provider, +func ProvideController(config *types.Config, tx dbtx.Transactor, urlProvider url.Provider, uidCheck check.PathUID, authorizer authz.Authorizer, repoStore store.RepoStore, spaceStore store.SpaceStore, pipelineStore store.PipelineStore, principalStore store.PrincipalStore, rpcClient gitrpc.Interface, importer *importer.Repository, ) *Controller { - return NewController(config.Git.DefaultBranch, db, urlProvider, + return NewController(config.Git.DefaultBranch, tx, urlProvider, uidCheck, authorizer, repoStore, spaceStore, pipelineStore, principalStore, rpcClient, importer) diff --git a/app/api/controller/secret/controller.go b/app/api/controller/secret/controller.go index ce72bc843..9e96039d1 100644 --- a/app/api/controller/secret/controller.go +++ b/app/api/controller/secret/controller.go @@ -19,12 +19,9 @@ import ( "github.com/harness/gitness/app/store" "github.com/harness/gitness/encrypt" "github.com/harness/gitness/types/check" - - "github.com/jmoiron/sqlx" ) type Controller struct { - db *sqlx.DB uidCheck check.PathUID encrypter encrypt.Encrypter secretStore store.SecretStore @@ -33,7 +30,6 @@ type Controller struct { } func NewController( - db *sqlx.DB, uidCheck check.PathUID, authorizer authz.Authorizer, encrypter encrypt.Encrypter, @@ -41,7 +37,6 @@ func NewController( spaceStore store.SpaceStore, ) *Controller { return &Controller{ - db: db, uidCheck: uidCheck, encrypter: encrypter, secretStore: secretStore, diff --git a/app/api/controller/secret/wire.go b/app/api/controller/secret/wire.go index d57f04eb5..2681d2b43 100644 --- a/app/api/controller/secret/wire.go +++ b/app/api/controller/secret/wire.go @@ -21,7 +21,6 @@ import ( "github.com/harness/gitness/types/check" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -29,12 +28,12 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(db *sqlx.DB, +func ProvideController( uidCheck check.PathUID, encrypter encrypt.Encrypter, secretStore store.SecretStore, authorizer authz.Authorizer, spaceStore store.SpaceStore, ) *Controller { - return NewController(db, uidCheck, authorizer, encrypter, secretStore, spaceStore) + return NewController(uidCheck, authorizer, encrypter, secretStore, spaceStore) } diff --git a/app/api/controller/service/controller.go b/app/api/controller/service/controller.go index 9e145c37a..589e15fa4 100644 --- a/app/api/controller/service/controller.go +++ b/app/api/controller/service/controller.go @@ -39,6 +39,8 @@ func NewController(principalUIDCheck check.PrincipalUID, authorizer authz.Author } func findServiceFromUID(ctx context.Context, - principalStore store.PrincipalStore, serviceUID string) (*types.Service, error) { + principalStore store.PrincipalStore, + serviceUID string, +) (*types.Service, error) { return principalStore.FindServiceByUID(ctx, serviceUID) } diff --git a/app/api/controller/space/controller.go b/app/api/controller/space/controller.go index 4d837554c..f736b5fd7 100644 --- a/app/api/controller/space/controller.go +++ b/app/api/controller/space/controller.go @@ -23,10 +23,9 @@ import ( "github.com/harness/gitness/app/sse" "github.com/harness/gitness/app/store" "github.com/harness/gitness/app/url" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" - - "github.com/jmoiron/sqlx" ) var ( @@ -37,7 +36,7 @@ var ( type Controller struct { nestedSpacesEnabled bool - db *sqlx.DB + tx dbtx.Transactor urlProvider url.Provider sseStreamer sse.Streamer uidCheck check.PathUID @@ -56,7 +55,7 @@ type Controller struct { exporter *exporter.Repository } -func NewController(config *types.Config, db *sqlx.DB, urlProvider url.Provider, +func NewController(config *types.Config, tx dbtx.Transactor, urlProvider url.Provider, sseStreamer sse.Streamer, uidCheck check.PathUID, authorizer authz.Authorizer, spacePathStore store.SpacePathStore, pipelineStore store.PipelineStore, secretStore store.SecretStore, connectorStore store.ConnectorStore, templateStore store.TemplateStore, spaceStore store.SpaceStore, @@ -65,7 +64,7 @@ func NewController(config *types.Config, db *sqlx.DB, urlProvider url.Provider, ) *Controller { return &Controller{ nestedSpacesEnabled: config.NestedSpacesEnabled, - db: db, + tx: tx, urlProvider: urlProvider, sseStreamer: sseStreamer, uidCheck: uidCheck, diff --git a/app/api/controller/space/create.go b/app/api/controller/space/create.go index 726939ee3..f6fc59fe5 100644 --- a/app/api/controller/space/create.go +++ b/app/api/controller/space/create.go @@ -26,7 +26,6 @@ import ( "github.com/harness/gitness/app/auth" "github.com/harness/gitness/app/bootstrap" "github.com/harness/gitness/app/paths" - "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" "github.com/harness/gitness/types/enum" @@ -61,7 +60,7 @@ func (c *Controller) Create( return nil, fmt.Errorf("failed to sanitize input: %w", err) } var space *types.Space - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { + err = c.tx.WithTx(ctx, func(ctx context.Context) error { space, err = c.createSpaceInnerInTX(ctx, session, parentID, in) return err }) diff --git a/app/api/controller/space/export.go b/app/api/controller/space/export.go index 7b5cfdb2b..6892f2ba8 100644 --- a/app/api/controller/space/export.go +++ b/app/api/controller/space/export.go @@ -23,7 +23,6 @@ import ( "github.com/harness/gitness/app/api/usererror" "github.com/harness/gitness/app/auth" "github.com/harness/gitness/app/services/exporter" - "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" ) @@ -72,7 +71,7 @@ func (c *Controller) Export(ctx context.Context, session *auth.Session, spaceRef repos = append(repos, reposInPage...) } - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { + err = c.tx.WithTx(ctx, func(ctx context.Context) error { err = c.exporter.RunManyForSpace(ctx, space.ID, repos, providerInfo) if errors.Is(err, exporter.ErrJobRunning) { return usererror.ConflictWithPayload("export already in progress") diff --git a/app/api/controller/space/import.go b/app/api/controller/space/import.go index 2d665a86a..fca6c1342 100644 --- a/app/api/controller/space/import.go +++ b/app/api/controller/space/import.go @@ -21,7 +21,6 @@ import ( "github.com/harness/gitness/app/api/usererror" "github.com/harness/gitness/app/auth" "github.com/harness/gitness/app/services/importer" - "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" ) @@ -60,7 +59,7 @@ func (c *Controller) Import(ctx context.Context, session *auth.Session, in *Impo cloneURLs := make([]string, len(remoteRepositories)) var space *types.Space - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { + err = c.tx.WithTx(ctx, func(ctx context.Context) error { space, err = c.createSpaceInnerInTX(ctx, session, parentSpaceID, &in.CreateInput) if err != nil { return err diff --git a/app/api/controller/space/list_secrets.go b/app/api/controller/space/list_secrets.go index 7aa1c0e9d..7bb7bf97d 100644 --- a/app/api/controller/space/list_secrets.go +++ b/app/api/controller/space/list_secrets.go @@ -45,7 +45,7 @@ func (c *Controller) ListSecrets( var count int64 var secrets []*types.Secret - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) (err error) { + err = c.tx.WithTx(ctx, func(ctx context.Context) (err error) { count, err = c.secretStore.Count(ctx, space.ID, filter) if err != nil { return fmt.Errorf("failed to count child executions: %w", err) diff --git a/app/api/controller/space/list_spaces.go b/app/api/controller/space/list_spaces.go index aa34ae087..c0b3c689d 100644 --- a/app/api/controller/space/list_spaces.go +++ b/app/api/controller/space/list_spaces.go @@ -51,7 +51,7 @@ func (c *Controller) ListSpacesNoAuth( var spaces []*types.Space var count int64 - err := dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) (err error) { + err := c.tx.WithTx(ctx, func(ctx context.Context) (err error) { count, err = c.spaceStore.Count(ctx, spaceID, filter) if err != nil { return fmt.Errorf("failed to count child spaces: %w", err) diff --git a/app/api/controller/space/membership_list.go b/app/api/controller/space/membership_list.go index c8b9223bd..1f4e9f936 100644 --- a/app/api/controller/space/membership_list.go +++ b/app/api/controller/space/membership_list.go @@ -43,7 +43,7 @@ func (c *Controller) MembershipList(ctx context.Context, var memberships []types.MembershipUser var membershipsCount int64 - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { + err = c.tx.WithTx(ctx, func(ctx context.Context) error { memberships, err = c.membershipStore.ListUsers(ctx, space.ID, filter) if err != nil { return fmt.Errorf("failed to list memberships for space: %w", err) diff --git a/app/api/controller/space/move.go b/app/api/controller/space/move.go index 6090073e4..a9b6b14fa 100644 --- a/app/api/controller/space/move.go +++ b/app/api/controller/space/move.go @@ -21,7 +21,6 @@ import ( apiauth "github.com/harness/gitness/app/api/auth" "github.com/harness/gitness/app/auth" - "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" ) @@ -95,7 +94,7 @@ func (c *Controller) moveInner( space *types.Space, inUID *string, ) error { - return dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { + return c.tx.WithTx(ctx, func(ctx context.Context) error { // delete old primary segment err := c.spacePathStore.DeletePrimarySegment(ctx, space.ID) if err != nil { diff --git a/app/api/controller/space/wire.go b/app/api/controller/space/wire.go index 4eb2aab5d..11cc644e3 100644 --- a/app/api/controller/space/wire.go +++ b/app/api/controller/space/wire.go @@ -22,11 +22,11 @@ import ( "github.com/harness/gitness/app/sse" "github.com/harness/gitness/app/store" "github.com/harness/gitness/app/url" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -34,7 +34,7 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(config *types.Config, db *sqlx.DB, urlProvider url.Provider, sseStreamer sse.Streamer, +func ProvideController(config *types.Config, tx dbtx.Transactor, urlProvider url.Provider, sseStreamer sse.Streamer, uidCheck check.PathUID, authorizer authz.Authorizer, spacePathStore store.SpacePathStore, pipelineStore store.PipelineStore, secretStore store.SecretStore, connectorStore store.ConnectorStore, templateStore store.TemplateStore, @@ -42,7 +42,7 @@ func ProvideController(config *types.Config, db *sqlx.DB, urlProvider url.Provid repoCtrl *repo.Controller, membershipStore store.MembershipStore, importer *importer.Repository, exporter *exporter.Repository, ) *Controller { - return NewController(config, db, urlProvider, sseStreamer, uidCheck, authorizer, + return NewController(config, tx, urlProvider, sseStreamer, uidCheck, authorizer, spacePathStore, pipelineStore, secretStore, connectorStore, templateStore, spaceStore, repoStore, principalStore, diff --git a/app/api/controller/template/controller.go b/app/api/controller/template/controller.go index b91786a0b..e3f84f777 100644 --- a/app/api/controller/template/controller.go +++ b/app/api/controller/template/controller.go @@ -18,12 +18,9 @@ import ( "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/store" "github.com/harness/gitness/types/check" - - "github.com/jmoiron/sqlx" ) type Controller struct { - db *sqlx.DB uidCheck check.PathUID templateStore store.TemplateStore authorizer authz.Authorizer @@ -31,14 +28,12 @@ type Controller struct { } func NewController( - db *sqlx.DB, uidCheck check.PathUID, authorizer authz.Authorizer, templateStore store.TemplateStore, spaceStore store.SpaceStore, ) *Controller { return &Controller{ - db: db, uidCheck: uidCheck, templateStore: templateStore, authorizer: authorizer, diff --git a/app/api/controller/template/wire.go b/app/api/controller/template/wire.go index 81f262d71..9cc8c9f5b 100644 --- a/app/api/controller/template/wire.go +++ b/app/api/controller/template/wire.go @@ -20,7 +20,6 @@ import ( "github.com/harness/gitness/types/check" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -28,11 +27,11 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(db *sqlx.DB, +func ProvideController( uidCheck check.PathUID, templateStore store.TemplateStore, authorizer authz.Authorizer, spaceStore store.SpaceStore, ) *Controller { - return NewController(db, uidCheck, authorizer, templateStore, spaceStore) + return NewController(uidCheck, authorizer, templateStore, spaceStore) } diff --git a/app/api/controller/trigger/controller.go b/app/api/controller/trigger/controller.go index 1c08570b0..2bbcf3bc0 100644 --- a/app/api/controller/trigger/controller.go +++ b/app/api/controller/trigger/controller.go @@ -18,12 +18,9 @@ import ( "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/store" "github.com/harness/gitness/types/check" - - "github.com/jmoiron/sqlx" ) type Controller struct { - db *sqlx.DB authorizer authz.Authorizer triggerStore store.TriggerStore uidCheck check.PathUID @@ -32,7 +29,6 @@ type Controller struct { } func NewController( - db *sqlx.DB, authorizer authz.Authorizer, triggerStore store.TriggerStore, uidCheck check.PathUID, @@ -40,7 +36,6 @@ func NewController( repoStore store.RepoStore, ) *Controller { return &Controller{ - db: db, authorizer: authorizer, triggerStore: triggerStore, uidCheck: uidCheck, diff --git a/app/api/controller/trigger/wire.go b/app/api/controller/trigger/wire.go index f1b4753d6..2021b3f88 100644 --- a/app/api/controller/trigger/wire.go +++ b/app/api/controller/trigger/wire.go @@ -20,7 +20,6 @@ import ( "github.com/harness/gitness/types/check" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -28,12 +27,12 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(db *sqlx.DB, +func ProvideController( authorizer authz.Authorizer, triggerStore store.TriggerStore, uidCheck check.PathUID, pipelineStore store.PipelineStore, repoStore store.RepoStore, ) *Controller { - return NewController(db, authorizer, triggerStore, uidCheck, pipelineStore, repoStore) + return NewController(authorizer, triggerStore, uidCheck, pipelineStore, repoStore) } diff --git a/app/api/controller/tx.go b/app/api/controller/tx.go index 95c0f9111..8cbb7767a 100644 --- a/app/api/controller/tx.go +++ b/app/api/controller/tx.go @@ -20,8 +20,6 @@ import ( "github.com/harness/gitness/store" "github.com/harness/gitness/store/database/dbtx" - - "github.com/jmoiron/sqlx" ) type TxOptionRetryCount int @@ -30,7 +28,7 @@ type TxOptionRetryCount int // during the operation, the function will retry the whole transaction again (to the maximum of 5 times, // but this can be overridden by providing an additional TxOptionRetryCount option). func TxOptLock(ctx context.Context, - db *sqlx.DB, + tx dbtx.Transactor, txFn func(ctx context.Context) error, opts ...interface{}, ) (err error) { @@ -42,7 +40,7 @@ func TxOptLock(ctx context.Context, } for try := 0; try < tries; try++ { - err = dbtx.New(db).WithTx(ctx, txFn, opts...) + err = tx.WithTx(ctx, txFn, opts...) if !errors.Is(err, store.ErrVersionConflict) { break } diff --git a/app/api/controller/user/controller.go b/app/api/controller/user/controller.go index f66ae0fd2..3f18dd448 100644 --- a/app/api/controller/user/controller.go +++ b/app/api/controller/user/controller.go @@ -19,16 +19,16 @@ import ( "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/store" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" "github.com/harness/gitness/types/enum" - "github.com/jmoiron/sqlx" "golang.org/x/crypto/bcrypt" ) type Controller struct { - db *sqlx.DB + tx dbtx.Transactor principalUIDCheck check.PrincipalUID authorizer authz.Authorizer principalStore store.PrincipalStore @@ -37,7 +37,7 @@ type Controller struct { } func NewController( - db *sqlx.DB, + tx dbtx.Transactor, principalUIDCheck check.PrincipalUID, authorizer authz.Authorizer, principalStore store.PrincipalStore, @@ -45,7 +45,7 @@ func NewController( membershipStore store.MembershipStore, ) *Controller { return &Controller{ - db: db, + tx: tx, principalUIDCheck: principalUIDCheck, authorizer: authorizer, principalStore: principalStore, diff --git a/app/api/controller/user/membership_spaces.go b/app/api/controller/user/membership_spaces.go index e3688ae81..fbcdbd57b 100644 --- a/app/api/controller/user/membership_spaces.go +++ b/app/api/controller/user/membership_spaces.go @@ -44,7 +44,7 @@ func (c *Controller) MembershipSpaces(ctx context.Context, var membershipSpaces []types.MembershipSpace var membershipsCount int64 - err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) error { + err = c.tx.WithTx(ctx, func(ctx context.Context) error { membershipSpaces, err = c.membershipStore.ListSpaces(ctx, user.ID, filter) if err != nil { return fmt.Errorf("failed to list membership spaces for user: %w", err) diff --git a/app/api/controller/user/wire.go b/app/api/controller/user/wire.go index 2ebf7a83b..e01ab6ba3 100644 --- a/app/api/controller/user/wire.go +++ b/app/api/controller/user/wire.go @@ -17,10 +17,10 @@ package user import ( "github.com/harness/gitness/app/auth/authz" "github.com/harness/gitness/app/store" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types/check" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -29,7 +29,7 @@ var WireSet = wire.NewSet( ) func ProvideController( - db *sqlx.DB, + tx dbtx.Transactor, principalUIDCheck check.PrincipalUID, authorizer authz.Authorizer, principalStore store.PrincipalStore, @@ -37,7 +37,7 @@ func ProvideController( membershipStore store.MembershipStore, ) *Controller { return NewController( - db, + tx, principalUIDCheck, authorizer, principalStore, diff --git a/app/api/controller/webhook/controller.go b/app/api/controller/webhook/controller.go index 861ecdca1..2763ea603 100644 --- a/app/api/controller/webhook/controller.go +++ b/app/api/controller/webhook/controller.go @@ -27,15 +27,12 @@ import ( "github.com/harness/gitness/encrypt" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" - - "github.com/jmoiron/sqlx" ) type Controller struct { allowLoopback bool allowPrivateNetwork bool - db *sqlx.DB authorizer authz.Authorizer webhookStore store.WebhookStore webhookExecutionStore store.WebhookExecutionStore @@ -47,7 +44,6 @@ type Controller struct { func NewController( allowLoopback bool, allowPrivateNetwork bool, - db *sqlx.DB, authorizer authz.Authorizer, webhookStore store.WebhookStore, webhookExecutionStore store.WebhookExecutionStore, @@ -58,7 +54,6 @@ func NewController( return &Controller{ allowLoopback: allowLoopback, allowPrivateNetwork: allowPrivateNetwork, - db: db, authorizer: authorizer, webhookStore: webhookStore, webhookExecutionStore: webhookExecutionStore, diff --git a/app/api/controller/webhook/wire.go b/app/api/controller/webhook/wire.go index 88b0ff7d1..749f0d0f9 100644 --- a/app/api/controller/webhook/wire.go +++ b/app/api/controller/webhook/wire.go @@ -21,7 +21,6 @@ import ( "github.com/harness/gitness/encrypt" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -29,9 +28,12 @@ var WireSet = wire.NewSet( ProvideController, ) -func ProvideController(config webhook.Config, db *sqlx.DB, authorizer authz.Authorizer, +func ProvideController(config webhook.Config, authorizer authz.Authorizer, webhookStore store.WebhookStore, webhookExecutionStore store.WebhookExecutionStore, - repoStore store.RepoStore, webhookService *webhook.Service, encrypter encrypt.Encrypter) *Controller { - return NewController(config.AllowLoopback, config.AllowPrivateNetwork, - db, authorizer, webhookStore, webhookExecutionStore, repoStore, webhookService, encrypter) + repoStore store.RepoStore, webhookService *webhook.Service, encrypter encrypt.Encrypter, +) *Controller { + return NewController( + config.AllowLoopback, config.AllowPrivateNetwork, authorizer, + webhookStore, webhookExecutionStore, + repoStore, webhookService, encrypter) } diff --git a/app/pipeline/triggerer/trigger.go b/app/pipeline/triggerer/trigger.go index e341022cf..b12c59242 100644 --- a/app/pipeline/triggerer/trigger.go +++ b/app/pipeline/triggerer/trigger.go @@ -37,7 +37,6 @@ import ( "github.com/drone/drone-yaml/yaml/linter" v1yaml "github.com/drone/spec/dist/go" "github.com/drone/spec/dist/go/parse/normalize" - "github.com/jmoiron/sqlx" "github.com/rs/zerolog/log" ) @@ -80,7 +79,7 @@ type triggerer struct { executionStore store.ExecutionStore checkStore store.CheckStore stageStore store.StageStore - db *sqlx.DB + tx dbtx.Transactor pipelineStore store.PipelineStore fileService file.Service scheduler scheduler.Scheduler @@ -92,7 +91,7 @@ func New( checkStore store.CheckStore, stageStore store.StageStore, pipelineStore store.PipelineStore, - db *sqlx.DB, + tx dbtx.Transactor, repoStore store.RepoStore, scheduler scheduler.Scheduler, fileService file.Service, @@ -102,7 +101,7 @@ func New( checkStore: checkStore, stageStore: stageStore, scheduler: scheduler, - db: db, + tx: tx, pipelineStore: pipelineStore, fileService: fileService, repoStore: repoStore, @@ -449,7 +448,7 @@ func (t *triggerer) createExecutionWithStages( execution *types.Execution, stages []*types.Stage, ) error { - return dbtx.New(t.db).WithTx(ctx, func(ctx context.Context) error { + return t.tx.WithTx(ctx, func(ctx context.Context) error { err := t.executionStore.Create(ctx, execution) if err != nil { return err diff --git a/app/pipeline/triggerer/wire.go b/app/pipeline/triggerer/wire.go index 69d771dde..8209492ab 100644 --- a/app/pipeline/triggerer/wire.go +++ b/app/pipeline/triggerer/wire.go @@ -18,9 +18,9 @@ import ( "github.com/harness/gitness/app/pipeline/file" "github.com/harness/gitness/app/pipeline/scheduler" "github.com/harness/gitness/app/store" + "github.com/harness/gitness/store/database/dbtx" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) // WireSet provides a wire set for this package. @@ -33,12 +33,12 @@ func ProvideTriggerer( executionStore store.ExecutionStore, checkStore store.CheckStore, stageStore store.StageStore, - db *sqlx.DB, + tx dbtx.Transactor, pipelineStore store.PipelineStore, fileService file.Service, scheduler scheduler.Scheduler, repoStore store.RepoStore, ) Triggerer { return New(executionStore, checkStore, stageStore, pipelineStore, - db, repoStore, scheduler, fileService) + tx, repoStore, scheduler, fileService) } diff --git a/app/services/importer/pipelines.go b/app/services/importer/pipelines.go index f93d8a398..6cd3ae4df 100644 --- a/app/services/importer/pipelines.go +++ b/app/services/importer/pipelines.go @@ -90,7 +90,7 @@ func (r *Repository) processPipelines(ctx context.Context, nowMilli := now.UnixMilli() - err = dbtx.New(r.db).WithTx(ctx, func(ctx context.Context) error { + err = r.tx.WithTx(ctx, func(ctx context.Context) error { for _, p := range pipelineFiles { pipeline := &types.Pipeline{ Description: "", diff --git a/app/services/importer/repository.go b/app/services/importer/repository.go index e78d5f677..fcbc2fb07 100644 --- a/app/services/importer/repository.go +++ b/app/services/importer/repository.go @@ -33,10 +33,10 @@ import ( "github.com/harness/gitness/encrypt" "github.com/harness/gitness/gitrpc" gitness_store "github.com/harness/gitness/store" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" - "github.com/jmoiron/sqlx" "github.com/rs/zerolog/log" ) @@ -54,7 +54,7 @@ type Repository struct { defaultBranch string urlProvider gitnessurl.Provider git gitrpc.Interface - db *sqlx.DB + tx dbtx.Transactor repoStore store.RepoStore pipelineStore store.PipelineStore triggerStore store.TriggerStore diff --git a/app/services/importer/wire.go b/app/services/importer/wire.go index c4348aab7..435164383 100644 --- a/app/services/importer/wire.go +++ b/app/services/importer/wire.go @@ -21,10 +21,10 @@ import ( "github.com/harness/gitness/app/url" "github.com/harness/gitness/encrypt" "github.com/harness/gitness/gitrpc" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) var WireSet = wire.NewSet( @@ -35,7 +35,7 @@ func ProvideRepoImporter( config *types.Config, urlProvider url.Provider, git gitrpc.Interface, - db *sqlx.DB, + tx dbtx.Transactor, repoStore store.RepoStore, pipelineStore store.PipelineStore, triggerStore store.TriggerStore, @@ -48,7 +48,7 @@ func ProvideRepoImporter( defaultBranch: config.Git.DefaultBranch, urlProvider: urlProvider, git: git, - db: db, + tx: tx, repoStore: repoStore, pipelineStore: pipelineStore, triggerStore: triggerStore, diff --git a/app/services/pullreq/service.go b/app/services/pullreq/service.go index 4b146e173..da8f5ac1b 100644 --- a/app/services/pullreq/service.go +++ b/app/services/pullreq/service.go @@ -33,14 +33,11 @@ import ( "github.com/harness/gitness/pubsub" "github.com/harness/gitness/stream" "github.com/harness/gitness/types" - - "github.com/jmoiron/sqlx" ) type Service struct { pullreqEvReporter *pullreqevents.Reporter gitRPCClient gitrpc.Interface - db *sqlx.DB repoGitInfoCache store.RepoGitInfoCache repoStore store.RepoStore pullreqStore store.PullReqStore @@ -64,7 +61,6 @@ func New(ctx context.Context, pullreqEvReaderFactory *events.ReaderFactory[*pullreqevents.Reader], pullreqEvReporter *pullreqevents.Reporter, gitRPCClient gitrpc.Interface, - db *sqlx.DB, repoGitInfoCache store.RepoGitInfoCache, repoStore store.RepoStore, pullreqStore store.PullReqStore, @@ -79,7 +75,6 @@ func New(ctx context.Context, service := &Service{ pullreqEvReporter: pullreqEvReporter, gitRPCClient: gitRPCClient, - db: db, repoGitInfoCache: repoGitInfoCache, repoStore: repoStore, pullreqStore: pullreqStore, diff --git a/app/services/pullreq/wire.go b/app/services/pullreq/wire.go index 2c393bb24..075981909 100644 --- a/app/services/pullreq/wire.go +++ b/app/services/pullreq/wire.go @@ -29,7 +29,6 @@ import ( "github.com/harness/gitness/types" "github.com/google/wire" - "github.com/jmoiron/sqlx" ) var WireSet = wire.NewSet( @@ -42,7 +41,6 @@ func ProvideService(ctx context.Context, pullReqEvFactory *events.ReaderFactory[*pullreqevents.Reader], pullReqEvReporter *pullreqevents.Reporter, gitRPCClient gitrpc.Interface, - db *sqlx.DB, repoGitInfoCache store.RepoGitInfoCache, repoStore store.RepoStore, pullreqStore store.PullReqStore, @@ -55,6 +53,6 @@ func ProvideService(ctx context.Context, sseStreamer sse.Streamer, ) (*Service, error) { return New(ctx, config, gitReaderFactory, pullReqEvFactory, pullReqEvReporter, gitRPCClient, - db, repoGitInfoCache, repoStore, pullreqStore, activityStore, + repoGitInfoCache, repoStore, pullreqStore, activityStore, codeCommentView, codeCommentMigrator, fileViewStore, pubsub, urlProvider, sseStreamer) } diff --git a/app/store/logs/db.go b/app/store/logs/db.go index f796426c5..fc2c7b4c1 100644 --- a/app/store/logs/db.go +++ b/app/store/logs/db.go @@ -35,7 +35,7 @@ type logs struct { Data []byte `db:"log_data"` } -// NewLogStore returns a new LogStore. +// NewDatabaseLogStore returns a new LogStore. func NewDatabaseLogStore(db *sqlx.DB) store.LogStore { return &logStore{ db: db, diff --git a/cmd/gitness/wire.go b/cmd/gitness/wire.go index b3a9fae70..bd926060a 100644 --- a/cmd/gitness/wire.go +++ b/cmd/gitness/wire.go @@ -68,6 +68,7 @@ import ( "github.com/harness/gitness/livelog" "github.com/harness/gitness/lock" "github.com/harness/gitness/pubsub" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" @@ -81,6 +82,7 @@ func initSystem(ctx context.Context, config *types.Config) (*cliserver.System, e bootstrap.WireSet, cliserver.ProvideDatabaseConfig, database.WireSet, + dbtx.WireSet, cache.WireSet, router.WireSet, pullreqservice.WireSet, diff --git a/cmd/gitness/wire_gen.go b/cmd/gitness/wire_gen.go index 528d9c3b9..b9f1c04e4 100644 --- a/cmd/gitness/wire_gen.go +++ b/cmd/gitness/wire_gen.go @@ -8,7 +8,6 @@ package main import ( "context" - check2 "github.com/harness/gitness/app/api/controller/check" "github.com/harness/gitness/app/api/controller/connector" "github.com/harness/gitness/app/api/controller/execution" @@ -67,6 +66,7 @@ import ( "github.com/harness/gitness/livelog" "github.com/harness/gitness/lock" "github.com/harness/gitness/pubsub" + "github.com/harness/gitness/store/database/dbtx" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" ) @@ -79,6 +79,8 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro if err != nil { return nil, err } + accessorTx := dbtx.ProvideAccessorTx(db) + transactor := dbtx.ProvideTransactor(accessorTx) principalUID := check.ProvidePrincipalUIDCheck() spacePathTransformation := store.ProvidePathTransformation() spacePathStore := database.ProvideSpacePathStore(db, spacePathTransformation) @@ -92,7 +94,7 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro principalUIDTransformation := store.ProvidePrincipalUIDTransformation() principalStore := database.ProvidePrincipalStore(db, principalUIDTransformation) tokenStore := database.ProvideTokenStore(db) - controller := user.ProvideController(db, principalUID, authorizer, principalStore, tokenStore, membershipStore) + controller := user.ProvideController(transactor, principalUID, authorizer, principalStore, tokenStore, membershipStore) serviceController := service.NewController(principalUID, authorizer, principalStore) bootstrapBootstrap := bootstrap.ProvideBootstrap(config, controller, serviceController) authenticator := authn.ProvideAuthenticator(config, principalStore, tokenStore) @@ -131,11 +133,11 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro return nil, err } streamer := sse.ProvideEventsStreaming(pubSub) - repository, err := importer.ProvideRepoImporter(config, provider, gitrpcInterface, db, repoStore, pipelineStore, triggerStore, encrypter, jobScheduler, executor, streamer) + repository, err := importer.ProvideRepoImporter(config, provider, gitrpcInterface, transactor, repoStore, pipelineStore, triggerStore, encrypter, jobScheduler, executor, streamer) if err != nil { return nil, err } - repoController := repo.ProvideController(config, db, provider, pathUID, authorizer, repoStore, spaceStore, pipelineStore, principalStore, gitrpcInterface, repository) + repoController := repo.ProvideController(config, transactor, provider, pathUID, authorizer, repoStore, spaceStore, pipelineStore, principalStore, gitrpcInterface, repository) executionStore := database.ProvideExecutionStore(db) checkStore := database.ProvideCheckStore(db, principalInfoCache) stageStore := database.ProvideStageStore(db) @@ -147,11 +149,11 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro cancelerCanceler := canceler.ProvideCanceler(executionStore, streamer, repoStore, schedulerScheduler, stageStore, stepStore) commitService := commit.ProvideService(gitrpcInterface) fileService := file.ProvideService(gitrpcInterface) - triggererTriggerer := triggerer.ProvideTriggerer(executionStore, checkStore, stageStore, db, pipelineStore, fileService, schedulerScheduler, repoStore) - executionController := execution.ProvideController(db, authorizer, executionStore, checkStore, cancelerCanceler, commitService, triggererTriggerer, repoStore, stageStore, pipelineStore) + triggererTriggerer := triggerer.ProvideTriggerer(executionStore, checkStore, stageStore, transactor, pipelineStore, fileService, schedulerScheduler, repoStore) + executionController := execution.ProvideController(transactor, authorizer, executionStore, checkStore, cancelerCanceler, commitService, triggererTriggerer, repoStore, stageStore, pipelineStore) logStore := logs.ProvideLogStore(db, config) - logStream := livelog.ProvideLogStream(config) - logsController := logs2.ProvideController(db, authorizer, executionStore, repoStore, pipelineStore, stageStore, stepStore, logStore, logStream) + logStream := livelog.ProvideLogStream() + logsController := logs2.ProvideController(authorizer, executionStore, repoStore, pipelineStore, stageStore, stepStore, logStore, logStream) secretStore := database.ProvideSecretStore(db) connectorStore := database.ProvideConnectorStore(db) templateStore := database.ProvideTemplateStore(db) @@ -159,14 +161,14 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro if err != nil { return nil, err } - spaceController := space.ProvideController(config, db, provider, streamer, pathUID, authorizer, spacePathStore, pipelineStore, secretStore, connectorStore, templateStore, spaceStore, repoStore, principalStore, repoController, membershipStore, repository, exporterRepository) - pipelineController := pipeline.ProvideController(db, pathUID, repoStore, triggerStore, authorizer, pipelineStore) - secretController := secret.ProvideController(db, pathUID, encrypter, secretStore, authorizer, spaceStore) - triggerController := trigger.ProvideController(db, authorizer, triggerStore, pathUID, pipelineStore, repoStore) - connectorController := connector.ProvideController(db, pathUID, connectorStore, authorizer, spaceStore) - templateController := template.ProvideController(db, pathUID, templateStore, authorizer, spaceStore) + spaceController := space.ProvideController(config, transactor, provider, streamer, pathUID, authorizer, spacePathStore, pipelineStore, secretStore, connectorStore, templateStore, spaceStore, repoStore, principalStore, repoController, membershipStore, repository, exporterRepository) + pipelineController := pipeline.ProvideController(pathUID, repoStore, triggerStore, authorizer, pipelineStore) + secretController := secret.ProvideController(pathUID, encrypter, secretStore, authorizer, spaceStore) + triggerController := trigger.ProvideController(authorizer, triggerStore, pathUID, pipelineStore, repoStore) + connectorController := connector.ProvideController(pathUID, connectorStore, authorizer, spaceStore) + templateController := template.ProvideController(pathUID, templateStore, authorizer, spaceStore) pluginStore := database.ProvidePluginStore(db) - pluginController := plugin.ProvideController(db, pluginStore) + pluginController := plugin.ProvideController(pluginStore) pullReqStore := database.ProvidePullReqStore(db, principalInfoCache) pullReqActivityStore := database.ProvidePullReqActivityStore(db, principalInfoCache) codeCommentView := database.ProvideCodeCommentView(db) @@ -196,11 +198,11 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro } repoGitInfoView := database.ProvideRepoGitInfoView(db) repoGitInfoCache := cache.ProvideRepoGitInfoCache(repoGitInfoView) - pullreqService, err := pullreq.ProvideService(ctx, config, readerFactory, eventsReaderFactory, reporter, gitrpcInterface, db, repoGitInfoCache, repoStore, pullReqStore, pullReqActivityStore, codeCommentView, migrator, pullReqFileViewStore, pubSub, provider, streamer) + pullreqService, err := pullreq.ProvideService(ctx, config, readerFactory, eventsReaderFactory, reporter, gitrpcInterface, repoGitInfoCache, repoStore, pullReqStore, pullReqActivityStore, codeCommentView, migrator, pullReqFileViewStore, pubSub, provider, streamer) if err != nil { return nil, err } - pullreqController := pullreq2.ProvideController(db, provider, authorizer, pullReqStore, pullReqActivityStore, codeCommentView, pullReqReviewStore, pullReqReviewerStore, repoStore, principalStore, pullReqFileViewStore, gitrpcInterface, reporter, mutexManager, migrator, pullreqService, streamer) + pullreqController := pullreq2.ProvideController(transactor, provider, authorizer, pullReqStore, pullReqActivityStore, codeCommentView, pullReqReviewStore, pullReqReviewerStore, repoStore, principalStore, pullReqFileViewStore, gitrpcInterface, reporter, mutexManager, migrator, pullreqService, streamer) webhookConfig := server.ProvideWebhookConfig(config) webhookStore := database.ProvideWebhookStore(db) webhookExecutionStore := database.ProvideWebhookExecutionStore(db) @@ -208,15 +210,15 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro if err != nil { return nil, err } - webhookController := webhook2.ProvideController(webhookConfig, db, authorizer, webhookStore, webhookExecutionStore, repoStore, webhookService, encrypter) + webhookController := webhook2.ProvideController(webhookConfig, authorizer, webhookStore, webhookExecutionStore, repoStore, webhookService, encrypter) eventsReporter, err := events3.ProvideReporter(eventsSystem) if err != nil { return nil, err } - githookController := githook.ProvideController(db, authorizer, principalStore, repoStore, eventsReporter, pullReqStore, provider) + githookController := githook.ProvideController(authorizer, principalStore, repoStore, eventsReporter, pullReqStore, provider) serviceaccountController := serviceaccount.NewController(principalUID, authorizer, principalStore, spaceStore, repoStore, tokenStore) principalController := principal.ProvideController(principalStore) - checkController := check2.ProvideController(db, authorizer, repoStore, checkStore, gitrpcInterface) + checkController := check2.ProvideController(transactor, authorizer, repoStore, checkStore, gitrpcInterface) systemController := system.NewController(principalStore, config) apiHandler := router.ProvideAPIHandler(config, authenticator, repoController, executionController, logsController, spaceController, pipelineController, secretController, triggerController, connectorController, templateController, pluginController, pullreqController, webhookController, githookController, serviceaccountController, controller, principalController, checkController, systemController) gitHandler := router.ProvideGitHandler(config, provider, repoStore, authenticator, authorizer, gitrpcInterface) diff --git a/livelog/wire.go b/livelog/wire.go index d39de0ca7..26d940a91 100644 --- a/livelog/wire.go +++ b/livelog/wire.go @@ -15,8 +15,6 @@ package livelog import ( - "github.com/harness/gitness/types" - "github.com/google/wire" ) @@ -26,6 +24,6 @@ var WireSet = wire.NewSet( ) // ProvideLogStream provides an implementation of a logs streamer. -func ProvideLogStream(config *types.Config) LogStream { +func ProvideLogStream() LogStream { return NewMemory() } diff --git a/store/database/dbtx/ctx.go b/store/database/dbtx/ctx.go index 26ca946e2..ac94c5378 100644 --- a/store/database/dbtx/ctx.go +++ b/store/database/dbtx/ctx.go @@ -20,20 +20,7 @@ import ( "github.com/jmoiron/sqlx" ) -// ctxKeyDB is context key for storing and retrieving Transactor to and from a context. -type ctxKeyDB struct{} - -// PutTransactor places Transactor into the context. -func PutTransactor(ctx context.Context, t Transactor) context.Context { - return context.WithValue(ctx, ctxKeyDB{}, t) -} - -// WithTx starts a transaction with Transactor interface from the context. It will panic if there is no Transactor. -func WithTx(ctx context.Context, txFn func(ctx context.Context) error, opts ...interface{}) error { - return ctx.Value(ctxKeyDB{}).(Transactor).WithTx(ctx, txFn, opts...) -} - -// ctxKeyTx is context key for storing and retrieving Tx to and from a context. +// ctxKeyTx is context key for storing and retrieving TransactionAccessor to and from a context. type ctxKeyTx struct{} // GetAccessor returns Accessor interface from the context if it exists or creates a new one from the provided *sql.DB. diff --git a/store/database/dbtx/db.go b/store/database/dbtx/db.go index d0ecf19ff..2510abede 100644 --- a/store/database/dbtx/db.go +++ b/store/database/dbtx/db.go @@ -22,7 +22,7 @@ import ( ) // New returns new database Runner interface. -func New(db *sqlx.DB) Transactor { +func New(db *sqlx.DB) AccessorTx { mx := getLocker(db) run := &runnerDB{ db: sqlDB{db}, @@ -34,7 +34,7 @@ func New(db *sqlx.DB) Transactor { // transactor is combines data access capabilities with transaction starting. type transactor interface { Accessor - startTx(ctx context.Context, opts *sql.TxOptions) (Tx, error) + startTx(ctx context.Context, opts *sql.TxOptions) (TransactionAccessor, error) } // sqlDB is a wrapper for the sqlx.DB that implements the transactor interface. @@ -44,7 +44,7 @@ type sqlDB struct { var _ transactor = (*sqlDB)(nil) -func (db sqlDB) startTx(ctx context.Context, opts *sql.TxOptions) (Tx, error) { +func (db sqlDB) startTx(ctx context.Context, opts *sql.TxOptions) (TransactionAccessor, error) { tx, err := db.DB.BeginTxx(ctx, opts) return tx, err } diff --git a/store/database/dbtx/interface.go b/store/database/dbtx/interface.go index 0ace4e8b9..2a680965e 100644 --- a/store/database/dbtx/interface.go +++ b/store/database/dbtx/interface.go @@ -40,15 +40,19 @@ type Transaction interface { Rollback() error } -// Transactor is used to access the database. It combines Accessor interface -// with capability to run functions in a transaction. type Transactor interface { - Accessor WithTx(ctx context.Context, txFn func(ctx context.Context) error, opts ...interface{}) error } -// Tx combines data access capabilities with the transaction commit and rollback. -type Tx interface { +// AccessorTx is used to access the database. It combines Accessor interface +// with Transactor (capability to run functions in a transaction). +type AccessorTx interface { + Accessor + Transactor +} + +// TransactionAccessor combines data access capabilities with the transaction commit and rollback. +type TransactionAccessor interface { + Transaction Accessor - Transaction } diff --git a/store/database/dbtx/runner.go b/store/database/dbtx/runner.go index ace488e4f..d1f795c73 100644 --- a/store/database/dbtx/runner.go +++ b/store/database/dbtx/runner.go @@ -29,7 +29,7 @@ type runnerDB struct { mx locker } -var _ Transactor = runnerDB{} +var _ AccessorTx = runnerDB{} func (r runnerDB) WithTx(ctx context.Context, txFn func(context.Context) error, opts ...interface{}) error { var txOpts *sql.TxOptions @@ -57,9 +57,9 @@ func (r runnerDB) WithTx(ctx context.Context, txFn func(context.Context) error, } rtx := &runnerTx{ - Tx: tx, - commit: false, - rollback: false, + TransactionAccessor: tx, + commit: false, + rollback: false, } defer func() { @@ -69,7 +69,7 @@ func (r runnerDB) WithTx(ctx context.Context, txFn func(context.Context) error, _ = tx.Rollback() // ignoring the rollback error }() - err = txFn(context.WithValue(ctx, ctxKeyTx{}, Tx(rtx))) + err = txFn(context.WithValue(ctx, ctxKeyTx{}, TransactionAccessor(rtx))) if err != nil { return err } @@ -162,15 +162,15 @@ func (r runnerDB) SelectContext(ctx context.Context, dest interface{}, query str // runnerTx executes sqlx database transaction calls. // Locking is not used because runnerDB locks the entire transaction. type runnerTx struct { - Tx + TransactionAccessor commit bool rollback bool } -var _ Tx = (*runnerTx)(nil) +var _ TransactionAccessor = (*runnerTx)(nil) func (r *runnerTx) Commit() error { - err := r.Tx.Commit() + err := r.TransactionAccessor.Commit() if err == nil { r.commit = true } @@ -178,7 +178,7 @@ func (r *runnerTx) Commit() error { } func (r *runnerTx) Rollback() error { - err := r.Tx.Rollback() + err := r.TransactionAccessor.Rollback() if err == nil { r.rollback = true } diff --git a/store/database/dbtx/runner_test.go b/store/database/dbtx/runner_test.go index 3f005ef01..ff401782a 100644 --- a/store/database/dbtx/runner_test.go +++ b/store/database/dbtx/runner_test.go @@ -174,7 +174,7 @@ type dbMock struct { var _ transactor = (*dbMock)(nil) -func (d *dbMock) startTx(context.Context, *sql.TxOptions) (Tx, error) { +func (d *dbMock) startTx(context.Context, *sql.TxOptions) (TransactionAccessor, error) { d.createdTx = &txMock{ t: d.t, errCommit: d.errCommit, @@ -194,7 +194,7 @@ type txMock struct { rollback bool } -var _ Tx = (*txMock)(nil) +var _ TransactionAccessor = (*txMock)(nil) func (tx *txMock) Commit() error { if tx.finished { @@ -218,15 +218,16 @@ func (tx *txMock) Rollback() error { return nil } +// nolint:rowserrcheck,sqlclosecheck // it's a unit test, works with mocked DB func TestLocking(t *testing.T) { const dummyQuery = "" tests := []struct { name string - fn func(db Transactor, l *lockerCounter) + fn func(db AccessorTx, l *lockerCounter) }{ { name: "exec-lock", - fn: func(db Transactor, l *lockerCounter) { + fn: func(db AccessorTx, l *lockerCounter) { ctx := context.Background() _, _ = db.ExecContext(ctx, dummyQuery) _, _ = db.ExecContext(ctx, dummyQuery) @@ -240,7 +241,7 @@ func TestLocking(t *testing.T) { }, { name: "tx-lock", - fn: func(db Transactor, l *lockerCounter) { + fn: func(db AccessorTx, l *lockerCounter) { ctx := context.Background() _ = db.WithTx(ctx, func(ctx context.Context) error { _, _ = GetAccessor(ctx, nil).ExecContext(ctx, dummyQuery) @@ -256,7 +257,7 @@ func TestLocking(t *testing.T) { }, { name: "tx-read-lock", - fn: func(db Transactor, l *lockerCounter) { + fn: func(db AccessorTx, l *lockerCounter) { ctx := context.Background() _ = db.WithTx(ctx, func(ctx context.Context) error { _, _ = GetAccessor(ctx, nil).QueryContext(ctx, dummyQuery) @@ -342,4 +343,6 @@ func (dbMockNop) SelectContext(context.Context, interface{}, string, ...interfac func (dbMockNop) Commit() error { return nil } func (dbMockNop) Rollback() error { return nil } -func (d dbMockNop) startTx(context.Context, *sql.TxOptions) (Tx, error) { return d, nil } +func (d dbMockNop) startTx(context.Context, *sql.TxOptions) (TransactionAccessor, error) { + return d, nil +} diff --git a/store/database/dbtx/wire.go b/store/database/dbtx/wire.go new file mode 100644 index 000000000..6788fc476 --- /dev/null +++ b/store/database/dbtx/wire.go @@ -0,0 +1,43 @@ +// Copyright 2023 Harness, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package dbtx + +import ( + "github.com/google/wire" + "github.com/jmoiron/sqlx" +) + +// WireSet provides a wire set for this package. +var WireSet = wire.NewSet( + ProvideAccessorTx, + ProvideAccessor, + ProvideTransactor, +) + +// ProvideAccessorTx provides the most versatile database access interface. +// All DB queries and transactions can be performed. +func ProvideAccessorTx(db *sqlx.DB) AccessorTx { + return New(db) +} + +// ProvideAccessor provides the database access interface. All DB queries can be performed. +func ProvideAccessor(a AccessorTx) Accessor { + return a +} + +// ProvideTransactor provides ability to run DB transactions. +func ProvideTransactor(a AccessorTx) Transactor { + return a +}