Back to Lo

Core Newtransaction

docs/data/core-newtransaction.md

1.53.0833 B
Original Source

Creates a new Saga transaction that chains steps with rollback functions.

Use Then to add steps with exec and rollback functions. Call Process with an initial state to execute the pipeline; if a step returns an error, previously executed steps are rolled back in reverse order using their rollback functions.

go
type Acc struct{ Sum int }

tx := lo.NewTransaction[Acc]().
    Then(
        func(a Acc) (Acc, error) {
            a.Sum += 10
            return a, nil
        },
        func(a Acc) Acc {
            a.Sum -= 10
            return a
        },
    ).
    Then(
        func(a Acc) (Acc, error) {
            a.Sum *= 3
            return a, nil
        },
        func(a Acc) Acc {
            a.Sum /= 3
            return a
        },
    )

res, err := tx.Process(Acc{Sum: 1})
// res.Sum == 33, err == nil