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() }