killbill-memoizeit
Changes
pom.xml 2(+1 -1)
Details
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/DirectPaymentJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/DirectPaymentJson.java
index 40485d6..87bdd14 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/DirectPaymentJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/DirectPaymentJson.java
@@ -24,13 +24,12 @@ import javax.annotation.Nullable;
import org.killbill.billing.payment.api.DirectPayment;
import org.killbill.billing.payment.api.DirectPaymentTransaction;
-import org.killbill.billing.payment.api.TransactionType;
+import org.killbill.billing.util.audit.AccountAuditLogs;
import org.killbill.billing.util.audit.AuditLog;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Function;
-import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
@@ -69,25 +68,25 @@ public class DirectPaymentJson extends JsonBase {
this.transactions = transactions;
}
- public DirectPaymentJson(final DirectPayment dp, @Nullable final List<AuditLog> directPaymentLogs, @Nullable final List<AuditLog> directTransactionLogs) {
+ public DirectPaymentJson(final DirectPayment dp, @Nullable final AccountAuditLogs accountAuditLogs) {
this(dp.getAccountId().toString(),
- dp.getId().toString(),
- dp.getPaymentNumber().toString(),
- dp.getAuthAmount(),
- dp.getCapturedAmount(),
- dp.getRefundedAmount(),
- dp.getCurrency() != null ? dp.getCurrency().toString() : null,
- dp.getPaymentMethodId() != null ? dp.getPaymentMethodId().toString() : null,
- getTransactions(dp.getTransactions(), dp.getId(), dp.getExternalKey(), directTransactionLogs),
- toAuditLogJson(directPaymentLogs));
+ dp.getId().toString(),
+ dp.getPaymentNumber().toString(),
+ dp.getAuthAmount(),
+ dp.getCapturedAmount(),
+ dp.getRefundedAmount(),
+ dp.getCurrency() != null ? dp.getCurrency().toString() : null,
+ dp.getPaymentMethodId() != null ? dp.getPaymentMethodId().toString() : null,
+ getTransactions(dp.getTransactions(), dp.getId(), dp.getExternalKey(), accountAuditLogs),
+ toAuditLogJson(accountAuditLogs == null ? null : accountAuditLogs.getAuditLogsForDirectPayment(dp.getId())));
}
-
- private static List<DirectTransactionJson> getTransactions(final List<DirectPaymentTransaction> transactions, final UUID directPaymentId, final String externalKey, @Nullable final List<AuditLog> directTransactionLogs) {
+ private static List<DirectTransactionJson> getTransactions(final List<DirectPaymentTransaction> transactions, final UUID directPaymentId, final String externalKey, @Nullable final AccountAuditLogs accountAuditLogs) {
return ImmutableList.copyOf(Iterables.transform(transactions, new Function<DirectPaymentTransaction, DirectTransactionJson>() {
@Override
public DirectTransactionJson apply(final DirectPaymentTransaction input) {
- return new DirectTransactionJson(input,directPaymentId, externalKey, directTransactionLogs);
+ final List<AuditLog> auditLogsForDirectPaymentTransaction = accountAuditLogs == null ? null : accountAuditLogs.getAuditLogsForDirectPaymentTransaction(input.getId());
+ return new DirectTransactionJson(input, directPaymentId, externalKey, auditLogsForDirectPaymentTransaction);
}
}));
}
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
index e9c88b8..0d085d4 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/AccountResource.java
@@ -616,14 +616,16 @@ public class AccountResource extends JaxRsResourceBase {
@Path("/{accountId:" + UUID_PATTERN + "}/" + DIRECT_PAYMENTS)
@Produces(APPLICATION_JSON)
public Response getDirectPaymentsForAccount(@PathParam("accountId") final String accountIdStr,
+ @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
@javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
final UUID accountId = UUID.fromString(accountIdStr);
- final List<DirectPayment> payments = directPaymentApi.getAccountPayments(accountId, context.createContext(request));
+ final TenantContext tenantContext = context.createContext(request);
+ final List<DirectPayment> payments = directPaymentApi.getAccountPayments(accountId, tenantContext);
+ final AccountAuditLogs accountAuditLogs = auditUserApi.getAccountAuditLogs(accountId, auditMode.getLevel(), tenantContext);
final List<DirectPaymentJson> result = ImmutableList.copyOf(Iterables.transform(payments, new Function<DirectPayment, DirectPaymentJson>() {
@Override
- public DirectPaymentJson apply(final DirectPayment input) {
- // STEPH_DP audits
- return new DirectPaymentJson(input, null, null);
+ public DirectPaymentJson apply(final DirectPayment directPayment) {
+ return new DirectPaymentJson(directPayment, accountAuditLogs);
}
}));
return Response.status(Response.Status.OK).entity(result).build();
@@ -649,7 +651,7 @@ public class AccountResource extends JaxRsResourceBase {
final UUID directPaymentId = json.getDirectPaymentId() == null ? null : UUID.fromString(json.getDirectPaymentId());
final TransactionType transactionType = TransactionType.valueOf(json.getTransactionType());
- DirectPayment result;
+ final DirectPayment result;
switch (transactionType) {
case AUTHORIZE:
result = directPaymentApi.createAuthorization(account, directPaymentId, json.getAmount(), currency, json.getExternalKey(), pluginProperties, callContext);
@@ -694,7 +696,7 @@ public class AccountResource extends JaxRsResourceBase {
final List<Refund> refunds = paymentApi.getAccountRefunds(account, tenantContext);
final List<RefundJson> result = new ArrayList<RefundJson>(Collections2.transform(refunds, new Function<Refund, RefundJson>() {
@Override
- public RefundJson apply(Refund input) {
+ public RefundJson apply(final Refund input) {
// TODO Return adjusted items and audits
return new RefundJson(input, null, null);
}
@@ -889,7 +891,7 @@ public class AccountResource extends JaxRsResourceBase {
final UUID accountId = UUID.fromString(id);
final List<AccountEmail> emails = accountUserApi.getEmails(accountId, context.createContext(request));
- for (AccountEmail cur : emails) {
+ for (final AccountEmail cur : emails) {
if (cur.getEmail().equals(email)) {
final AccountEmailJson accountEmailJson = new AccountEmailJson(accountId.toString(), email);
final AccountEmail accountEmail = accountEmailJson.toAccountEmail(cur.getId());
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
index 20ccbf9..665ea81 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/DirectPaymentResource.java
@@ -17,8 +17,12 @@
package org.killbill.billing.jaxrs.resources;
+import java.net.URI;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
@@ -50,9 +54,16 @@ import org.killbill.billing.payment.api.PluginProperty;
import org.killbill.billing.util.api.AuditUserApi;
import org.killbill.billing.util.api.CustomFieldUserApi;
import org.killbill.billing.util.api.TagUserApi;
+import org.killbill.billing.util.audit.AccountAuditLogs;
import org.killbill.billing.util.callcontext.CallContext;
+import org.killbill.billing.util.callcontext.TenantContext;
+import org.killbill.billing.util.entity.Pagination;
import org.killbill.clock.Clock;
+import com.google.common.base.Function;
+import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
+
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
@Path(JaxrsResource.DIRECT_PAYMENTS_PATH)
@@ -79,14 +90,99 @@ public class DirectPaymentResource extends JaxRsResourceBase {
public Response getDirectPayment(@PathParam("directPaymentId") final String directPaymentIdStr,
@QueryParam(QUERY_PAYMENT_METHOD_PLUGIN_INFO) @DefaultValue("false") final Boolean withPluginInfo,
@QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
+ @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
@javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
final UUID directPaymentIdId = UUID.fromString(directPaymentIdStr);
- final DirectPayment payment = directPaymentApi.getPayment(directPaymentIdId, withPluginInfo, pluginProperties, context.createContext(request));
- final DirectPaymentJson result = new DirectPaymentJson(payment, null, null);
+ final TenantContext tenantContext = context.createContext(request);
+ final DirectPayment directPayment = directPaymentApi.getPayment(directPaymentIdId, withPluginInfo, pluginProperties, tenantContext);
+ final AccountAuditLogs accountAuditLogs = auditUserApi.getAccountAuditLogs(directPayment.getAccountId(), auditMode.getLevel(), tenantContext);
+ final DirectPaymentJson result = new DirectPaymentJson(directPayment, accountAuditLogs);
+
return Response.status(Response.Status.OK).entity(result).build();
}
+ @GET
+ @Path("/" + PAGINATION)
+ @Produces(APPLICATION_JSON)
+ public Response getDirectPayments(@QueryParam(QUERY_SEARCH_OFFSET) @DefaultValue("0") final Long offset,
+ @QueryParam(QUERY_SEARCH_LIMIT) @DefaultValue("100") final Long limit,
+ @QueryParam(QUERY_PAYMENT_PLUGIN_NAME) final String pluginName,
+ @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
+ @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
+ @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
+ final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
+ final TenantContext tenantContext = context.createContext(request);
+
+ final Pagination<DirectPayment> directPayments;
+ if (Strings.isNullOrEmpty(pluginName)) {
+ directPayments = directPaymentApi.getPayments(offset, limit, pluginProperties, tenantContext);
+ } else {
+ directPayments = directPaymentApi.getPayments(offset, limit, pluginName, pluginProperties, tenantContext);
+ }
+
+ final URI nextPageUri = uriBuilder.nextPage(DirectPaymentResource.class, "getDirectPayments", directPayments.getNextOffset(), limit, ImmutableMap.<String, String>of(QUERY_PAYMENT_METHOD_PLUGIN_NAME, Strings.nullToEmpty(pluginName),
+ QUERY_AUDIT, auditMode.getLevel().toString()));
+ final AtomicReference<Map<UUID, AccountAuditLogs>> accountsAuditLogs = new AtomicReference<Map<UUID, AccountAuditLogs>>(new HashMap<UUID, AccountAuditLogs>());
+
+ return buildStreamingPaginationResponse(directPayments,
+ new Function<DirectPayment, DirectPaymentJson>() {
+ @Override
+ public DirectPaymentJson apply(final DirectPayment directPayment) {
+ // Cache audit logs per account
+ if (accountsAuditLogs.get().get(directPayment.getAccountId()) == null) {
+ accountsAuditLogs.get().put(directPayment.getAccountId(), auditUserApi.getAccountAuditLogs(directPayment.getAccountId(), auditMode.getLevel(), tenantContext));
+ }
+ final AccountAuditLogs accountAuditLogs = accountsAuditLogs.get().get(directPayment.getAccountId());
+ return new DirectPaymentJson(directPayment, accountAuditLogs);
+ }
+ },
+ nextPageUri
+ );
+ }
+
+ @GET
+ @Path("/" + SEARCH + "/{searchKey:" + ANYTHING_PATTERN + "}")
+ @Produces(APPLICATION_JSON)
+ public Response searchDirectPayments(@PathParam("searchKey") final String searchKey,
+ @QueryParam(QUERY_SEARCH_OFFSET) @DefaultValue("0") final Long offset,
+ @QueryParam(QUERY_SEARCH_LIMIT) @DefaultValue("100") final Long limit,
+ @QueryParam(QUERY_PAYMENT_PLUGIN_NAME) final String pluginName,
+ @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
+ @QueryParam(QUERY_AUDIT) @DefaultValue("NONE") final AuditMode auditMode,
+ @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException {
+ final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
+ final TenantContext tenantContext = context.createContext(request);
+
+ // Search the plugin(s)
+ final Pagination<DirectPayment> directPayments;
+ if (Strings.isNullOrEmpty(pluginName)) {
+ directPayments = directPaymentApi.searchPayments(searchKey, offset, limit, pluginProperties, tenantContext);
+ } else {
+ directPayments = directPaymentApi.searchPayments(searchKey, offset, limit, pluginName, pluginProperties, tenantContext);
+ }
+
+ final URI nextPageUri = uriBuilder.nextPage(DirectPaymentResource.class, "searchDirectPayments", directPayments.getNextOffset(), limit, ImmutableMap.<String, String>of("searchKey", searchKey,
+ QUERY_PAYMENT_METHOD_PLUGIN_NAME, Strings.nullToEmpty(pluginName),
+ QUERY_AUDIT, auditMode.getLevel().toString()));
+ final AtomicReference<Map<UUID, AccountAuditLogs>> accountsAuditLogs = new AtomicReference<Map<UUID, AccountAuditLogs>>(new HashMap<UUID, AccountAuditLogs>());
+
+ return buildStreamingPaginationResponse(directPayments,
+ new Function<DirectPayment, DirectPaymentJson>() {
+ @Override
+ public DirectPaymentJson apply(final DirectPayment directPayment) {
+ // Cache audit logs per account
+ if (accountsAuditLogs.get().get(directPayment.getAccountId()) == null) {
+ accountsAuditLogs.get().put(directPayment.getAccountId(), auditUserApi.getAccountAuditLogs(directPayment.getAccountId(), auditMode.getLevel(), tenantContext));
+ }
+ final AccountAuditLogs accountAuditLogs = accountsAuditLogs.get().get(directPayment.getAccountId());
+ return new DirectPaymentJson(directPayment, accountAuditLogs);
+ }
+ },
+ nextPageUri
+ );
+ }
+
@POST
@Path("/{directPaymentId:" + UUID_PATTERN + "}/")
@Consumes(APPLICATION_JSON)
@@ -100,7 +196,6 @@ public class DirectPaymentResource extends JaxRsResourceBase {
@javax.ws.rs.core.Context final UriInfo uriInfo,
@javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException, AccountApiException {
final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
- // STEPH_DP error code if no such payment
final CallContext callContext = context.createContext(createdBy, reason, comment, request);
final UUID directPaymentId = UUID.fromString(directPaymentIdStr);
final DirectPayment initialPayment = directPaymentApi.getPayment(directPaymentId, false, pluginProperties, callContext);
@@ -112,6 +207,30 @@ public class DirectPaymentResource extends JaxRsResourceBase {
return uriBuilder.buildResponse(uriInfo, DirectPaymentResource.class, "getDirectPayment", payment.getId());
}
+ @POST
+ @Path("/{directPaymentId:" + UUID_PATTERN + "}/" + CREDITS)
+ @Consumes(APPLICATION_JSON)
+ @Produces(APPLICATION_JSON)
+ public Response creditPayment(final PaymentJson json,
+ @PathParam("directPaymentId") final String directPaymentIdStr,
+ @QueryParam(QUERY_PLUGIN_PROPERTY) final List<String> pluginPropertiesString,
+ @HeaderParam(HDR_CREATED_BY) final String createdBy,
+ @HeaderParam(HDR_REASON) final String reason,
+ @HeaderParam(HDR_COMMENT) final String comment,
+ @javax.ws.rs.core.Context final UriInfo uriInfo,
+ @javax.ws.rs.core.Context final HttpServletRequest request) throws PaymentApiException, AccountApiException {
+ final Iterable<PluginProperty> pluginProperties = extractPluginProperties(pluginPropertiesString);
+ final CallContext callContext = context.createContext(createdBy, reason, comment, request);
+ final UUID directPaymentId = UUID.fromString(directPaymentIdStr);
+ final DirectPayment initialPayment = directPaymentApi.getPayment(directPaymentId, false, pluginProperties, callContext);
+
+ final Account account = accountUserApi.getAccountById(initialPayment.getAccountId(), callContext);
+ final Currency currency = json.getCurrency() == null ? account.getCurrency() : Currency.valueOf(json.getCurrency());
+
+ final DirectPayment payment = directPaymentApi.createCredit(account, directPaymentId, json.getAmount(), currency, pluginProperties, callContext);
+ return uriBuilder.buildResponse(uriInfo, DirectPaymentResource.class, "getDirectPayment", payment.getId());
+ }
+
@DELETE
@Path("/{directPaymentId:" + UUID_PATTERN + "}/")
@Consumes(APPLICATION_JSON)
pom.xml 2(+1 -1)
diff --git a/pom.xml b/pom.xml
index 8f296ff..6c670af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,7 @@
<parent>
<artifactId>killbill-oss-parent</artifactId>
<groupId>org.kill-bill.billing</groupId>
- <version>0.7.4</version>
+ <version>0.7.5</version>
</parent>
<artifactId>killbill</artifactId>
<version>0.11.2-SNAPSHOT</version>
diff --git a/util/src/main/java/org/killbill/billing/util/audit/DefaultAccountAuditLogs.java b/util/src/main/java/org/killbill/billing/util/audit/DefaultAccountAuditLogs.java
index 85bd2da..6995911 100644
--- a/util/src/main/java/org/killbill/billing/util/audit/DefaultAccountAuditLogs.java
+++ b/util/src/main/java/org/killbill/billing/util/audit/DefaultAccountAuditLogs.java
@@ -91,6 +91,16 @@ public class DefaultAccountAuditLogs implements AccountAuditLogs {
}
@Override
+ public List<AuditLog> getAuditLogsForDirectPayment(final UUID directPaymentId) {
+ return getAuditLogs(ObjectType.DIRECT_PAYMENT).getAuditLogs(directPaymentId);
+ }
+
+ @Override
+ public List<AuditLog> getAuditLogsForDirectPaymentTransaction(final UUID directPaymentTransactionId) {
+ return getAuditLogs(ObjectType.DIRECT_TRANSACTION).getAuditLogs(directPaymentTransactionId);
+ }
+
+ @Override
public List<AuditLog> getAuditLogsForPaymentMethod(final UUID paymentMethodId) {
return getAuditLogs(ObjectType.PAYMENT_METHOD).getAuditLogs(paymentMethodId);
}