From 613deae8e2fa4fbbe8552cd77d73cbe22ca94733 Mon Sep 17 00:00:00 2001 From: Nikolai Papin Date: Sat, 21 Jun 2025 20:04:20 +0300 Subject: [PATCH] feat: db regular and transactional helpers to reduce boilerplate --- backend/internal/database/helper.go | 77 +++++++++++++++++++++++++++++ backend/internal/services/auth.go | 9 ++-- 2 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 backend/internal/database/helper.go diff --git a/backend/internal/database/helper.go b/backend/internal/database/helper.go new file mode 100644 index 0000000..df88445 --- /dev/null +++ b/backend/internal/database/helper.go @@ -0,0 +1,77 @@ +package database + +import ( + "context" + + "github.com/jackc/pgx/v5" +) + +type DbHelperTransaction interface { + Commit() error + Rollback() error +} + +type DbHelper struct { + CTX context.Context + Queries Queries +} + +type dbHelperTransactionImpl struct { + CTX context.Context + queries Queries + TX pgx.Tx + TXQueries Queries +} + +func NewDbHelper(dbContext DbContext) DbHelper { + + ctx := context.Background() + queries := New(dbContext) + + return DbHelper{ + CTX: ctx, + Queries: *queries, + } +} + +func NewDbHelperTransaction(dbContext DbContext) (DbHelperTransaction, *dbHelperTransactionImpl, error) { + + ctx := context.Background() + queries := New(dbContext) + tx, err := dbContext.BeginTx(ctx) + + if err != nil { + return nil, nil, err + } + + txQueries := queries.WithTx(tx) + + obj := &dbHelperTransactionImpl{ + CTX: ctx, + queries: *queries, + TX: tx, + TXQueries: *txQueries, + } + + return obj, obj, nil +} + +// Commit implements DbHelperTransaction. +func (d *dbHelperTransactionImpl) Commit() error { + err := d.TX.Commit(d.CTX) + + if err != nil { + return err + } + return nil +} + +// Rollback implements DbHelperTransaction. +func (d *dbHelperTransactionImpl) Rollback() error { + err := d.TX.Rollback(d.CTX) + + if err != nil { + return err + } + return nil +} diff --git a/backend/internal/services/auth.go b/backend/internal/services/auth.go index fe50e1c..b752d01 100644 --- a/backend/internal/services/auth.go +++ b/backend/internal/services/auth.go @@ -1,7 +1,6 @@ package services import ( - "context" "easywish/internal/database" errs "easywish/internal/errors" "easywish/internal/logger" @@ -29,9 +28,9 @@ func NewAuthService(_log logger.Logger, _dbctx database.DbContext) AuthService { func (a *authServiceImpl) RegistrationBegin(request models.RegistrationBeginRequest) (bool, error) { - ctx := context.Background() - queries := database.New(a.dbctx) - user, err := queries.CreateUser(ctx, request.Username) // TODO: validation + helper, db, _ := database.NewDbHelperTransaction(a.dbctx) + + user, err := db.TXQueries.CreateUser(db.CTX, request.Username) // TODO: validation if err != nil { a.log.Get().Error("Failed to add user to database", zap.Error(err)) @@ -39,6 +38,8 @@ func (a *authServiceImpl) RegistrationBegin(request models.RegistrationBeginRequ } a.log.Get().Info("Registered a new user", zap.String("username", user.Username)) + helper.Commit() + // TODO: Send verification email return true, nil