From 85e91699be520542e303ff549cab27ddc6d103e8 Mon Sep 17 00:00:00 2001 From: Kristian Borgwarth <10348902@pm.me> Date: Thu, 26 Mar 2026 07:49:41 +0100 Subject: [PATCH] feat(uow): add uow --- persistence/repositories/uow.go | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 persistence/repositories/uow.go diff --git a/persistence/repositories/uow.go b/persistence/repositories/uow.go new file mode 100644 index 0000000..3077ae2 --- /dev/null +++ b/persistence/repositories/uow.go @@ -0,0 +1,34 @@ +package repositories + +import ( + "context" + "database/sql" +) + +type UnitOfWork struct { + db *sql.DB +} + +func NewUnitOfWork(db *sql.DB) *UnitOfWork { + return &UnitOfWork{db: db} +} + +func (u *UnitOfWork) Execute(ctx context.Context, fn func(tx *sql.Tx) error) error { + tx, err := u.db.BeginTx(ctx, nil) + if err != nil { + return err + } + + defer func() { + if err != nil { + _ = tx.Rollback() + } + }() + + if err := fn(tx); err != nil { + tx.Rollback() + return err + } + + return tx.Commit() +}