killbill-aplcache

missed 1.0 resource

5/31/2012 7:03:02 PM

Details

diff --git a/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargeBackResource.java b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargeBackResource.java
new file mode 100644
index 0000000..f9e2941
--- /dev/null
+++ b/jaxrs/src/main/java/com/ning/billing/jaxrs/resources/ChargeBackResource.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2010-2011 Ning, Inc.
+ *
+ * Ning 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 com.ning.billing.jaxrs.resources;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.ning.billing.invoice.api.InvoiceApiException;
+import com.ning.billing.invoice.api.InvoicePayment;
+import com.ning.billing.invoice.api.InvoicePaymentApi;
+import com.ning.billing.jaxrs.json.ChargebackCollectionJson;
+import com.ning.billing.jaxrs.json.ChargebackJson;
+import com.ning.billing.jaxrs.util.Context;
+import com.ning.billing.jaxrs.util.JaxrsUriBuilder;
+import com.ning.billing.payment.api.PaymentApi;
+import com.ning.billing.payment.api.PaymentApiException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
+
+@Singleton
+@Path(JaxrsResource.PREFIX)
+public class ChargebackResource implements JaxrsResource {
+    private static final Logger log = LoggerFactory.getLogger(ChargebackResource.class);
+
+    private final JaxrsUriBuilder uriBuilder;
+    private final InvoicePaymentApi invoicePaymentApi;
+    private final PaymentApi paymentApi;
+    private final Context context;
+
+    @Inject
+    public ChargebackResource(final JaxrsUriBuilder uriBuilder,
+                              final InvoicePaymentApi invoicePaymentApi,
+                              final PaymentApi paymentApi,
+                              final Context context) {
+        this.uriBuilder = uriBuilder;
+        this.invoicePaymentApi = invoicePaymentApi;
+        this.paymentApi = paymentApi;
+        this.context = context;
+    }
+
+    @GET
+    @Path("/accounts/{accountId:" + UUID_PATTERN + "}/chargebacks")
+    @Produces(APPLICATION_JSON)
+    public Response getForAccount(@PathParam("accountId") String accountId) {
+        List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByAccountId(UUID.fromString(accountId));
+        List<ChargebackJson> chargebacksJson = convertToJson(chargebacks);
+
+        ChargebackCollectionJson json = new ChargebackCollectionJson(accountId, chargebacksJson);
+        return Response.status(Response.Status.OK).entity(json).build();
+    }
+
+    @GET
+    @Path("/payments/{paymentId:" + UUID_PATTERN + "}/chargebacks")
+    @Produces(APPLICATION_JSON)
+    public Response getForPayment(@PathParam("paymentId") String paymentId) {
+        UUID paymentAttemptId = null;
+        try {
+            paymentAttemptId = paymentApi.getPaymentAttemptIdFromPaymentId(UUID.fromString(paymentId));
+        } catch (PaymentApiException e) {
+            final String error = String.format("Failed to locate payment attempt for payment id %s", paymentId);
+            log.info(error, e);
+            return Response.status(Response.Status.NO_CONTENT).build();
+        }
+
+        List<InvoicePayment> chargebacks = invoicePaymentApi.getChargebacksByPaymentAttemptId(paymentAttemptId);
+        List<ChargebackJson> chargebacksJson = convertToJson(chargebacks);
+
+        try {
+            String accountId = invoicePaymentApi.getAccountIdFromInvoicePaymentId(UUID.fromString(paymentId)).toString();
+
+            ChargebackCollectionJson json = new ChargebackCollectionJson(accountId, chargebacksJson);
+            return Response.status(Response.Status.OK).entity(json).build();
+        } catch (InvoiceApiException e) {
+            final String error = String.format("Failed to locate account for payment id %s", paymentId);
+            log.info(error, e);
+            return Response.status(Response.Status.NO_CONTENT).build();
+        }
+    }
+
+    @POST
+    @Consumes(APPLICATION_JSON)
+    @Produces(APPLICATION_JSON)
+    public Response createChargeback(final ChargebackJson json,
+                                    @HeaderParam(HDR_CREATED_BY) final String createdBy,
+                                    @HeaderParam(HDR_REASON) final String reason,
+                                    @HeaderParam(HDR_COMMENT) final String comment) {
+        try {
+            invoicePaymentApi.processChargeback(UUID.fromString(json.getPaymentId()), json.getChargebackAmount(),
+                    context.createContext(createdBy, reason, comment));
+            return uriBuilder.buildResponse(ChargebackResource.class, "createChargeback", json.getPaymentId());
+        } catch (InvoiceApiException e) {
+            final String error = String.format("Failed to create chargeback %s", json);
+            log.info(error, e);
+            return Response.status(Response.Status.BAD_REQUEST).entity(error).build();
+        } catch (IllegalArgumentException e) {
+            return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build();
+        }
+    }
+
+    private List<ChargebackJson> convertToJson(List<InvoicePayment> chargebacks) {
+        List<ChargebackJson> result = new ArrayList<ChargebackJson>();
+        for (InvoicePayment chargeback : chargebacks) {
+            result.add(new ChargebackJson(chargeback));
+        }
+
+        return result;
+    }
+}
\ No newline at end of file