package datastore import ( "xorm.io/xorm" "github.com/mayswind/ezbookkeeping/pkg/core" ) // Database represents a database instance type Database struct { engineGroup *xorm.EngineGroup } // NewSession starts a new session with the specified context func (db *Database) NewSession(c *core.Context) *xorm.Session { return db.engineGroup.Context(NewXOrmContextAdapter(c)) } // DoTransaction runs a new database transaction func (db *Database) DoTransaction(c *core.Context, fn func(sess *xorm.Session) error) (err error) { sess := db.engineGroup.NewSession() if c != nil { sess.Context(NewXOrmContextAdapter(c)) } defer sess.Close() if err = sess.Begin(); err != nil { return err } if err = fn(sess); err != nil { _ = sess.Rollback() return err } if err = sess.Commit(); err != nil { return err } return nil }