CompleteNewCardMessageProcessor.java
package uk.gov.dhsc.htbhf.claimant.message.processor;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import uk.gov.dhsc.htbhf.claimant.entity.Claim;
import uk.gov.dhsc.htbhf.claimant.entity.Message;
import uk.gov.dhsc.htbhf.claimant.entity.PaymentCycle;
import uk.gov.dhsc.htbhf.claimant.message.MessageQueueClient;
import uk.gov.dhsc.htbhf.claimant.message.MessageStatus;
import uk.gov.dhsc.htbhf.claimant.message.MessageType;
import uk.gov.dhsc.htbhf.claimant.message.MessageTypeProcessor;
import uk.gov.dhsc.htbhf.claimant.message.context.CompleteNewCardMessageContext;
import uk.gov.dhsc.htbhf.claimant.message.context.MessageContextLoader;
import uk.gov.dhsc.htbhf.claimant.message.payload.PaymentType;
import uk.gov.dhsc.htbhf.claimant.message.payload.RequestPaymentMessagePayload;
import uk.gov.dhsc.htbhf.claimant.model.eligibility.EligibilityAndEntitlementDecision;
import uk.gov.dhsc.htbhf.claimant.service.claim.ClaimActivationService;
import javax.transaction.Transactional;
import static uk.gov.dhsc.htbhf.claimant.message.MessagePayloadFactory.buildRequestPaymentMessagePayload;
import static uk.gov.dhsc.htbhf.claimant.message.MessageStatus.COMPLETED;
import static uk.gov.dhsc.htbhf.claimant.message.MessageType.COMPLETE_NEW_CARD_PROCESS;
import static uk.gov.dhsc.htbhf.claimant.message.MessageType.REQUEST_PAYMENT;
/**
* Responsible for processing {@link MessageType#COMPLETE_NEW_CARD_PROCESS} messages by:
* Saving the card account id to the claim,
* Creating a PaymentCycle for the claim,
* Sending a {@link MessageType#REQUEST_PAYMENT} message.
*/
@Component
@AllArgsConstructor
@Slf4j
public class CompleteNewCardMessageProcessor implements MessageTypeProcessor {
private MessageContextLoader messageContextLoader;
private ClaimActivationService claimActivationService;
private MessageQueueClient messageQueueClient;
@Override
public MessageType supportsMessageType() {
return COMPLETE_NEW_CARD_PROCESS;
}
@Override
@Transactional(Transactional.TxType.REQUIRES_NEW)
public MessageStatus processMessage(Message message) {
CompleteNewCardMessageContext context = messageContextLoader.loadCompleteNewCardContext(message);
Claim claim = context.getClaim();
String cardAccountId = context.getCardAccountId();
EligibilityAndEntitlementDecision decision = context.getEligibilityAndEntitlementDecision();
PaymentCycle paymentCycle = claimActivationService.updateClaimAndCreatePaymentCycle(claim, cardAccountId, decision);
sendMakeFirstPaymentMessage(paymentCycle);
return COMPLETED;
}
private void sendMakeFirstPaymentMessage(PaymentCycle paymentCycle) {
RequestPaymentMessagePayload messagePayload = buildRequestPaymentMessagePayload(paymentCycle, PaymentType.FIRST_PAYMENT);
messageQueueClient.sendMessage(messagePayload, REQUEST_PAYMENT);
}
}