mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-21 13:58:07 +01:00
Use payment success timestamp to calculate recurring donation badge expiration
This commit is contained in:
@@ -542,7 +542,7 @@ public class BraintreeManager implements SubscriptionProcessorManager {
|
||||
.build());
|
||||
}
|
||||
|
||||
final Instant expiration = transaction.getSubscriptionDetails().getBillingPeriodEndDate().toInstant();
|
||||
final Instant paidAt = transaction.getSubscriptionDetails().getBillingPeriodStartDate().toInstant();
|
||||
final Plan plan = braintreeGateway.plan().find(transaction.getPlanId());
|
||||
|
||||
final BraintreePlanMetadata metadata;
|
||||
@@ -553,7 +553,7 @@ public class BraintreeManager implements SubscriptionProcessorManager {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
return new ReceiptItem(transaction.getId(), expiration, metadata.level());
|
||||
return new ReceiptItem(transaction.getId(), paidAt, metadata.level());
|
||||
})
|
||||
.orElseThrow(() -> new WebApplicationException(Response.Status.NO_CONTENT)));
|
||||
}
|
||||
|
||||
@@ -606,14 +606,22 @@ public class StripeManager implements SubscriptionProcessorManager {
|
||||
}
|
||||
|
||||
InvoiceLineItem subscriptionLineItem = subscriptionLineItems.stream().findAny().get();
|
||||
return getReceiptForSubscriptionInvoiceLineItem(subscriptionLineItem);
|
||||
return getReceiptForSubscription(subscriptionLineItem, latestSubscriptionInvoice);
|
||||
});
|
||||
}
|
||||
|
||||
private CompletableFuture<ReceiptItem> getReceiptForSubscriptionInvoiceLineItem(InvoiceLineItem subscriptionLineItem) {
|
||||
private CompletableFuture<ReceiptItem> getReceiptForSubscription(InvoiceLineItem subscriptionLineItem,
|
||||
Invoice invoice) {
|
||||
final Instant paidAt;
|
||||
if (invoice.getStatusTransitions().getPaidAt() != null) {
|
||||
paidAt = Instant.ofEpochSecond(invoice.getStatusTransitions().getPaidAt());
|
||||
} else {
|
||||
logger.warn("No paidAt timestamp exists for paid invoice {}, falling back to end of subscription period", invoice.getId());
|
||||
paidAt = Instant.ofEpochSecond(subscriptionLineItem.getPeriod().getEnd());
|
||||
}
|
||||
return getProductForPrice(subscriptionLineItem.getPrice().getId()).thenApply(product -> new ReceiptItem(
|
||||
subscriptionLineItem.getId(),
|
||||
Instant.ofEpochSecond(subscriptionLineItem.getPeriod().getEnd()),
|
||||
paidAt,
|
||||
getLevelForProduct(product)));
|
||||
}
|
||||
|
||||
|
||||
@@ -154,7 +154,7 @@ public interface SubscriptionProcessorManager {
|
||||
|
||||
}
|
||||
|
||||
record ReceiptItem(String itemId, Instant expiration, long level) {
|
||||
record ReceiptItem(String itemId, Instant paidAt, long level) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user