TextMessageProcessor.java
package uk.gov.dhsc.htbhf.claimant.message.processor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import uk.gov.dhsc.htbhf.claimant.entity.Claimant;
import uk.gov.dhsc.htbhf.claimant.entity.Message;
import uk.gov.dhsc.htbhf.claimant.exception.EventFailedException;
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.MessageContextLoader;
import uk.gov.dhsc.htbhf.claimant.message.context.TextMessageContext;
import uk.gov.dhsc.htbhf.claimant.service.audit.FailedTextEvent;
import uk.gov.service.notify.NotificationClient;
import uk.gov.service.notify.NotificationClientException;
import uk.gov.service.notify.SendSmsResponse;
import java.util.UUID;
@Slf4j
@Component
public class TextMessageProcessor implements MessageTypeProcessor {
private final NotificationClient client;
private final MessageContextLoader messageContextLoader;
public TextMessageProcessor(NotificationClient client,
MessageContextLoader messageContextLoader) {
this.client = client;
this.messageContextLoader = messageContextLoader;
}
@Override
public MessageStatus processMessage(Message message) {
TextMessageContext textMessageContext = messageContextLoader.loadTextMessageContext(message);
UUID textReference = UUID.randomUUID();
Claimant claimant = textMessageContext.getClaim().getClaimant();
if (StringUtils.isNotEmpty(claimant.getPhoneNumber())) {
try {
SendSmsResponse sendSmsResponse = client.sendSms(
textMessageContext.getTextType().getTemplateId(),
textMessageContext.getClaim().getClaimant().getPhoneNumber(),
textMessageContext.getTextPersonalisation(),
textReference.toString()
);
log.debug("{} text sent, reference={}, id={}",textMessageContext.getTextType(), textReference, sendSmsResponse.getNotificationId());
} catch (NotificationClientException e) {
log.error("Failed to send text message", e);
String failureMessage = String.format("Failed to send %s text message, exception is: %s", textMessageContext.getTextType(), e.getMessage());
throw new EventFailedException(buildFailedTextEvent(textMessageContext), e, failureMessage);
}
}
return MessageStatus.COMPLETED;
}
private FailedTextEvent buildFailedTextEvent(TextMessageContext context) {
return FailedTextEvent.builder()
.claimId(context.getClaim().getId())
.textType(context.getTextType())
.templateId(context.getTextType().getTemplateId())
.build();
}
@Override
public MessageType supportsMessageType() {
return MessageType.SEND_TEXT;
}
}