HMRCEligibilityController.java

package uk.gov.dhsc.htbhf.hmrc.controller;

import io.swagger.annotations.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import uk.gov.dhsc.htbhf.hmrc.converter.EligibilityRequestToHMRCEligibilityRequest;
import uk.gov.dhsc.htbhf.hmrc.model.EligibilityRequest;
import uk.gov.dhsc.htbhf.hmrc.model.EligibilityResponse;
import uk.gov.dhsc.htbhf.hmrc.model.HMRCEligibilityRequest;
import uk.gov.dhsc.htbhf.hmrc.service.EligibilityService;

import javax.validation.Valid;

@RestController
@RequestMapping("v1/hmrc/eligibility")
@AllArgsConstructor
@Slf4j
@Api(description = "Endpoints for dealing with HMRC Eligibility requests for Healthy Start.")
public class HMRCEligibilityController {

    private final EligibilityService eligibilityService;
    private final EligibilityRequestToHMRCEligibilityRequest converter;

    @PostMapping
    @ApiOperation("Retrieve the eligibility of a person for Healthy Start based on HMRC's opinion of their income "
            + "and the fact that they're getting Child Tax Credits")
    @ApiResponses({@ApiResponse(code = 200, message = "The person's eligibility for Healthy Start from HMRC's point of view",
            response = EligibilityResponse.class)})
    public EligibilityResponse getBenefits(@RequestBody
                                           @Valid
                                           @ApiParam("The eligibility request for HMRC for Healthy Start")
                                           EligibilityRequest eligibilityRequest) {
        log.debug("Received eligibility request");
        HMRCEligibilityRequest request = converter.convert(eligibilityRequest);
        EligibilityResponse eligibilityResponse = eligibilityService.checkEligibility(request);

        log.debug("HMRC eligibility status: {}", eligibilityResponse.getEligibilityStatus());
        return eligibilityResponse;
    }
}