Basdat/internal/repositories/transaction.go
2025-12-20 00:01:08 +07:00

41 lines
967 B
Go

package repositories
import (
"log"
"gorm.io/gorm"
)
// TransactionManager struct untuk handle manual transaction
type TransactionManager struct {
db *gorm.DB
}
func NewTransactionManager(db *gorm.DB) *TransactionManager {
return &TransactionManager{db: db}
}
// Begin memulai transaksi database
func (m *TransactionManager) Begin() *gorm.DB {
return m.db.Begin()
}
// Rollback membatalkan transaksi jika terjadi error
func (m *TransactionManager) Rollback(tx *gorm.DB) {
// Rollback hanya jika transaksi belum di-commit/rollback
if r := recover(); r != nil {
tx.Rollback()
log.Printf("⚠️ Transaction panicked: %v", r)
} else if tx.Error != nil {
// Jika tx sudah error, rollback
tx.Rollback()
} else {
// Rollback aman
tx.Rollback()
}
}
// Commit menyimpan perubahan permanen ke database
func (m *TransactionManager) Commit(tx *gorm.DB) error {
return tx.Commit().Error
}