package transactionimp import ( "context" "git.sendico.io/tech/sxchnge/shared/database/source" "git.sendico.io/tech/sxchnge/shared/database/transaction" merrors "git.sendico.io/tech/sxchnge/shared/errors" ) type MongoTransaction struct{ database source.Source } func (t *MongoTransaction) Execute(ctx context.Context, cb transaction.Callback) (any, error) { if cb == nil { return nil, merrors.InvalidArgument("transaction callback is required") } database, ctx, release, err := t.database.Acquire(ctx) if err != nil { return nil, err } defer release() if transaction.ActiveMongoTransaction(ctx) { return cb(ctx) } session, err := database.Client().StartSession() if err != nil { return nil, err } defer session.EndSession(ctx) return session.WithTransaction(ctx, cb) }