package org.reveno.atp.acceptance.handlers;
import org.reveno.atp.acceptance.api.transactions.AcceptOrder;
import org.reveno.atp.acceptance.api.transactions.CreateAccount;
import org.reveno.atp.acceptance.api.transactions.Credit;
import org.reveno.atp.acceptance.api.transactions.Debit;
import org.reveno.atp.acceptance.model.Account;
import org.reveno.atp.acceptance.model.Order;
import org.reveno.atp.api.transaction.TransactionContext;
import java.util.Optional;
public class RollbackTransactions {
public static void rollbackCreateAccount(CreateAccount tx, TransactionContext ctx) {
ctx.repo().remove(Account.class, tx.id);
}
public static void rollbackCredit(Credit tx, TransactionContext ctx) {
Account acc = ctx.repo().get(Account.class, tx.accountId);
acc.addBalance(-tx.amount);
}
public static void rollbackDebit(Debit tx, TransactionContext ctx) {
Account acc = ctx.repo().get(Account.class, tx.accountId);
acc.addBalance(tx.amount);
}
public static void rollbackAcceptOrder(AcceptOrder tx, TransactionContext ctx) {
Account account = ctx.repo().get(Account.class, tx.accountId);
account.removeOrder(tx.id);
ctx.repo().remove(Order.class, tx.id);
}
}