killbill-memoizeit
Changes
payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonDAOHelper.java 35(+18 -17)
payment/src/main/java/org/killbill/billing/payment/dao/PaymentAndTransactionModelDao.java 40(+40 -0)
Details
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/PaymentProcessor.java b/payment/src/main/java/org/killbill/billing/payment/core/PaymentProcessor.java
index 4db7ea5..8cc235e 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/PaymentProcessor.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/PaymentProcessor.java
@@ -225,14 +225,15 @@ public class PaymentProcessor extends ProcessorBase {
public Payment getPayment(final UUID paymentId, final boolean withPluginInfo, final boolean withAttempts, final Iterable<PluginProperty> properties, final TenantContext tenantContext, final InternalTenantContext internalTenantContext) throws PaymentApiException {
final PaymentModelDao paymentModelDao = paymentDao.getPayment(paymentId, internalTenantContext);
- if (paymentModelDao == null) {
- return null;
- }
- return toPayment(paymentModelDao, withPluginInfo, withAttempts, properties, tenantContext, internalTenantContext);
+ return getPayment(paymentModelDao, withPluginInfo, withAttempts, properties, tenantContext, internalTenantContext);
}
public Payment getPaymentByExternalKey(final String paymentExternalKey, final boolean withPluginInfo, final boolean withAttempts, final Iterable<PluginProperty> properties, final TenantContext tenantContext, final InternalTenantContext internalTenantContext) throws PaymentApiException {
final PaymentModelDao paymentModelDao = paymentDao.getPaymentByExternalKey(paymentExternalKey, internalTenantContext);
+ return getPayment(paymentModelDao, withPluginInfo, withAttempts, properties, tenantContext, internalTenantContext);
+ }
+
+ private Payment getPayment(final PaymentModelDao paymentModelDao, final boolean withPluginInfo, final boolean withAttempts, final Iterable<PluginProperty> properties, final TenantContext tenantContext, final InternalTenantContext internalTenantContext) throws PaymentApiException {
if (paymentModelDao == null) {
return null;
}
@@ -546,9 +547,9 @@ public class PaymentProcessor extends ProcessorBase {
currentStateName = paymentModelDao.getLastSuccessStateName();
}
- final UUID nonNullPaymentId = paymentAutomatonRunner.run(paymentStateContext, daoHelper, currentStateName, transactionType);
+ paymentAutomatonRunner.run(paymentStateContext, daoHelper, currentStateName, transactionType);
- return getPayment(nonNullPaymentId, true, false, properties, callContext, internalCallContext);
+ return getPayment(paymentStateContext.getPaymentModelDao(), true, false, properties, callContext, internalCallContext);
}
private void runSanityOnTransactionExternalKey(final Iterable<PaymentTransactionModelDao> allPaymentTransactionsForKey,
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonDAOHelper.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonDAOHelper.java
index 5b11b15..70c793a 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonDAOHelper.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonDAOHelper.java
@@ -31,6 +31,7 @@ import org.killbill.billing.payment.api.PaymentApiException;
import org.killbill.billing.payment.api.TransactionStatus;
import org.killbill.billing.payment.api.TransactionType;
import org.killbill.billing.payment.core.PaymentPluginServiceRegistration;
+import org.killbill.billing.payment.dao.PaymentAndTransactionModelDao;
import org.killbill.billing.payment.dao.PaymentDao;
import org.killbill.billing.payment.dao.PaymentMethodModelDao;
import org.killbill.billing.payment.dao.PaymentModelDao;
@@ -86,8 +87,8 @@ public class PaymentAutomatonDAOHelper {
final PaymentTransactionModelDao newPaymentTransactionModelDao = buildNewPaymentTransactionModelDao(newPaymentModelDao.getId());
existingTransactions = ImmutableList.of();
- final PaymentModelDao paymentModelDao = paymentDao.insertPaymentWithFirstTransaction(newPaymentModelDao, newPaymentTransactionModelDao, internalCallContext);
- paymentTransactionModelDao = paymentDao.getTransactionsForPayment(paymentModelDao.getId(), internalCallContext).get(0);
+ final PaymentAndTransactionModelDao paymentAndTransactionModelDao = paymentDao.insertPaymentWithFirstTransaction(newPaymentModelDao, newPaymentTransactionModelDao, internalCallContext);
+ paymentTransactionModelDao = paymentAndTransactionModelDao.getPaymentTransactionModelDao();
} else {
existingTransactions = paymentDao.getTransactionsForPayment(paymentStateContext.getPaymentId(), internalCallContext);
@@ -131,22 +132,22 @@ public class PaymentAutomatonDAOHelper {
final String gatewayErrorMsg = paymentInfoPlugin == null ? null : paymentInfoPlugin.getGatewayError();
final String lastSuccessPaymentState = paymentSMHelper.isSuccessState(currentPaymentStateName) ? currentPaymentStateName : null;
- paymentDao.updatePaymentAndTransactionOnCompletion(paymentStateContext.getAccount().getId(),
- paymentStateContext.getAttemptId(),
- paymentStateContext.getPaymentId(),
- paymentStateContext.getTransactionType(),
- currentPaymentStateName,
- lastSuccessPaymentState,
- paymentStateContext.getPaymentTransactionModelDao().getId(),
- transactionStatus,
- processedAmount,
- processedCurrency,
- gatewayErrorCode,
- gatewayErrorMsg,
- internalCallContext);
-
+ final PaymentAndTransactionModelDao paymentAndTransactionModelDao = paymentDao.updatePaymentAndTransactionOnCompletion(paymentStateContext.getAccount().getId(),
+ paymentStateContext.getAttemptId(),
+ paymentStateContext.getPaymentId(),
+ paymentStateContext.getTransactionType(),
+ currentPaymentStateName,
+ lastSuccessPaymentState,
+ paymentStateContext.getPaymentTransactionModelDao().getId(),
+ transactionStatus,
+ processedAmount,
+ processedCurrency,
+ gatewayErrorCode,
+ gatewayErrorMsg,
+ internalCallContext);
// Update the context
- paymentStateContext.setPaymentTransactionModelDao(paymentDao.getPaymentTransaction(paymentStateContext.getPaymentTransactionModelDao().getId(), internalCallContext));
+ paymentStateContext.setPaymentModelDao(paymentAndTransactionModelDao.getPaymentModelDao());
+ paymentStateContext.setPaymentTransactionModelDao(paymentAndTransactionModelDao.getPaymentTransactionModelDao());
}
public String getPaymentProviderPluginName(final boolean includeDeleted) throws PaymentApiException {
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java
index 331d317..6c2f77a 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentAutomatonRunner.java
@@ -160,7 +160,7 @@ public class PaymentAutomatonRunner {
return new PaymentAutomatonDAOHelper(paymentStateContext, utcNow, paymentDao, paymentPluginServiceRegistration, internalCallContext, eventBus, paymentSMHelper);
}
- public UUID run(final PaymentStateContext paymentStateContext,
+ public void run(final PaymentStateContext paymentStateContext,
final PaymentAutomatonDAOHelper daoHelper,
@Nullable final String currentStateNameOrNull,
final TransactionType transactionType) throws PaymentApiException {
@@ -214,8 +214,6 @@ public class PaymentAutomatonRunner {
}
runStateMachineOperation(currentStateName, transactionType, leavingStateCallback, operationCallback, enteringStateCallback, includeDeletedPaymentMethod, paymentStateContext, daoHelper);
-
- return paymentStateContext.getPaymentId();
}
//
diff --git a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentStateContext.java b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentStateContext.java
index 632f15d..c0d5709 100644
--- a/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentStateContext.java
+++ b/payment/src/main/java/org/killbill/billing/payment/core/sm/PaymentStateContext.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2014-2015 Groupon, Inc
- * Copyright 2014-2015 The Billing Project, LLC
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -29,6 +29,7 @@ import org.killbill.billing.callcontext.InternalCallContext;
import org.killbill.billing.catalog.api.Currency;
import org.killbill.billing.payment.api.PluginProperty;
import org.killbill.billing.payment.api.TransactionType;
+import org.killbill.billing.payment.dao.PaymentModelDao;
import org.killbill.billing.payment.dao.PaymentTransactionModelDao;
import org.killbill.billing.payment.plugin.api.PaymentTransactionInfoPlugin;
import org.killbill.billing.util.callcontext.CallContext;
@@ -38,7 +39,7 @@ import com.google.common.collect.ImmutableList;
public class PaymentStateContext {
-
+ private PaymentModelDao paymentModelDao;
// The following fields (paymentId, transactionId, amount, currency) may take their value from the paymentTransactionModelDao *when they are not already set*
private PaymentTransactionModelDao paymentTransactionModelDao;
// Initialized in CTOR or only set through paymentTransactionModelDao
@@ -119,6 +120,14 @@ public class PaymentStateContext {
this.paymentMethodId = paymentMethodId;
}
+ public PaymentModelDao getPaymentModelDao() {
+ return paymentModelDao;
+ }
+
+ public void setPaymentModelDao(final PaymentModelDao paymentModelDao) {
+ this.paymentModelDao = paymentModelDao;
+ }
+
public PaymentTransactionModelDao getPaymentTransactionModelDao() {
return paymentTransactionModelDao;
}
diff --git a/payment/src/main/java/org/killbill/billing/payment/dao/DefaultPaymentDao.java b/payment/src/main/java/org/killbill/billing/payment/dao/DefaultPaymentDao.java
index 22e43e7..22baff9 100644
--- a/payment/src/main/java/org/killbill/billing/payment/dao/DefaultPaymentDao.java
+++ b/payment/src/main/java/org/killbill/billing/payment/dao/DefaultPaymentDao.java
@@ -288,19 +288,22 @@ public class DefaultPaymentDao extends EntityDaoBase<PaymentModelDao, Payment, P
}
@Override
- public PaymentModelDao insertPaymentWithFirstTransaction(final PaymentModelDao payment, final PaymentTransactionModelDao paymentTransaction, final InternalCallContext context) {
+ public PaymentAndTransactionModelDao insertPaymentWithFirstTransaction(final PaymentModelDao payment, final PaymentTransactionModelDao paymentTransaction, final InternalCallContext context) {
+ final PaymentAndTransactionModelDao paymentAndTransactionModelDao = new PaymentAndTransactionModelDao();
- return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<PaymentModelDao>() {
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<PaymentAndTransactionModelDao>() {
@Override
- public PaymentModelDao inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception {
+ public PaymentAndTransactionModelDao inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception {
final PaymentSqlDao paymentSqlDao = entitySqlDaoWrapperFactory.become(PaymentSqlDao.class);
final PaymentModelDao paymentModelDao = createAndRefresh(paymentSqlDao, payment, context);
+ paymentAndTransactionModelDao.setPaymentModelDao(paymentModelDao);
final TransactionSqlDao transactionSqlDao = entitySqlDaoWrapperFactory.become(TransactionSqlDao.class);
- createAndRefresh(transactionSqlDao, paymentTransaction, context);
+ final PaymentTransactionModelDao paymentTransactionModelDao = createAndRefresh(transactionSqlDao, paymentTransaction, context);
+ paymentAndTransactionModelDao.setPaymentTransactionModelDao(paymentTransactionModelDao);
- return paymentModelDao;
+ return paymentAndTransactionModelDao;
}
});
}
@@ -321,34 +324,50 @@ public class DefaultPaymentDao extends EntityDaoBase<PaymentModelDao, Payment, P
}
@Override
- public void updatePaymentAndTransactionOnCompletion(final UUID accountId, @Nullable final UUID attemptId, final UUID paymentId, final TransactionType transactionType,
- final String currentPaymentStateName, @Nullable final String lastPaymentSuccessStateName,
- final UUID transactionId, final TransactionStatus transactionStatus,
- final BigDecimal processedAmount, final Currency processedCurrency,
- final String gatewayErrorCode, final String gatewayErrorMsg,
- final InternalCallContext context) {
- transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<Void>() {
+ public PaymentAndTransactionModelDao updatePaymentAndTransactionOnCompletion(final UUID accountId, @Nullable final UUID attemptId, final UUID paymentId, final TransactionType transactionType,
+ final String currentPaymentStateName, @Nullable final String lastPaymentSuccessStateName,
+ final UUID transactionId, final TransactionStatus transactionStatus,
+ final BigDecimal processedAmount, final Currency processedCurrency,
+ final String gatewayErrorCode, final String gatewayErrorMsg,
+ final InternalCallContext context) {
+ final PaymentAndTransactionModelDao paymentAndTransactionModelDao = new PaymentAndTransactionModelDao();
+
+ return transactionalSqlDao.execute(new EntitySqlDaoTransactionWrapper<PaymentAndTransactionModelDao>() {
@Override
- public Void inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception {
+ public PaymentAndTransactionModelDao inTransaction(final EntitySqlDaoWrapperFactory entitySqlDaoWrapperFactory) throws Exception {
final InternalCallContext contextWithUpdatedDate = contextWithUpdatedDate(context);
+
final TransactionSqlDao transactional = entitySqlDaoWrapperFactory.become(TransactionSqlDao.class);
- final PaymentTransactionModelDao paymentTransactionModelDao = transactional.getById(transactionId.toString(), context);
- transactional.updateTransactionStatus(transactionId.toString(),
- attemptId == null ? (paymentTransactionModelDao.getAttemptId() == null ? null : paymentTransactionModelDao.getAttemptId().toString()) : attemptId.toString(),
- processedAmount,
- processedCurrency == null ? null : processedCurrency.toString(),
- transactionStatus == null ? null : transactionStatus.toString(),
- gatewayErrorCode,
- gatewayErrorMsg,
- contextWithUpdatedDate);
+ final String updatedAttemptId;
+ if (attemptId == null) {
+ final PaymentTransactionModelDao paymentTransactionModelDao = transactional.getById(transactionId.toString(), context);
+ updatedAttemptId = paymentTransactionModelDao.getAttemptId() == null ? null : paymentTransactionModelDao.getAttemptId().toString();
+ } else {
+ updatedAttemptId = attemptId.toString();
+ }
+ final PaymentTransactionModelDao paymentTransactionModelDao = (PaymentTransactionModelDao) transactional.updateTransactionStatus(transactionId.toString(),
+ updatedAttemptId,
+ processedAmount,
+ processedCurrency == null ? null : processedCurrency.toString(),
+ transactionStatus == null ? null : transactionStatus.toString(),
+ gatewayErrorCode,
+ gatewayErrorMsg,
+ contextWithUpdatedDate);
+ paymentAndTransactionModelDao.setPaymentTransactionModelDao(paymentTransactionModelDao);
+
+ final PaymentSqlDao paymentSqlDao = entitySqlDaoWrapperFactory.become(PaymentSqlDao.class);
+ final PaymentModelDao paymentModelDao;
if (lastPaymentSuccessStateName != null) {
- entitySqlDaoWrapperFactory.become(PaymentSqlDao.class).updateLastSuccessPaymentStateName(paymentId.toString(), currentPaymentStateName, lastPaymentSuccessStateName, contextWithUpdatedDate);
+ paymentModelDao = (PaymentModelDao) paymentSqlDao.updateLastSuccessPaymentStateName(paymentId.toString(), currentPaymentStateName, lastPaymentSuccessStateName, contextWithUpdatedDate);
} else {
- entitySqlDaoWrapperFactory.become(PaymentSqlDao.class).updatePaymentStateName(paymentId.toString(), currentPaymentStateName, contextWithUpdatedDate);
+ paymentModelDao = (PaymentModelDao) paymentSqlDao.updatePaymentStateName(paymentId.toString(), currentPaymentStateName, contextWithUpdatedDate);
}
+ paymentAndTransactionModelDao.setPaymentModelDao(paymentModelDao);
+
postPaymentEventFromTransaction(accountId, transactionStatus, transactionType, paymentId, transactionId, processedAmount, processedCurrency, clock.getUTCNow(), gatewayErrorCode, entitySqlDaoWrapperFactory, context);
- return null;
+
+ return paymentAndTransactionModelDao;
}
});
}
diff --git a/payment/src/main/java/org/killbill/billing/payment/dao/PaymentAndTransactionModelDao.java b/payment/src/main/java/org/killbill/billing/payment/dao/PaymentAndTransactionModelDao.java
new file mode 100644
index 0000000..96d6987
--- /dev/null
+++ b/payment/src/main/java/org/killbill/billing/payment/dao/PaymentAndTransactionModelDao.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017 Groupon, Inc
+ * Copyright 2017 The Billing Project, LLC
+ *
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
+ * (the "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.killbill.billing.payment.dao;
+
+public class PaymentAndTransactionModelDao {
+
+ private PaymentModelDao paymentModelDao;
+ private PaymentTransactionModelDao paymentTransactionModelDao;
+
+ public PaymentModelDao getPaymentModelDao() {
+ return paymentModelDao;
+ }
+
+ public void setPaymentModelDao(final PaymentModelDao paymentModelDao) {
+ this.paymentModelDao = paymentModelDao;
+ }
+
+ public PaymentTransactionModelDao getPaymentTransactionModelDao() {
+ return paymentTransactionModelDao;
+ }
+
+ public void setPaymentTransactionModelDao(final PaymentTransactionModelDao paymentTransactionModelDao) {
+ this.paymentTransactionModelDao = paymentTransactionModelDao;
+ }
+}
diff --git a/payment/src/main/java/org/killbill/billing/payment/dao/PaymentDao.java b/payment/src/main/java/org/killbill/billing/payment/dao/PaymentDao.java
index 2c46e15..b7180e8 100644
--- a/payment/src/main/java/org/killbill/billing/payment/dao/PaymentDao.java
+++ b/payment/src/main/java/org/killbill/billing/payment/dao/PaymentDao.java
@@ -1,7 +1,9 @@
/*
* Copyright 2010-2013 Ning, Inc.
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
- * Ning licenses this file to you under the Apache License, version 2.0
+ * The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
*
@@ -55,13 +57,13 @@ public interface PaymentDao extends EntityDao<PaymentModelDao, Payment, PaymentA
public Pagination<PaymentModelDao> searchPayments(String searchKey, Long offset, Long limit, InternalTenantContext context);
- public PaymentModelDao insertPaymentWithFirstTransaction(PaymentModelDao payment, PaymentTransactionModelDao paymentTransaction, InternalCallContext context);
+ public PaymentAndTransactionModelDao insertPaymentWithFirstTransaction(PaymentModelDao payment, PaymentTransactionModelDao paymentTransaction, InternalCallContext context);
public PaymentTransactionModelDao updatePaymentWithNewTransaction(UUID paymentId, PaymentTransactionModelDao paymentTransaction, InternalCallContext context);
- public void updatePaymentAndTransactionOnCompletion(UUID accountId, UUID attemptId, UUID paymentId, TransactionType transactionType, String currentPaymentStateName, String lastPaymentSuccessStateName, UUID transactionId,
- TransactionStatus paymentStatus, BigDecimal processedAmount, Currency processedCurrency,
- String gatewayErrorCode, String gatewayErrorMsg, InternalCallContext context);
+ public PaymentAndTransactionModelDao updatePaymentAndTransactionOnCompletion(UUID accountId, UUID attemptId, UUID paymentId, TransactionType transactionType, String currentPaymentStateName, String lastPaymentSuccessStateName, UUID transactionId,
+ TransactionStatus paymentStatus, BigDecimal processedAmount, Currency processedCurrency,
+ String gatewayErrorCode, String gatewayErrorMsg, InternalCallContext context);
public PaymentModelDao getPayment(UUID paymentId, InternalTenantContext context);
diff --git a/payment/src/main/java/org/killbill/billing/payment/dao/PaymentSqlDao.java b/payment/src/main/java/org/killbill/billing/payment/dao/PaymentSqlDao.java
index 2be09a6..ee8ad0f 100644
--- a/payment/src/main/java/org/killbill/billing/payment/dao/PaymentSqlDao.java
+++ b/payment/src/main/java/org/killbill/billing/payment/dao/PaymentSqlDao.java
@@ -45,17 +45,16 @@ public interface PaymentSqlDao extends EntitySqlDao<PaymentModelDao, Payment> {
@SqlUpdate
@Audited(ChangeType.UPDATE)
- void updatePaymentStateName(@Bind("id") final String paymentId,
- @Bind("stateName") final String stateName,
- @BindBean final InternalCallContext context);
-
+ Object updatePaymentStateName(@Bind("id") final String paymentId,
+ @Bind("stateName") final String stateName,
+ @BindBean final InternalCallContext context);
@SqlUpdate
@Audited(ChangeType.UPDATE)
- void updateLastSuccessPaymentStateName(@Bind("id") final String paymentId,
- @Bind("stateName") final String stateName,
- @Bind("lastSuccessStateName") final String lastSuccessStateName,
- @BindBean final InternalCallContext context);
+ Object updateLastSuccessPaymentStateName(@Bind("id") final String paymentId,
+ @Bind("stateName") final String stateName,
+ @Bind("lastSuccessStateName") final String lastSuccessStateName,
+ @BindBean final InternalCallContext context);
@SqlQuery
public PaymentModelDao getPaymentByExternalKey(@Bind("externalKey") final String externalKey,
diff --git a/payment/src/main/java/org/killbill/billing/payment/dao/TransactionSqlDao.java b/payment/src/main/java/org/killbill/billing/payment/dao/TransactionSqlDao.java
index 4f687aa..ba8b739 100644
--- a/payment/src/main/java/org/killbill/billing/payment/dao/TransactionSqlDao.java
+++ b/payment/src/main/java/org/killbill/billing/payment/dao/TransactionSqlDao.java
@@ -42,14 +42,14 @@ public interface TransactionSqlDao extends EntitySqlDao<PaymentTransactionModelD
@SqlUpdate
@Audited(ChangeType.UPDATE)
- void updateTransactionStatus(@Bind("id") final String transactionId,
- @Bind("attemptId") final String attemptId,
- @Bind("processedAmount") final BigDecimal processedAmount,
- @Bind("processedCurrency") final String processedCurrency,
- @Bind("transactionStatus") final String transactionStatus,
- @Bind("gatewayErrorCode") final String gatewayErrorCode,
- @Bind("gatewayErrorMsg") final String gatewayErrorMsg,
- @BindBean final InternalCallContext context);
+ Object updateTransactionStatus(@Bind("id") final String transactionId,
+ @Bind("attemptId") final String attemptId,
+ @Bind("processedAmount") final BigDecimal processedAmount,
+ @Bind("processedCurrency") final String processedCurrency,
+ @Bind("transactionStatus") final String transactionStatus,
+ @Bind("gatewayErrorCode") final String gatewayErrorCode,
+ @Bind("gatewayErrorMsg") final String gatewayErrorMsg,
+ @BindBean final InternalCallContext context);
@SqlQuery
List<PaymentTransactionModelDao> getPaymentTransactionsByExternalKey(@Bind("transactionExternalKey") final String transactionExternalKey,
diff --git a/payment/src/test/java/org/killbill/billing/payment/core/sm/MockRetryAuthorizeOperationCallback.java b/payment/src/test/java/org/killbill/billing/payment/core/sm/MockRetryAuthorizeOperationCallback.java
index d6e79c8..deee81e 100644
--- a/payment/src/test/java/org/killbill/billing/payment/core/sm/MockRetryAuthorizeOperationCallback.java
+++ b/payment/src/test/java/org/killbill/billing/payment/core/sm/MockRetryAuthorizeOperationCallback.java
@@ -87,7 +87,7 @@ public class MockRetryAuthorizeOperationCallback extends AuthorizeControlOperati
paymentStateContext.getCurrency(),
"",
"");
- final PaymentModelDao paymentModelDao = paymentDao.insertPaymentWithFirstTransaction(payment, transaction, paymentStateContext.getInternalCallContext());
+ final PaymentModelDao paymentModelDao = paymentDao.insertPaymentWithFirstTransaction(payment, transaction, paymentStateContext.getInternalCallContext()).getPaymentModelDao();
final PaymentTransaction convertedTransaction = new DefaultPaymentTransaction(transaction.getId(),
paymentStateContext.getAttemptId(),
transaction.getTransactionExternalKey(),
diff --git a/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java b/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java
index 12ce2be..f167975 100644
--- a/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java
+++ b/payment/src/test/java/org/killbill/billing/payment/dao/MockPaymentDao.java
@@ -1,7 +1,7 @@
/*
* Copyright 2010-2013 Ning, Inc.
- * Copyright 2014-2016 Groupon, Inc
- * Copyright 2014-2016 The Billing Project, LLC
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -191,7 +191,8 @@ public class MockPaymentDao extends MockEntityDaoBase<PaymentModelDao, Payment,
}
@Override
- public PaymentModelDao insertPaymentWithFirstTransaction(final PaymentModelDao payment, final PaymentTransactionModelDao paymentTransaction, final InternalCallContext context) {
+ public PaymentAndTransactionModelDao insertPaymentWithFirstTransaction(final PaymentModelDao payment, final PaymentTransactionModelDao paymentTransaction, final InternalCallContext context) {
+ final PaymentAndTransactionModelDao paymentAndTransactionModelDao = new PaymentAndTransactionModelDao();
payment.setTenantRecordId(context.getTenantRecordId());
paymentTransaction.setTenantRecordId(context.getTenantRecordId());
@@ -207,7 +208,11 @@ public class MockPaymentDao extends MockEntityDaoBase<PaymentModelDao, Payment,
mockNonEntityDao.addTenantRecordIdMapping(paymentTransaction.getId(), context);
mockNonEntityDao.addAccountRecordIdMapping((paymentTransaction.getId()), context);
}
- return payment;
+
+ paymentAndTransactionModelDao.setPaymentModelDao(payment);
+ paymentAndTransactionModelDao.setPaymentTransactionModelDao(paymentTransaction);
+
+ return paymentAndTransactionModelDao;
}
@Override
@@ -224,10 +229,12 @@ public class MockPaymentDao extends MockEntityDaoBase<PaymentModelDao, Payment,
}
@Override
- public void updatePaymentAndTransactionOnCompletion(final UUID accountId, final UUID attemptId, final UUID paymentId, final TransactionType transactionType,
- final String currentPaymentStateName, final String lastSuccessPaymentStateName, final UUID transactionId,
- final TransactionStatus paymentStatus, final BigDecimal processedAmount, final Currency processedCurrency,
- final String gatewayErrorCode, final String gatewayErrorMsg, final InternalCallContext context) {
+ public PaymentAndTransactionModelDao updatePaymentAndTransactionOnCompletion(final UUID accountId, final UUID attemptId, final UUID paymentId, final TransactionType transactionType,
+ final String currentPaymentStateName, final String lastSuccessPaymentStateName, final UUID transactionId,
+ final TransactionStatus paymentStatus, final BigDecimal processedAmount, final Currency processedCurrency,
+ final String gatewayErrorCode, final String gatewayErrorMsg, final InternalCallContext context) {
+ final PaymentAndTransactionModelDao paymentAndTransactionModelDao = new PaymentAndTransactionModelDao();
+
synchronized (this) {
final PaymentModelDao payment = payments.get(paymentId);
if (payment != null) {
@@ -242,6 +249,11 @@ public class MockPaymentDao extends MockEntityDaoBase<PaymentModelDao, Payment,
transaction.setGatewayErrorCode(gatewayErrorCode);
transaction.setGatewayErrorMsg(gatewayErrorMsg);
}
+
+ paymentAndTransactionModelDao.setPaymentModelDao(payment);
+ paymentAndTransactionModelDao.setPaymentTransactionModelDao(transaction);
+
+ return paymentAndTransactionModelDao;
}
}
diff --git a/payment/src/test/java/org/killbill/billing/payment/dao/TestDefaultPaymentDao.java b/payment/src/test/java/org/killbill/billing/payment/dao/TestDefaultPaymentDao.java
index 35d2c42..0fa8999 100644
--- a/payment/src/test/java/org/killbill/billing/payment/dao/TestDefaultPaymentDao.java
+++ b/payment/src/test/java/org/killbill/billing/payment/dao/TestDefaultPaymentDao.java
@@ -1,6 +1,6 @@
/*
- * Copyright 2014-2016 Groupon, Inc
- * Copyright 2014-2016 The Billing Project, LLC
+ * Copyright 2014-2017 Groupon, Inc
+ * Copyright 2014-2017 The Billing Project, LLC
*
* The Billing Project licenses this file to you under the Apache License, version 2.0
* (the "License"); you may not use this file except in compliance with the
@@ -50,7 +50,7 @@ public class TestDefaultPaymentDao extends PaymentTestSuiteWithEmbeddedDB {
final PaymentTransactionModelDao specifiedFirstPaymentTransactionModelDao = generatePaymentTransactionModelDao(specifiedFirstPaymentModelDao.getId());
// Create and verify the payment and transaction
- final PaymentModelDao firstPaymentModelDao = paymentDao.insertPaymentWithFirstTransaction(specifiedFirstPaymentModelDao, specifiedFirstPaymentTransactionModelDao, internalCallContext);
+ final PaymentModelDao firstPaymentModelDao = paymentDao.insertPaymentWithFirstTransaction(specifiedFirstPaymentModelDao, specifiedFirstPaymentTransactionModelDao, internalCallContext).getPaymentModelDao();
verifyPayment(firstPaymentModelDao, specifiedFirstPaymentModelDao);
verifyPaymentAndTransactions(internalCallContext, specifiedFirstPaymentModelDao, specifiedFirstPaymentTransactionModelDao);
@@ -89,7 +89,7 @@ public class TestDefaultPaymentDao extends PaymentTestSuiteWithEmbeddedDB {
final PaymentModelDao paymentModelDao = generatePaymentModelDao(accountId);
final PaymentTransactionModelDao paymentTransactionModelDao = generatePaymentTransactionModelDao(paymentModelDao.getId());
- final PaymentModelDao insertedPaymentModelDao = paymentDao.insertPaymentWithFirstTransaction(paymentModelDao, paymentTransactionModelDao, internalCallContext);
+ final PaymentModelDao insertedPaymentModelDao = paymentDao.insertPaymentWithFirstTransaction(paymentModelDao, paymentTransactionModelDao, internalCallContext).getPaymentModelDao();
verifyPayment(insertedPaymentModelDao, paymentModelDao);
// Verify search APIs
diff --git a/payment/src/test/java/org/killbill/billing/payment/dao/TestPaymentDao.java b/payment/src/test/java/org/killbill/billing/payment/dao/TestPaymentDao.java
index a23c0a0..113c147 100644
--- a/payment/src/test/java/org/killbill/billing/payment/dao/TestPaymentDao.java
+++ b/payment/src/test/java/org/killbill/billing/payment/dao/TestPaymentDao.java
@@ -110,7 +110,7 @@ public class TestPaymentDao extends PaymentTestSuiteWithEmbeddedDB {
TransactionStatus.SUCCESS, BigDecimal.TEN, Currency.AED,
"success", "");
- final PaymentModelDao savedPayment = paymentDao.insertPaymentWithFirstTransaction(paymentModelDao, transactionModelDao, internalCallContext);
+ final PaymentModelDao savedPayment = paymentDao.insertPaymentWithFirstTransaction(paymentModelDao, transactionModelDao, internalCallContext).getPaymentModelDao();
assertEquals(savedPayment.getId(), paymentModelDao.getId());
assertEquals(savedPayment.getAccountId(), paymentModelDao.getAccountId());
assertEquals(savedPayment.getExternalKey(), paymentModelDao.getExternalKey());
@@ -312,7 +312,7 @@ public class TestPaymentDao extends PaymentTestSuiteWithEmbeddedDB {
TransactionStatus.PENDING, BigDecimal.TEN, Currency.AED,
"pending", "");
- final PaymentModelDao payment = paymentDao.insertPaymentWithFirstTransaction(paymentModelDao, transaction1, internalCallContext);
+ final PaymentModelDao payment = paymentDao.insertPaymentWithFirstTransaction(paymentModelDao, transaction1, internalCallContext).getPaymentModelDao();
final PaymentTransactionModelDao transaction2 = new PaymentTransactionModelDao(initialTime, initialTime, null, transactionExternalKey2,
paymentModelDao.getId(), TransactionType.AUTHORIZE, initialTime,