Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

package gov.va.vamf.scheduling.varutility.resource;

import gov.va.vamf.scheduling.varutility.domain.ClinicalServices;
import gov.va.vamf.scheduling.varutility.domain.DirectBookingEligibilityCriteria;
import gov.va.vamf.scheduling.varutility.linkbuilder.LinkBuilder;
import gov.va.vamf.scheduling.varutility.service.ClinicalServicesService;
import gov.va.vamf.scheduling.varutility.service.DirectBookingEligibilityCriteriaService;
import gov.va.vamf.scheduling.varutility.utils.VarUtilityConstants;
import gov.va.vamf.security.v1.filters.JwtRbacRestricted;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.Authorization;
import io.swagger.annotations.AuthorizationScope;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.ws.rs.Consumes;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import java.util.Date;
import java.util.List;

@Path("/direct-booking-eligibility-criteria/site/{site-code}")
@Component
@Api(value = "direct-booking-eligibility-criteria/site/{site-code}", description = "Direct Booking Eligibility Service API")
@Scope("request")
public class DirectBookingEligibilityCriteriaResource extends AbstractUserResource {

@Autowired
private DirectBookingEligibilityCriteriaService directBookingEligibilityCriteriaService;

@Autowired
private ClinicalServicesService clinicalServicesService;

/**
* Fetch Patient History options for Facility (Site).
* @param uriInfo
* @param siteCode
* @return DirectBookingEligibilityCriteria
*/
@GET
@JwtRbacRestricted("Staff")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@ApiOperation(value = "Retrieves the patient history options for a provided facility", authorizations = {
@Authorization(
value = VarUtilityConstants.RBAC_JWT_SECURITY_NAME,
scopes = {@AuthorizationScope(scope = "Staff", description = "Staff role")}
)
}, response = DirectBookingEligibilityCriteria.class)
public DirectBookingEligibilityCriteria fetchPatientHistoryOptions(
@Context UriInfo uriInfo,
@ApiParam(value = "site code", required = true) @PathParam("site-code") String siteCode) {

List<ClinicalServices> clinicalServices = clinicalServicesService.fetchForDirectScheduling();
DirectBookingEligibilityCriteria criteria = directBookingEligibilityCriteriaService.fetchPatientHistoryOptions(siteCode, clinicalServices, uriInfo);
return criteria;
}

/**
* Save Patient History options for Facility (Site).
* @param uriInfo
* @param context
* @param siteCode
* @return DirectBookingEligibilityCriteria
*/
@POST
@JwtRbacRestricted("Staff")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@ApiOperation(value = "Saves a new patient history option for a provided facility", authorizations = {
@Authorization(
value = VarUtilityConstants.RBAC_JWT_SECURITY_NAME,
scopes = {@AuthorizationScope(scope = "Staff", description = "Staff role")}
)
}, response = DirectBookingEligibilityCriteria.class)
public DirectBookingEligibilityCriteria savePatientHistoryOptions(@ApiParam(value = "direct booking eligibility criteria to save", required = true) DirectBookingEligibilityCriteria criteria,
@Context UriInfo uriInfo, @Context ContainerRequestContext context,
@ApiParam(value="site code", required=true) @PathParam("site-code") String siteCode) {

List<ClinicalServices> results = clinicalServicesService.fetchForDirectScheduling();
criteria.validate(siteCode, results);
criteria.setCreatedDate(new Date());
criteria.setCreatedBy(getUserName(context));
criteria.cleanupDataForSave();
DirectBookingEligibilityCriteria savedCriteria = directBookingEligibilityCriteriaService.savePatientHistoryOptions(criteria);
LinkBuilder.fillLink(savedCriteria, uriInfo.getRequestUri());
return savedCriteria;
}

/**
* Update Patient History options for Facility (Site).
* @param uriInfo
* @param context
* @param siteCode
* @param id
* @return DirectBookingEligibilityCriteria
*/
@PUT
@JwtRbacRestricted("Staff")
@Path( "/id/{id}" )
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@ApiOperation(value = "Updates the patient history options for a provided facility", authorizations = {
@Authorization(
value = VarUtilityConstants.RBAC_JWT_SECURITY_NAME,
scopes = {@AuthorizationScope(scope = "Staff", description = "Staff role")}
)
}, response = DirectBookingEligibilityCriteria.class)
public DirectBookingEligibilityCriteria updatePatientHistoryOptions(@ApiParam(value = "direct booking eligibility criteria to update", required = true) DirectBookingEligibilityCriteria criteria,
@Context UriInfo uriInfo, @Context ContainerRequestContext context,
@ApiParam(value = "site code", required = true) @PathParam("site-code") String siteCode,
@ApiParam(value = "direct booking eligibility criteria id", required = true) @PathParam("id") String id) {

List<ClinicalServices> results = clinicalServicesService.fetchForDirectScheduling();
criteria.validate(siteCode, results);
criteria.setLastModifiedDate(new Date());
criteria.setModifiedBy(getUserName(context));
criteria.cleanupDataForSave();
DirectBookingEligibilityCriteria updatedCriteria = directBookingEligibilityCriteriaService.updatePatientHistoryOptions(criteria);
LinkBuilder.fillLink(updatedCriteria, uriInfo.getRequestUri());
return updatedCriteria;
}
}