Skip to content

Commit

Permalink
YEL-198 [deploy] apple 재구독 로직, notification 로직 변경 개발서버 배포
Browse files Browse the repository at this point in the history
YEL-198 [deploy] apple 재구독 로직, notification 로직 변경 개발서버 배포
  • Loading branch information
hyeonjeongs authored Feb 2, 2024
2 parents 5ac3e80 + c717e82 commit 95eb114
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,6 @@ void handleAppleTransactionError(ResponseEntity<TransactionInfoResponse> respons

SlackAppleNotificationResponse checkPurchaseDataByAppleSignedPayload(String payload);

void reSubscribeApple(AppleNotificationPayloadVO payloadVO);
void reSubscribeApple(AppleNotificationPayloadVO payloadVO, String notificationType);
void expiredSubscribe(AppleNotificationPayloadVO payloadVO);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
import static com.yello.server.global.common.ErrorCode.APPLE_TOKEN_SERVER_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.GOOGLE_SUBSCRIPTIONS_SUBSCRIPTION_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.NOT_FOUND_TRANSACTION_EXCEPTION;
import static com.yello.server.global.common.util.ConstantUtil.REFUND_FIVE_TICKET;
import static com.yello.server.global.common.util.ConstantUtil.REFUND_ONE_TICKET;
import static com.yello.server.global.common.util.ConstantUtil.REFUND_TWO_TICKET;
import static com.yello.server.global.common.util.ConstantUtil.*;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.yello.server.domain.purchase.dto.apple.AppleNotificationPayloadVO;
Expand Down Expand Up @@ -118,16 +116,21 @@ public void changeSubscriptionStatus(AppleNotificationPayloadVO payloadVO) {
.orElseThrow(() -> new PurchaseNotFoundException(NOT_FOUND_TRANSACTION_EXCEPTION));
User user = purchaseData.purchase().getUser();

if (payloadVO.subtype().equals(ConstantUtil.APPLE_SUBTYPE_AUTO_RENEW_DISABLED)
if(payloadVO.subtype().equals(APPLE_SUBTYPE_AUTO_RENEW_ENABLED)) {
user.setSubscribe(Subscribe.ACTIVE);
purchase.setPurchaseState(PurchaseState.ACTIVE);
return;
}

if (payloadVO.subtype().equals(APPLE_SUBTYPE_AUTO_RENEW_DISABLED)
&& !user.getSubscribe().equals(Subscribe.NORMAL)) {
user.setSubscribe(Subscribe.CANCELED);
purchase.setPurchaseState(PurchaseState.CANCELED);
return;
}

if (payloadVO.subtype().equals(ConstantUtil.APPLE_SUBTYPE_VOLUNTARY)) {
user.setSubscribe(Subscribe.NORMAL);
purchase.setPurchaseState(PurchaseState.PAUSED);
}
user.setSubscribe(Subscribe.CANCELED);
purchase.setPurchaseState(PurchaseState.CANCELED);
}

@Override
Expand All @@ -141,55 +144,66 @@ public void refundAppleInApp(AppleNotificationPayloadVO payloadVO) {
switch (purchaseData.purchase().getProductType()) {
case YELLO_PLUS -> {
user.setSubscribe(Subscribe.NORMAL);
purchase.setPurchaseState(PurchaseState.INACTIVE);
purchase.setPurchaseState(PurchaseState.PAUSED);
}
case ONE_TICKET -> {
validateTicketCount(REFUND_ONE_TICKET, user);
purchase.setPurchaseState(PurchaseState.INACTIVE);
purchase.setPurchaseState(PurchaseState.PAUSED);
}
case TWO_TICKET -> {
validateTicketCount(REFUND_TWO_TICKET, user);
purchase.setPurchaseState(PurchaseState.INACTIVE);
purchase.setPurchaseState(PurchaseState.PAUSED);
}
case FIVE_TICKET -> {
validateTicketCount(REFUND_FIVE_TICKET, user);
purchase.setPurchaseState(PurchaseState.INACTIVE);
purchase.setPurchaseState(PurchaseState.PAUSED);
}
}
}

@Override
public SlackAppleNotificationResponse checkPurchaseDataByAppleSignedPayload(String payload) {
AppleNotificationPayloadVO payloadVO = decodeApplePayload(payload);
Purchase purchase = decodeAppleNotificationData(payloadVO.data().signedTransactionInfo());

return SlackAppleNotificationResponse.of(payloadVO, purchase);
}

@Override
public void reSubscribeApple(AppleNotificationPayloadVO payloadVO) {
public void reSubscribeApple(AppleNotificationPayloadVO payloadVO, String notificationType) {

if (!payloadVO.subtype().equals(ConstantUtil.APPLE_SUBTYPE_RESUBSCRIBE)) {
if (notificationType.equals(APPLE_NOTIFICATION_SUBSCRIBED) && !payloadVO.subtype().equals(APPLE_SUBTYPE_RESUBSCRIBE)) {
return;
}

AppleJwsTransactionResponse appleJwtDecode =
decodeAppleDataPayload(payloadVO.data().signedTransactionInfo());
decodeAppleDataPayload(payloadVO.data().signedTransactionInfo());

Purchase purchase =
purchaseRepository.findByTransactionId(appleJwtDecode.originalTransactionId())
.orElseThrow(() -> new PurchaseConflictException(NOT_FOUND_TRANSACTION_EXCEPTION));
purchaseRepository.findByTransactionId(appleJwtDecode.originalTransactionId())
.orElseThrow(() -> new PurchaseConflictException(NOT_FOUND_TRANSACTION_EXCEPTION));

Purchase reSubscribePurchase =
createSubscribe(purchase.getUser(), Gateway.APPLE, appleJwtDecode.transactionId(), null,
PurchaseState.ACTIVE, appleJwtDecode.toString());
createSubscribe(purchase.getUser(), Gateway.APPLE, appleJwtDecode.transactionId(), null,
PurchaseState.ACTIVE, appleJwtDecode.toString());

purchase.setPurchaseState(PurchaseState.INACTIVE);
reSubscribePurchase.setPurchaseState(PurchaseState.ACTIVE);

purchaseRepository.save(reSubscribePurchase);
}

@Override
public void expiredSubscribe(AppleNotificationPayloadVO payloadVO) {
ApplePurchaseVO purchaseData = getPurchaseData(payloadVO);
Purchase purchase =
purchaseRepository.findByTransactionId(purchaseData.transactionId())
.orElseThrow(() -> new PurchaseNotFoundException(NOT_FOUND_TRANSACTION_EXCEPTION));
User user = purchaseData.purchase().getUser();
user.setSubscribe(Subscribe.NORMAL);
purchase.setPurchaseState(PurchaseState.INACTIVE);
}

@Override
public SlackAppleNotificationResponse checkPurchaseDataByAppleSignedPayload(String payload) {
AppleNotificationPayloadVO payloadVO = decodeApplePayload(payload);
Purchase purchase = decodeAppleNotificationData(payloadVO.data().signedTransactionInfo());

return SlackAppleNotificationResponse.of(payloadVO, purchase);
}

public void validateTicketCount(int ticketCount, User user) {
if (user.getTicketCount() >= ticketCount) {
user.addTicketCount(-Math.abs(ticketCount));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,7 @@
import static com.yello.server.global.common.ErrorCode.NOT_FOUND_TRANSACTION_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.PURCHASE_TOKEN_NOT_FOUND_PURCHASE_EXCEPTION;
import static com.yello.server.global.common.ErrorCode.SUBSCRIBE_ACTIVE_EXCEPTION;
import static com.yello.server.global.common.util.ConstantUtil.APPLE_NOTIFICATION_CONSUMPTION_REQUEST;
import static com.yello.server.global.common.util.ConstantUtil.APPLE_NOTIFICATION_EXPIRED;
import static com.yello.server.global.common.util.ConstantUtil.APPLE_NOTIFICATION_REFUND;
import static com.yello.server.global.common.util.ConstantUtil.APPLE_NOTIFICATION_SUBSCRIBED;
import static com.yello.server.global.common.util.ConstantUtil.APPLE_NOTIFICATION_SUBSCRIPTION_STATUS_CHANGE;
import static com.yello.server.global.common.util.ConstantUtil.APPLE_NOTIFICATION_TEST;
import static com.yello.server.global.common.util.ConstantUtil.FIVE_TICKET_ID;
import static com.yello.server.global.common.util.ConstantUtil.ONE_TICKET_ID;
import static com.yello.server.global.common.util.ConstantUtil.TWO_TICKET_ID;
import static com.yello.server.global.common.util.ConstantUtil.YELLO_PLUS_ID;
import static com.yello.server.global.common.util.ConstantUtil.*;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
Expand Down Expand Up @@ -336,20 +327,24 @@ public void appleNotification(AppleNotificationRequest request) {
});

switch (payloadVO.notificationType()) {
case APPLE_NOTIFICATION_CONSUMPTION_REQUEST:
break;
case APPLE_NOTIFICATION_SUBSCRIPTION_STATUS_CHANGE, APPLE_NOTIFICATION_EXPIRED:
case APPLE_NOTIFICATION_SUBSCRIPTION_STATUS_CHANGE -> {
purchaseManager.changeSubscriptionStatus(payloadVO);
break;
case APPLE_NOTIFICATION_REFUND:
}
case APPLE_NOTIFICATION_EXPIRED ->{
purchaseManager.expiredSubscribe(payloadVO);
}
case APPLE_NOTIFICATION_REFUND -> {
purchaseManager.refundAppleInApp(payloadVO);
break;
case APPLE_NOTIFICATION_SUBSCRIBED:
purchaseManager.reSubscribeApple(payloadVO);
case APPLE_NOTIFICATION_TEST:
}
case APPLE_NOTIFICATION_SUBSCRIBED, APPLE_NOTIFICATION_DID_RENEW -> {
purchaseManager.reSubscribeApple(payloadVO, payloadVO.notificationType());
}
case APPLE_NOTIFICATION_TEST -> {
return;
default:
}
default -> {
throw new PurchaseNotFoundException(NOT_FOUND_NOTIFICATION_TYPE_EXCEPTION);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,11 @@ public class ConstantUtil {
public static final String APPLE_NOTIFICATION_EXPIRED = "EXPIRED";
public static final String APPLE_NOTIFICATION_TEST = "TEST";
public static final String APPLE_NOTIFICATION_SUBSCRIBED = "SUBSCRIBED";
public static final String APPLE_NOTIFICATION_DID_RENEW = "DID_RENEW";
public static final String APPLE_SUBTYPE_AUTO_RENEW_DISABLED = "AUTO_RENEW_DISABLED";
public static final String APPLE_SUBTYPE_VOLUNTARY = "VOLUNTARY";
public static final String APPLE_SUBTYPE_AUTO_RENEW_ENABLED = "AUTO_RENEW_ENABLED";
public static final String APPLE_SUBTYPE_BILLING_RECOVERY = "BILLING_RECOVERY";
public static final String APPLE_SUBTYPE_RESUBSCRIBE = "RESUBSCRIBE";
public static final int REFUND_ONE_TICKET = 1;
public static final int REFUND_TWO_TICKET = 2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,12 @@ public SlackAppleNotificationResponse checkPurchaseDataByAppleSignedPayload(Stri
}

@Override
public void reSubscribeApple(AppleNotificationPayloadVO payloadVO) {
public void reSubscribeApple(AppleNotificationPayloadVO payloadVO, String notificationType) {

}

@Override
public void expiredSubscribe(AppleNotificationPayloadVO payloadVO) {

}
}

0 comments on commit 95eb114

Please sign in to comment.