diff --git a/chpl/chpl-api/src/main/java/gov/healthit/chpl/web/controller/ReportDataController.java b/chpl/chpl-api/src/main/java/gov/healthit/chpl/web/controller/ReportDataController.java index d7c5a6d723..d8e9af86a5 100644 --- a/chpl/chpl-api/src/main/java/gov/healthit/chpl/web/controller/ReportDataController.java +++ b/chpl/chpl-api/src/main/java/gov/healthit/chpl/web/controller/ReportDataController.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RestController; import gov.healthit.chpl.developer.search.DeveloperSearchResult; +import gov.healthit.chpl.domain.compliance.DirectReview; import gov.healthit.chpl.manager.StatisticsManager; import gov.healthit.chpl.report.ReportDataManager; import gov.healthit.chpl.report.criteriamigrationreport.CriteriaMigrationReportDenormalized; @@ -422,6 +423,17 @@ public ReportDataController(ReportDataManager reportDataManager, return reportDataManager.getDirectReviewCounts(); } + @Operation(summary = "Retrieves the data used to generate the ONC Direct Review report.", + description = "Retrieves the data used to generate the ONC Direct Review report.", + security = { + @SecurityRequirement(name = SwaggerSecurityRequirement.API_KEY) + }) + @LogMethodUsage + @RequestMapping(value = "/direct-reviews", method = RequestMethod.GET, produces = "application/json; charset=utf-8") + public @ResponseBody List getDirectReviews() { + return reportDataManager.getDirectReviews(); + } + @Operation(summary = "Get count of Criteria certified to by unique Product.", description = "Retrieves and returns the Criterion/Product counts.", diff --git a/chpl/chpl-service/src/main/java/gov/healthit/chpl/compliance/directreview/DirectReviewCachingService.java b/chpl/chpl-service/src/main/java/gov/healthit/chpl/compliance/directreview/DirectReviewCachingService.java index c0ce9e9d23..1c3afd6fa5 100644 --- a/chpl/chpl-service/src/main/java/gov/healthit/chpl/compliance/directreview/DirectReviewCachingService.java +++ b/chpl/chpl-service/src/main/java/gov/healthit/chpl/compliance/directreview/DirectReviewCachingService.java @@ -30,6 +30,7 @@ import gov.healthit.chpl.domain.compliance.DirectReview; import gov.healthit.chpl.domain.compliance.DirectReviewContainer; import gov.healthit.chpl.domain.compliance.DirectReviewNonConformity; +import gov.healthit.chpl.exception.EntityRetrievalException; import gov.healthit.chpl.exception.JiraRequestFailedException; import gov.healthit.chpl.util.RedisUtil; import gov.healthit.chpl.validation.compliance.DirectReviewValidator; @@ -373,6 +374,16 @@ private List convertDirectReviewsFromJira(JsonNode rootNode, Logge if (dr.getStartDate() != null) { drs.add(dr); } + + Developer dev = null; + try { + dev = developerDao.getById(dr.getDeveloperId()); + } catch (EntityRetrievalException ex) { + LOGGER.warn("Direct review exists with developer that cannot be found: " + dr.getDeveloperId(), ex); + } + if (dev != null) { + dr.setDeveloperName(dev.getName()); + } } catch (JacksonException ex) { logger.error("Cannot map issue JSON to DirectReview class", ex); } diff --git a/chpl/chpl-service/src/main/java/gov/healthit/chpl/domain/compliance/DirectReview.java b/chpl/chpl-service/src/main/java/gov/healthit/chpl/domain/compliance/DirectReview.java index fec1379167..748a739b92 100644 --- a/chpl/chpl-service/src/main/java/gov/healthit/chpl/domain/compliance/DirectReview.java +++ b/chpl/chpl-service/src/main/java/gov/healthit/chpl/domain/compliance/DirectReview.java @@ -12,10 +12,10 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty.Access; -import tools.jackson.databind.annotation.JsonDeserialize; import lombok.Data; import lombok.NoArgsConstructor; +import tools.jackson.databind.annotation.JsonDeserialize; @Data @NoArgsConstructor @@ -28,6 +28,9 @@ public class DirectReview implements Serializable { @JsonDeserialize(using = DeveloperIdDeserializer.class) private Long developerId; + private String developerName; + + @JsonProperty(value = "startDate", access = Access.WRITE_ONLY) @JsonAlias("customfield_11016") @JsonDeserialize(using = TimestampDeserializer.class) diff --git a/chpl/chpl-service/src/main/java/gov/healthit/chpl/report/ReportDataManager.java b/chpl/chpl-service/src/main/java/gov/healthit/chpl/report/ReportDataManager.java index ce0fb4719b..c0fb8efa28 100644 --- a/chpl/chpl-service/src/main/java/gov/healthit/chpl/report/ReportDataManager.java +++ b/chpl/chpl-service/src/main/java/gov/healthit/chpl/report/ReportDataManager.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Component; import gov.healthit.chpl.developer.search.DeveloperSearchResult; +import gov.healthit.chpl.domain.compliance.DirectReview; import gov.healthit.chpl.report.attestation.AttestationReportService; import gov.healthit.chpl.report.criteriaattribute.CriteriaAttributeReportService; import gov.healthit.chpl.report.criteriamigrationreport.CriteriaMigrationReportDenormalized; @@ -277,6 +278,11 @@ public DirectReviewCounts getDirectReviewCounts() { return directReviewReportsService.getDirectReviewCounts(); } + @Synchronized("lock") + public List getDirectReviews() { + return directReviewReportsService.getDirectReviews(); + } + @Synchronized("lock") public CriteriaAttributeReportService getCriteriaAttributeAttributeService() { return criteriaAttributeReportService; diff --git a/chpl/chpl-service/src/main/java/gov/healthit/chpl/report/directreview/DirectReviewReportsService.java b/chpl/chpl-service/src/main/java/gov/healthit/chpl/report/directreview/DirectReviewReportsService.java index b16973c51d..9511e502aa 100644 --- a/chpl/chpl-service/src/main/java/gov/healthit/chpl/report/directreview/DirectReviewReportsService.java +++ b/chpl/chpl-service/src/main/java/gov/healthit/chpl/report/directreview/DirectReviewReportsService.java @@ -1,21 +1,27 @@ package gov.healthit.chpl.report.directreview; +import java.util.List; +import java.util.stream.Collectors; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import gov.healthit.chpl.compliance.directreview.DirectReviewSearchService; import gov.healthit.chpl.dao.statistics.SummaryStatisticsDAO; +import gov.healthit.chpl.domain.compliance.DirectReview; import gov.healthit.chpl.scheduler.job.summarystatistics.data.StatisticsSnapshot; -import gov.healthit.chpl.search.ListingSearchService; import lombok.extern.log4j.Log4j2; @Log4j2 @Component public class DirectReviewReportsService { private SummaryStatisticsDAO summaryStatisticsDAO; + private DirectReviewSearchService drService; @Autowired - public DirectReviewReportsService(SummaryStatisticsDAO summaryStatisticsDAO, ListingSearchService listingSearchService) { + public DirectReviewReportsService(SummaryStatisticsDAO summaryStatisticsDAO, DirectReviewSearchService drService) { this.summaryStatisticsDAO = summaryStatisticsDAO; + this.drService = drService; } public DirectReviewCounts getDirectReviewCounts() { @@ -33,6 +39,12 @@ public DirectReviewCounts getDirectReviewCounts() { .build(); } + public List getDirectReviews() { + return drService.getAll().stream() + .flatMap(drContainer -> drContainer.getDirectReviews().stream()) + .collect(Collectors.toList()); + } + private StatisticsSnapshot getStatistics() { return summaryStatisticsDAO.getCurrentSummaryStatistics(); }