dendrite.nvim/persistence/repositories/uow.go

49 lines
959 B
Go

package repositories
import (
"database/sql"
"github.com/KristianJBorgwarth/dendrite.daemon/persistence"
"github.com/KristianJBorgwarth/dendrite.daemon/persistence/store"
)
type UnitOfWork struct {
Transaction *sql.Tx
FileStore *store.FileStore
}
func NewUnitOfWork() *UnitOfWork {
return &UnitOfWork{FileStore: store.NewFileStore()}
}
func (u *UnitOfWork) Begin() (persistence.IDbContext, error) {
tx, err := persistence.GetDBContext().DB.Begin()
if err != nil {
return nil, err
}
u.Transaction = tx
return tx, nil
}
func (u *UnitOfWork) Commit() error {
if err := u.FileStore.Flush(); err != nil {
u.Transaction.Rollback()
u.Transaction = nil
return err
}
if err := u.Transaction.Commit(); err != nil {
u.FileStore.Rollback()
u.Transaction = nil
return err
}
u.Transaction = nil
return nil
}
func (u *UnitOfWork) Rollback() {
if u.Transaction == nil {
return
}
u.Transaction.Rollback()
u.FileStore.Rollback()
}