killbill-aplcache

#599 - Added method to get a Payment Transaction by Id - Updated

9/26/2016 12:14:16 PM

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
index 94464f6..f8fd726 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/TransactionResource.java
@@ -47,6 +47,7 @@ import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
 import org.killbill.billing.payment.api.Payment;
 import org.killbill.billing.payment.api.PaymentApi;
 import org.killbill.billing.payment.api.PaymentApiException;
+import org.killbill.billing.payment.api.PaymentTransaction;
 import org.killbill.billing.payment.api.PluginProperty;
 import org.killbill.billing.payment.api.TransactionStatus;
 import org.killbill.billing.util.api.AuditUserApi;
@@ -174,10 +175,11 @@ public class TransactionResource extends JaxRsResourceBase {
     public Response getTags(@PathParam(ID_PARAM_NAME) final String id,
                             @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
                             @QueryParam(QUERY_TAGS_INCLUDED_DELETED) @DefaultValue("false") final Boolean includedDeleted,
-                            @javax.ws.rs.core.Context final HttpServletRequest request) throws TagDefinitionApiException {
+                            @javax.ws.rs.core.Context final HttpServletRequest request) throws TagDefinitionApiException, PaymentApiException {
         final TenantContext tenantContext = context.createContext(request);
-        //return super.getTags(accountId, invoiceId, auditMode, includedDeleted, tenantContext);
-        throw new IllegalStateException("Not implemented");
+        final PaymentTransaction paymentTransaction = paymentApi.getPaymentTransactionById(UUID.fromString(id), tenantContext);
+        final Payment payment = paymentApi.getPayment(paymentTransaction.getPaymentId(), false, false, ImmutableList.<PluginProperty>of(), tenantContext);
+        return super.getTags(payment.getAccountId(), UUID.fromString(id), auditMode, includedDeleted, tenantContext);
     }
 
     @TimedResource
diff --git a/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentApi.java b/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentApi.java
index ac0702a..f57bea6 100644
--- a/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentApi.java
+++ b/payment/src/main/java/org/killbill/billing/payment/api/DefaultPaymentApi.java
@@ -911,6 +911,11 @@ public class DefaultPaymentApi extends DefaultApiBase implements PaymentApi {
         return paymentMethods;
     }
 
+    @Override
+    public PaymentTransaction getPaymentTransactionById(final UUID paymentTransactionId, final TenantContext context) throws PaymentApiException {
+        return paymentProcessor.getPaymentTransactionById(paymentTransactionId, internalCallContextFactory.createInternalTenantContextWithoutAccountRecordId(context));
+    }
+
     private PaymentTransaction findPaymentTransaction(final Payment payment, @Nullable final String paymentTransactionExternalKey) {
         // By design, the payment transactions are already correctly sorted (by effective date asc)
         if (paymentTransactionExternalKey == null) {
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 ab61ca5..0b29de1 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
@@ -389,6 +389,27 @@ public class PaymentProcessor extends ProcessorBase {
         }
     }
 
+    public PaymentTransaction getPaymentTransactionById(final UUID transactionId,
+                                                        final InternalTenantContext internalTenantContext) throws PaymentApiException {
+        final PaymentTransactionModelDao paymentTransactionDao = paymentDao.getPaymentTransaction(transactionId, internalTenantContext);
+        return new DefaultPaymentTransaction(
+                paymentTransactionDao.getId(),
+                paymentTransactionDao.getAttemptId(),
+                paymentTransactionDao.getTransactionExternalKey(),
+                paymentTransactionDao.getCreatedDate(),
+                paymentTransactionDao.getUpdatedDate(),
+                paymentTransactionDao.getPaymentId(),
+                paymentTransactionDao.getTransactionType(),
+                paymentTransactionDao.getEffectiveDate(),
+                paymentTransactionDao.getTransactionStatus(),
+                paymentTransactionDao.getAmount(),
+                paymentTransactionDao.getCurrency(),
+                paymentTransactionDao.getProcessedAmount(),
+                paymentTransactionDao.getProcessedCurrency(),
+                paymentTransactionDao.getGatewayErrorCode(),
+                paymentTransactionDao.getGatewayErrorMsg(),
+                null);
+    }
 
     private Payment performOperation(final boolean isApiPayment,
                                      @Nullable final UUID attemptId,

pom.xml 2(+1 -1)

diff --git a/pom.xml b/pom.xml
index 1bb43b2..0927ec9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <artifactId>killbill-oss-parent</artifactId>
         <groupId>org.kill-bill.billing</groupId>
-        <version>0.128</version>
+        <version>0.129-SNAPSHOT</version>
     </parent>
     <artifactId>killbill</artifactId>
     <version>0.17.5-SNAPSHOT</version>
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java
index 16f4c35..928ba11 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPayment.java
@@ -36,6 +36,7 @@ import org.killbill.billing.client.model.PaymentMethodPluginDetail;
 import org.killbill.billing.client.model.PaymentTransaction;
 import org.killbill.billing.client.model.Payments;
 import org.killbill.billing.client.model.PluginProperty;
+import org.killbill.billing.client.model.TagDefinition;
 import org.killbill.billing.client.model.Tags;
 import org.killbill.billing.control.plugin.api.PaymentControlPluginApi;
 import org.killbill.billing.osgi.api.OSGIServiceDescriptor;
@@ -644,6 +645,50 @@ public class TestPayment extends TestJaxrsBase {
         Assert.assertNull(payment);
     }
 
+    @Test(groups = "slow")
+    public void testGetTagsForPaymentTransaction() throws Exception {
+        UUID tagDefinitionId = UUID.randomUUID();
+        String tagDefinitionName = "payment-transaction";
+        TagDefinition tagDefinition = new TagDefinition(tagDefinitionId, false, tagDefinitionName, "description", null);
+        final TagDefinition createdTagDefinition = killBillClient.createTagDefinition(tagDefinition, requestOptions);
+
+        final Account account = createAccountWithDefaultPaymentMethod();
+        final String externalPaymentKey = UUID.randomUUID().toString();
+        final UUID paymentId = testCreateRetrievePayment(account, null, externalPaymentKey, 1);
+
+        final Payment payment = killBillClient.getPaymentByExternalKey(externalPaymentKey, requestOptions);
+        assertEquals(payment.getPaymentId(), paymentId);
+
+        UUID paymentTransactionId = payment.getTransactions().get(0).getTransactionId();
+        killBillClient.createPaymentTransactionTag(paymentTransactionId, createdTagDefinition.getId(), requestOptions);
+
+        final Tags paymentTransactionTags = killBillClient.getPaymentTransactionTags(paymentTransactionId, requestOptions);
+
+        Assert.assertNotNull(paymentTransactionTags);
+        Assert.assertEquals(paymentTransactionTags.get(0).getTagDefinitionName(), tagDefinitionName);
+    }
+
+    @Test(groups = "slow")
+    public void testCreateTagForPaymentTransaction() throws Exception {
+        UUID tagDefinitionId = UUID.randomUUID();
+        String tagDefinitionName = "payment-transaction";
+        TagDefinition tagDefinition = new TagDefinition(tagDefinitionId, false, tagDefinitionName, "description", null);
+        final TagDefinition createdTagDefinition = killBillClient.createTagDefinition(tagDefinition, requestOptions);
+
+        final Account account = createAccountWithDefaultPaymentMethod();
+        final String externalPaymentKey = UUID.randomUUID().toString();
+        final UUID paymentId = testCreateRetrievePayment(account, null, externalPaymentKey, 1);
+
+        final Payment payment = killBillClient.getPaymentByExternalKey(externalPaymentKey, requestOptions);
+        assertEquals(payment.getPaymentId(), paymentId);
+
+        UUID paymentTransactionId = payment.getTransactions().get(0).getTransactionId();
+        final Tags paymentTransactionTag = killBillClient.createPaymentTransactionTag(paymentTransactionId, createdTagDefinition.getId(), requestOptions);
+
+        Assert.assertNotNull(paymentTransactionTag);
+        Assert.assertEquals(paymentTransactionTag.get(0).getTagDefinitionName(), tagDefinitionName);
+    }
+
     private UUID testCreateRetrievePayment(final Account account, @Nullable final UUID paymentMethodId,
                                            final String paymentExternalKey, final int paymentNb) throws Exception {
         // Authorization