MessagePayloadFactory.java

package uk.gov.dhsc.htbhf.claimant.message;

import uk.gov.dhsc.htbhf.claimant.entity.Claim;
import uk.gov.dhsc.htbhf.claimant.entity.PaymentCycle;
import uk.gov.dhsc.htbhf.claimant.message.payload.PaymentType;
import uk.gov.dhsc.htbhf.claimant.message.payload.ReportClaimMessagePayload;
import uk.gov.dhsc.htbhf.claimant.message.payload.RequestNewCardMessagePayload;
import uk.gov.dhsc.htbhf.claimant.message.payload.RequestPaymentMessagePayload;
import uk.gov.dhsc.htbhf.claimant.model.UpdatableClaimantField;
import uk.gov.dhsc.htbhf.claimant.model.eligibility.EligibilityAndEntitlementDecision;
import uk.gov.dhsc.htbhf.claimant.reporting.ClaimAction;
import uk.gov.dhsc.htbhf.eligibility.model.CombinedIdentityAndEligibilityResponse;

import java.time.LocalDateTime;
import java.util.List;

/**
 * Factory object for building message payloads for emails.
 */
public class MessagePayloadFactory {

    public static RequestNewCardMessagePayload buildNewCardMessagePayload(Claim claim,
                                                                          EligibilityAndEntitlementDecision eligibilityAndEntitlementDecision) {
        return RequestNewCardMessagePayload.builder()
                .claimId(claim.getId())
                .eligibilityAndEntitlementDecision(eligibilityAndEntitlementDecision)
                .build();
    }

    public static RequestPaymentMessagePayload buildRequestPaymentMessagePayload(PaymentCycle paymentCycle, PaymentType paymentType) {
        return RequestPaymentMessagePayload.builder()
                .paymentCycleId(paymentCycle.getId())
                .claimId(paymentCycle.getClaim().getId())
                .paymentType(paymentType)
                .build();
    }

    public static ReportClaimMessagePayload buildReportClaimMessagePayload(Claim claim,
                                                                           CombinedIdentityAndEligibilityResponse identityAndEligibilityResponse,
                                                                           ClaimAction claimAction,
                                                                           List<UpdatableClaimantField> updatedClaimantFields) {
        return ReportClaimMessagePayload.builder()
                .claimId(claim.getId())
                .identityAndEligibilityResponse(identityAndEligibilityResponse)
                .claimAction(claimAction)
                .timestamp(LocalDateTime.now())
                .updatedClaimantFields(updatedClaimantFields)
                .build();
    }
}