Use Braintree subscription status alongside transaction status to determine 204 and 402 responses for `/v1/subscription/{subscriberId}/receipt_credentials`
This commit is contained in:
parent
c85ddaeb9c
commit
216ac72ad0
|
@ -523,27 +523,35 @@ public class BraintreeManager implements SubscriptionProcessorManager {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<ReceiptItem> getReceiptItem(String subscriptionId) {
|
public CompletableFuture<ReceiptItem> getReceiptItem(String subscriptionId) {
|
||||||
|
return getSubscription(subscriptionId)
|
||||||
|
.thenApply(BraintreeManager::getSubscription)
|
||||||
|
.thenApply(subscription -> getLatestTransactionForSubscription(subscription)
|
||||||
|
.map(transaction -> {
|
||||||
|
if (!getPaymentStatus(transaction.getStatus()).equals(PaymentStatus.SUCCEEDED)) {
|
||||||
|
final SubscriptionStatus subscriptionStatus = getSubscriptionStatus(subscription.getStatus());
|
||||||
|
if (subscriptionStatus.equals(SubscriptionStatus.ACTIVE) || subscriptionStatus.equals(SubscriptionStatus.PAST_DUE)) {
|
||||||
|
throw new WebApplicationException(Response.Status.NO_CONTENT);
|
||||||
|
}
|
||||||
|
|
||||||
return getLatestTransactionForSubscription(subscriptionId).thenApply(maybeTransaction -> maybeTransaction.map(transaction -> {
|
throw new WebApplicationException(Response.status(Response.Status.PAYMENT_REQUIRED)
|
||||||
|
.entity(Map.of("chargeFailure", createChargeFailure(transaction)))
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
if (!getPaymentStatus(transaction.getStatus()).equals(PaymentStatus.SUCCEEDED)) {
|
final Instant expiration = transaction.getSubscriptionDetails().getBillingPeriodEndDate().toInstant();
|
||||||
throw new WebApplicationException(Response.Status.PAYMENT_REQUIRED);
|
final Plan plan = braintreeGateway.plan().find(transaction.getPlanId());
|
||||||
}
|
|
||||||
|
|
||||||
final Instant expiration = transaction.getSubscriptionDetails().getBillingPeriodEndDate().toInstant();
|
final BraintreePlanMetadata metadata;
|
||||||
final Plan plan = braintreeGateway.plan().find(transaction.getPlanId());
|
try {
|
||||||
|
metadata = SystemMapper.jsonMapper().readValue(plan.getDescription(), BraintreePlanMetadata.class);
|
||||||
|
|
||||||
final BraintreePlanMetadata metadata;
|
} catch (JsonProcessingException e) {
|
||||||
try {
|
throw new RuntimeException(e);
|
||||||
metadata = SystemMapper.jsonMapper().readValue(plan.getDescription(), BraintreePlanMetadata.class);
|
}
|
||||||
|
|
||||||
} catch (JsonProcessingException e) {
|
return new ReceiptItem(transaction.getId(), expiration, metadata.level());
|
||||||
throw new RuntimeException(e);
|
})
|
||||||
}
|
.orElseThrow(() -> new WebApplicationException(Response.Status.NO_CONTENT)));
|
||||||
|
|
||||||
return new ReceiptItem(transaction.getId(), expiration, metadata.level());
|
|
||||||
|
|
||||||
}).orElseThrow(() -> new WebApplicationException(Response.Status.NO_CONTENT)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Subscription getSubscription(Object subscriptionObj) {
|
private static Subscription getSubscription(Object subscriptionObj) {
|
||||||
|
@ -553,12 +561,6 @@ public class BraintreeManager implements SubscriptionProcessorManager {
|
||||||
return subscription;
|
return subscription;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompletableFuture<Optional<Transaction>> getLatestTransactionForSubscription(String subscriptionId) {
|
|
||||||
return getSubscription(subscriptionId)
|
|
||||||
.thenApply(BraintreeManager::getSubscription)
|
|
||||||
.thenApply(this::getLatestTransactionForSubscription);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<Transaction> getLatestTransactionForSubscription(Subscription subscription) {
|
private Optional<Transaction> getLatestTransactionForSubscription(Subscription subscription) {
|
||||||
return subscription.getTransactions().stream()
|
return subscription.getTransactions().stream()
|
||||||
.max(Comparator.comparing(Transaction::getCreatedAt));
|
.max(Comparator.comparing(Transaction::getCreatedAt));
|
||||||
|
|
Loading…
Reference in New Issue