From 1d02aa0972fa298f035a957b10ca6f0845c7b59e Mon Sep 17 00:00:00 2001 From: arybakov Date: Thu, 27 Jun 2024 16:30:53 -0600 Subject: [PATCH 01/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../report/controller/CommonController.java | 25 ++++++++++++++- .../GradStudentReportsRepository.java | 4 ++- .../grad/report/service/CommonService.java | 32 ++++++++++++++++++- .../util/EducGradReportApiConstants.java | 2 ++ .../controller/CommonControllerTest.java | 4 +-- .../report/service/CommonServiceTest.java | 6 ++-- 6 files changed, 65 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index dd2f48c8..cd77ea12 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -65,7 +65,7 @@ public ResponseEntity getStudentReport(@PathVariable String reportTypeC public ResponseEntity> saveStudentReport(@RequestBody GradStudentReports gradStudentReports,@RequestParam(value = "isGraduated", required = false, defaultValue = "false") boolean isGraduated) { logger.debug("Save student Grad Report for Student ID: {}",gradStudentReports.getStudentID()); validation.requiredField(gradStudentReports.getStudentID(), "Student ID"); - return response.UPDATED(commonService.saveGradReports(gradStudentReports,isGraduated)); + return response.UPDATED(commonService.saveGradStudentReports(gradStudentReports,isGraduated)); } @GetMapping(EducGradReportApiConstants.STUDENT_REPORT) @@ -80,6 +80,29 @@ public ResponseEntity getStudentReportByType( return commonService.getStudentReportByType(UUID.fromString(studentID),reportType,documentStatusCode); } + @DeleteMapping(EducGradReportApiConstants.STUDENT_REPORT_BY_STUDENTID) + @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) + @Operation(summary = "Read Student Reports by Student ID and Report Type", description = "Read Student Reports by Student ID and Report Type", tags = { "Reports" }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + public ResponseEntity deleteStudentReportByType( + @RequestParam(value = "reportType") String reportType, + @PathVariable UUID uuid) { + logger.debug("getStudentReportByType : "); + return response.GET(commonService.deleteStudentReports(uuid, reportType)); + } + + @PostMapping(EducGradReportApiConstants.STUDENT_REPORTS) + @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) + @Operation(summary = "Read Student Reports by Student ID and Report Type", description = "Read Student Reports by Student ID and Report Type", tags = { "Reports" }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + public ResponseEntity processStudentReports( + @RequestParam(value = "reportTypeCode") String reportTypeCode, + @RequestParam(value = "actionType") String actionType, + @RequestBody List studentIDs) { + logger.debug("processStudentReports : "); + return response.GET(commonService.processStudentReports(studentIDs, reportTypeCode, actionType)); + } + @GetMapping(EducGradReportApiConstants.STUDENT_CERTIFICATES) @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_CERTIFICATES) @Operation(summary = "Read Student Certificates by Student ID", description = "Read Student Certificates by Student ID", tags = { "Reports" }) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java index 7a5e1402..034c2bea 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java @@ -18,7 +18,9 @@ public interface GradStudentReportsRepository extends JpaRepository existsByReportTypeCode(String reportType); - long deleteByStudentID(UUID studentID); + long deleteByStudentIDInAndGradReportTypeCode(List studentIDs, String gradReportTypeCode); + + long deleteByStudentIDAndGradReportTypeCode(UUID studentID, String gradReportTypeCode); List findByStudentID(UUID studentID); diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 1064aaca..574694cb 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -10,6 +10,7 @@ import ca.bc.gov.educ.api.grad.report.util.ThreadLocalStateUtil; import jakarta.transaction.Transactional; import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.SerializationUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; @@ -88,7 +89,7 @@ public class CommonService extends BaseService { private static final List SCCP_CERT_TYPES = Arrays.asList("SC", "SCF", "SCI"); @Transactional - public GradStudentReports saveGradReports(GradStudentReports gradStudentReports, boolean isGraduated) { + public GradStudentReports saveGradStudentReports(GradStudentReports gradStudentReports, boolean isGraduated) { GradStudentReportsEntity toBeSaved = gradStudentReportsTransformer.transformToEntity(gradStudentReports); Optional existingEntity = gradStudentReportsRepository.findByStudentIDAndGradReportTypeCodeAndDocumentStatusCodeNot(gradStudentReports.getStudentID(), gradStudentReports.getGradReportTypeCode(), "ARCH"); if (existingEntity.isPresent()) { @@ -319,6 +320,35 @@ public int deleteAllStudentAchievement(UUID studentID) { } + @Transactional + public long processStudentReports(List studentIDs, String reportType, String actionType) { + String reportCode = StringUtils.replace(reportType, "TVRRUN", "ACHV"); + if(StringUtils.containsIgnoreCase(actionType, "DELETE")) { + return deleteStudentReports(studentIDs, reportCode); + } + long reportsCount = 0L; + for(UUID uuid: studentIDs) { + Optional existingEntity = gradStudentReportsRepository.findByStudentIDAndGradReportTypeCode(uuid, reportType); + if(existingEntity.isPresent()) { + GradStudentReportsEntity reportsEntity = existingEntity.get(); + reportsEntity.setReportUpdateDate(new Date()); + gradStudentReportsRepository.save(reportsEntity); + reportsCount ++; + } + } + return reportsCount; + } + + @Transactional + public long deleteStudentReports(List studentIDs, String reportType) { + return gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(studentIDs, ObjectUtils.defaultIfNull(reportType, "ACHV").toUpperCase()); + } + + @Transactional + public long deleteStudentReports(UUID studentID, String reportType) { + return gradStudentReportsRepository.deleteByStudentIDAndGradReportTypeCode(studentID, ObjectUtils.defaultIfNull(reportType, "ACHV").toUpperCase()); + } + public List getAllStudentReportList(UUID studentID) { List reportList = gradStudentReportsTransformer.transformToDTO(gradStudentReportsRepository.findByStudentID(studentID)); reportList.forEach(rep -> { diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java index 468d4237..d5707ea2 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java @@ -42,6 +42,8 @@ private EducGradReportApiConstants(){} public static final String UPDATE_SCHOOL_REPORTS = "/updateschoolreport"; public static final String STUDENT_REPORT = "/studentreport"; + public static final String STUDENT_REPORT_BY_STUDENTID = "/studentreport/{studentID}"; + public static final String STUDENT_REPORTS = "/studentreports"; public static final String SCHOOL_REPORT = "/schoolreport"; public static final String STUDENT_CERTIFICATE = "/studentcertificate"; public static final String STUDENT_CERTIFICATES = "/studentcertificates"; diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java index c98cc1ea..6856471b 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java @@ -107,9 +107,9 @@ public void testSaveStudentReport() { gradStudentReport.setReport("TEST Report Body"); gradStudentReport.setDocumentStatusCode("IP"); - Mockito.when(commonService.saveGradReports(gradStudentReport,isGraduated)).thenReturn(gradStudentReport); + Mockito.when(commonService.saveGradStudentReports(gradStudentReport,isGraduated)).thenReturn(gradStudentReport); commonController.saveStudentReport(gradStudentReport,isGraduated); - Mockito.verify(commonService).saveGradReports(gradStudentReport,isGraduated); + Mockito.verify(commonService).saveGradStudentReports(gradStudentReport,isGraduated); } @Test diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 93f923fc..375bbda3 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -222,7 +222,7 @@ public void testSaveGradReports_thenReturnCreateSuccess() { when(this.gradStudentReportsRepository.findByStudentIDAndGradReportTypeCodeAndDocumentStatusCodeNot(studentID, reportTypeCode,documentStatusCode)).thenReturn(optionalEmpty); when(this.gradStudentReportsRepository.save(any(GradStudentReportsEntity.class))).thenReturn(gradStudentReportEntity); - var result = commonService.saveGradReports(gradStudentReport,isGraduated); + var result = commonService.saveGradStudentReports(gradStudentReport,isGraduated); assertThat(result).isNotNull(); assertThat(result.getStudentID()).isEqualTo(studentID); @@ -258,7 +258,7 @@ public void testSaveGradReportsWithExistingOne_thenReturnUpdateSuccess() { when(this.gradStudentReportsRepository.findByStudentIDAndGradReportTypeCodeAndDocumentStatusCodeNot(studentID, reportTypeCode,"ARCH")).thenReturn(optional); when(this.gradStudentReportsRepository.save(any(GradStudentReportsEntity.class))).thenReturn(gradStudentReportEntity); - var result = commonService.saveGradReports(gradStudentReport,isGraduated); + var result = commonService.saveGradStudentReports(gradStudentReport,isGraduated); assertThat(result).isNotNull(); assertThat(result.getStudentID()).isEqualTo(studentID); @@ -294,7 +294,7 @@ public void testSaveGradReportsWithExistingOne_whenReportClobIsChanged_thenRetur when(this.gradStudentReportsRepository.findByStudentIDAndGradReportTypeCodeAndDocumentStatusCodeNot(studentID, reportTypeCode,"ARCH")).thenReturn(optional); when(this.gradStudentReportsRepository.save(any(GradStudentReportsEntity.class))).thenReturn(gradStudentReportEntity); - var result = commonService.saveGradReports(gradStudentReport,isGraduated); + var result = commonService.saveGradStudentReports(gradStudentReport,isGraduated); assertThat(result).isNotNull(); assertThat(result.getStudentID()).isEqualTo(studentID); From bcc61c7165b0f39bd9c97f0f73ca72ce1f14a566 Mon Sep 17 00:00:00 2001 From: arybakov Date: Tue, 2 Jul 2024 16:28:45 -0600 Subject: [PATCH 02/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../gov/educ/api/grad/report/controller/CommonController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index cd77ea12..6fa340a0 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -86,9 +86,9 @@ public ResponseEntity getStudentReportByType( @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) public ResponseEntity deleteStudentReportByType( @RequestParam(value = "reportType") String reportType, - @PathVariable UUID uuid) { + @PathVariable UUID studentID) { logger.debug("getStudentReportByType : "); - return response.GET(commonService.deleteStudentReports(uuid, reportType)); + return response.GET(commonService.deleteStudentReports(studentID, reportType)); } @PostMapping(EducGradReportApiConstants.STUDENT_REPORTS) From 937ec4805ecf01363ad7e64ec660093064937d76 Mon Sep 17 00:00:00 2001 From: arybakov Date: Tue, 2 Jul 2024 16:45:01 -0600 Subject: [PATCH 03/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../report/controller/CommonControllerTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java index 6856471b..766248d6 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java @@ -52,6 +52,22 @@ public void testGetStudentCertificate() { Mockito.verify(commonService).getStudentCertificate(certificateTypeCode); } + @Test + public void testProcessStudentReports() { + final UUID studentGuid = UUID.randomUUID(); + Mockito.when(commonService.processStudentReports(List.of(studentGuid), "TVRRUN", "TVRDELETE")).thenReturn(1L); + commonController.processStudentReports("TVRRUN", "TVRDELETE", List.of(studentGuid)); + Mockito.verify(commonService).processStudentReports(List.of(studentGuid), "TVRRUN", "TVRDELETE"); + } + + @Test + public void testDeleteStudentReportByType() { + final UUID studentGuid = UUID.randomUUID(); + Mockito.when(commonService.deleteStudentReports(studentGuid, "TVRRUN")).thenReturn(1L); + commonController.deleteStudentReportByType("TVRRUN", studentGuid); + Mockito.verify(commonService).deleteStudentReports(studentGuid, "TVRRUN"); + } + @Test public void testGetStudentCertificateByGuid() { final UUID studentGuid = UUID.randomUUID(); From 5da8620cdb0968e28a1d8821552fdcd7e616b399 Mon Sep 17 00:00:00 2001 From: arybakov Date: Tue, 2 Jul 2024 17:18:15 -0600 Subject: [PATCH 04/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../report/service/CommonServiceTest.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 375bbda3..9c35f640 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -330,6 +330,51 @@ public void testGetStudentReportByType() { } + @Test + public void testDeleteStudentReports() { + // ID + final UUID studentID = UUID.randomUUID(); + final String reportTypeCode = "TEST"; + + when(gradStudentReportsRepository.deleteByStudentIDAndGradReportTypeCode(studentID, reportTypeCode)).thenReturn(1L); + var result = commonService.deleteStudentReports(studentID, reportTypeCode); + assertThat(result).isEqualTo(1); + + when(gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(List.of(studentID), reportTypeCode)).thenReturn(1L); + result = commonService.deleteStudentReports(studentID, reportTypeCode); + assertThat(result).isEqualTo(1); + + } + + @Test + public void testProcessStudentReports() { + // ID + final UUID studentID = UUID.randomUUID(); + final String reportTypeCode = "TVRRUN"; + String actionType = "TVRDELETE"; + + when(gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(List.of(studentID), reportTypeCode)).thenReturn(0L); + var result = commonService.processStudentReports(List.of(studentID), reportTypeCode, actionType); + assertThat(result).isEqualTo(0); + + final UUID reportID = UUID.randomUUID(); + final String pen = "123456789"; + + final GradStudentReportsEntity gradStudentReport = new GradStudentReportsEntity(); + gradStudentReport.setId(reportID); + gradStudentReport.setGradReportTypeCode(reportTypeCode); + gradStudentReport.setPen(pen); + gradStudentReport.setStudentID(studentID); + gradStudentReport.setReport("TEST Report Body"); + actionType = "TVRCREATE"; + + when(gradStudentReportsRepository.findByStudentIDAndGradReportTypeCode(studentID, reportTypeCode)).thenReturn(Optional.of(gradStudentReport)); + when(gradStudentReportsRepository.save(gradStudentReport)).thenReturn(gradStudentReport); + result = commonService.processStudentReports(List.of(studentID), reportTypeCode, actionType); + assertThat(result).isEqualTo(1); + + } + @Test public void testGetStudentCertificateByType() { // UUID From aa504ea6a4b9de633cc1f1060b44949353aebf32 Mon Sep 17 00:00:00 2001 From: arybakov Date: Tue, 2 Jul 2024 17:21:02 -0600 Subject: [PATCH 05/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../bc/gov/educ/api/grad/report/service/CommonServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 9c35f640..75f4d963 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -355,7 +355,7 @@ public void testProcessStudentReports() { when(gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(List.of(studentID), reportTypeCode)).thenReturn(0L); var result = commonService.processStudentReports(List.of(studentID), reportTypeCode, actionType); - assertThat(result).isEqualTo(0); + assertThat(result).isZero(); final UUID reportID = UUID.randomUUID(); final String pen = "123456789"; From afed4acbfbae6f62ef41822bc730b8241178ad8f Mon Sep 17 00:00:00 2001 From: arybakov Date: Wed, 17 Jul 2024 10:55:32 -0600 Subject: [PATCH 06/34] GRAD2-2322 School Reports Archive Process: Backend endpoints and Processing To Complete --- .../report/controller/CommonController.java | 14 +++++++++ .../repository/SchoolReportsRepository.java | 15 ++++++++++ .../grad/report/service/CommonService.java | 18 +++++++++++ .../util/EducGradReportApiConstants.java | 3 ++ .../controller/CommonControllerTest.java | 18 +++++++++++ .../report/service/CommonServiceTest.java | 30 +++++++++++++++++++ 6 files changed, 98 insertions(+) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index 6fa340a0..450c595e 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -397,5 +397,19 @@ public ResponseEntity getStudentCredentialByType(@PathVaria return commonService.getStudentCredentialByType(UUID.fromString(studentID),type); } + @PostMapping (EducGradReportApiConstants.REPORT_COUNT) + @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) + @Operation(summary = "Get Students Count by mincode and status", description = "Get Students Count by mincode and status", tags = { "Business" }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + public ResponseEntity getReportsCount(@RequestParam String reportType, @RequestBody List schoolOfRecords) { + return response.GET(commonService.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType)); + } + @PostMapping (EducGradReportApiConstants.REPORT_ARCHIVE) + @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) + @Operation(summary = "Get Students Count by mincode and status", description = "Get Students Count by mincode and status", tags = { "Business" }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + public ResponseEntity archiveSchoolReports(@RequestParam long batchId, @RequestParam String reportType, @RequestBody List schoolOfRecords) { + return response.GET(commonService.archiveSchoolReports(batchId, schoolOfRecords, reportType)); + } } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java index 886cc975..3061dd24 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java @@ -2,6 +2,7 @@ import ca.bc.gov.educ.api.grad.report.model.entity.SchoolReportsEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @@ -23,4 +24,18 @@ public interface SchoolReportsRepository extends JpaRepository findBySchoolOfRecordAndReportTypeCodeOrderBySchoolOfRecord(String schoolOfRecord, String reportTypeCode); + @Query("select count(*) from SchoolReportsLightEntity c where c.schoolOfRecord IN (:schoolOfRecords) and c.reportTypeCode=:reportType") + Long countBySchoolOfRecordsAndReportType(List schoolOfRecords, String reportType); + + @Query("select count(*) from SchoolReportsLightEntity c where c.reportTypeCode=:reportType") + Long countByReportType(String reportType); + + @Modifying + @Query(value="update SCHOOL_REPORT set REPORT_TYPE_CODE = :reportTypeTo, update_date = SYSDATE, update_user = 'Batch ' || :batchId || ' Archive Process' where school_of_record in (:schoolOfRecords) and REPORT_TYPE_CODE = :reportTypeFrom", nativeQuery=true) + Integer archiveSchoolReports(List schoolOfRecords, String reportTypeFrom, String reportTypeTo, long batchId); + + @Modifying + @Query(value="delete SCHOOL_REPORT where school_of_record in (:schoolOfRecords) and REPORT_TYPE_CODE = :reportType", nativeQuery=true) + Integer deleteSchoolReports(List schoolOfRecords, String reportType); + } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 574694cb..60940bf3 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -845,6 +845,24 @@ private synchronized List getReportGradStudentData(String .block(); } + public Long countBySchoolOfRecordsAndReportType(List schoolOfRecords, String reportType) { + Long reportsCount = 0L; + if(schoolOfRecords != null && !schoolOfRecords.isEmpty()) { + reportsCount += schoolReportsRepository.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType); + } + return reportsCount; + } + + @Transactional + public Integer archiveSchoolReports(long batchId, List schoolOfRecords, String reportType) { + Integer reportsCount = 0; + if(schoolOfRecords != null && !schoolOfRecords.isEmpty()) { + schoolReportsRepository.deleteSchoolReports(schoolOfRecords, reportType + "ARC"); + reportsCount += schoolReportsRepository.archiveSchoolReports(schoolOfRecords, reportType, reportType + "ARC", batchId); + } + return reportsCount; + } + class UUIDPageTask implements Callable { private final PageRequest pageRequest; diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java index d5707ea2..c35b0d1a 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java @@ -23,6 +23,9 @@ private EducGradReportApiConstants(){} public static final String API_VERSION = "v1"; public static final String GRAD_REPORT_API_ROOT_MAPPING = "/api/" + API_VERSION + "/graduationreports"; + public static final String REPORT_COUNT = "/count"; + public static final String REPORT_ARCHIVE = "/archive"; + public static final String GET_ALL_CERTIFICATE_TYPE_MAPPING = "/certificatetype"; public static final String GET_ALL_CERTIFICATE_TYPE_BY_CODE_MAPPING = "/certificatetype/{certTypeCode}"; diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java index 766248d6..bd0a0054 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java @@ -52,6 +52,24 @@ public void testGetStudentCertificate() { Mockito.verify(commonService).getStudentCertificate(certificateTypeCode); } + @Test + public void testGetReportsCount() { + // ID + String mincode = "123456789"; + Mockito.when(commonService.countBySchoolOfRecordsAndReportType(List.of(mincode), "reportType")).thenReturn(1L); + commonController.getReportsCount("reportType", List.of(mincode)); + Mockito.verify(commonService).countBySchoolOfRecordsAndReportType(List.of(mincode), "reportType"); + } + + @Test + public void testArchiveSchoolReports() { + // ID + String mincode = "123456789"; + Mockito.when(commonService.archiveSchoolReports(1L, List.of(mincode), "reportType")).thenReturn(1); + commonController.archiveSchoolReports(1L, "reportType", List.of(mincode)); + Mockito.verify(commonService).archiveSchoolReports(1L, List.of(mincode), "reportType"); + } + @Test public void testProcessStudentReports() { final UUID studentGuid = UUID.randomUUID(); diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 75f4d963..33ac7c99 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1680,6 +1680,36 @@ public void testCheckStudentCertificateExistsForSCCP_with_SCCP_Certificate() { assertThat(result).isTrue(); } + @Test + public void testCountBySchoolOfRecordsAndReportType() { + Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType")).thenReturn(1L); + Long count = commonService.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType"); + assertThat(count).isNotNull().isEqualTo(1L); + } + + @Test + public void testArchiveSchoolReports() { + Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC")).thenReturn(1); + Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType", "reportTypeARC", 1L)).thenReturn(1); + Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType"); + assertThat(count).isNotNull().isEqualTo(1); + } + + @Test + public void testArchiveSchoolReportsEmpty() { + Mockito.when(schoolReportsRepository.archiveSchoolReports(new ArrayList<>(), "reportType", "ARC", 1L)).thenReturn(0); + Integer count = commonService.archiveSchoolReports(1L, new ArrayList<>(), "reportType"); + assertThat(count).isNotNull().isEqualTo(0); + } + + @Test + public void testDeleteSchoolReports() { + Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC")).thenReturn(1); + Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType", "reportTypeARC", 1L)).thenReturn(1); + Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType"); + assertThat(count).isNotNull().isEqualTo(1); + } + @Test @SneakyThrows public void testGetSchoolReportGradStudentData() { From 2d10faf95a61b885f1d02c98086f8fc6e383d591 Mon Sep 17 00:00:00 2001 From: arybakov Date: Wed, 17 Jul 2024 15:38:04 -0600 Subject: [PATCH 07/34] GRAD2-2322 School Reports Archive Process: Backend endpoints and Processing To Complete --- .../gov/educ/api/grad/report/controller/CommonController.java | 2 +- .../bc/gov/educ/api/grad/report/util/PermissionsConstants.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index 450c595e..af021448 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -406,7 +406,7 @@ public ResponseEntity getReportsCount(@RequestParam String reportType, @Re } @PostMapping (EducGradReportApiConstants.REPORT_ARCHIVE) - @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) + @PreAuthorize(PermissionsConstants.ARCHIVE_SCHOOL_REPORT) @Operation(summary = "Get Students Count by mincode and status", description = "Get Students Count by mincode and status", tags = { "Business" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) public ResponseEntity archiveSchoolReports(@RequestParam long batchId, @RequestParam String reportType, @RequestBody List schoolOfRecords) { diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/PermissionsConstants.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/PermissionsConstants.java index 57a6ee55..6fac89f3 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/PermissionsConstants.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/PermissionsConstants.java @@ -22,6 +22,8 @@ private PermissionsConstants() { public static final String UPDATE_CERTIFICATE_TYPE = _PREFIX + "SCOPE_UPDATE_GRAD_CERTIFICATE_CODE_DATA" + _SUFFIX; public static final String CREATE_CERTIFICATE_TYPE = _PREFIX + "SCOPE_CREATE_GRAD_CERTIFICATE_CODE_DATA" + _SUFFIX; public static final String READ_GRAD_REPORT = _PREFIX + "SCOPE_READ_GRAD_REPORT_CODE_DATA" + _SUFFIX; + + public static final String ARCHIVE_SCHOOL_REPORT = _PREFIX + "SCOPE_ARCHIVE_SCHOOL_REPORT" + _SUFFIX; public static final String DELETE_REPORT_TYPE = _PREFIX + "SCOPE_DELETE_GRAD_REPORT_CODE_DATA" + _SUFFIX; public static final String UPDATE_REPORT_TYPE = _PREFIX + "SCOPE_UPDATE_GRAD_REPORT_CODE_DATA" + _SUFFIX; public static final String CREATE_REPORT_TYPE = _PREFIX + "SCOPE_CREATE_GRAD_REPORT_CODE_DATA" + _SUFFIX; From 35a2869aba9970d84d6fdc9cd1295e0c83b9876e Mon Sep 17 00:00:00 2001 From: arybakov Date: Thu, 18 Jul 2024 13:22:03 -0600 Subject: [PATCH 08/34] GRAD2-2322 School Reports Archive Process: Backend endpoints and Processing To Complete --- .../report/controller/CommonController.java | 2 +- .../repository/SchoolReportsRepository.java | 6 +++--- .../grad/report/service/CommonService.java | 20 +++++++++++++------ .../controller/CommonControllerTest.java | 2 +- .../report/service/CommonServiceTest.java | 19 +++++++++++------- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index af021448..7d6bc5e6 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -401,7 +401,7 @@ public ResponseEntity getStudentCredentialByType(@PathVaria @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) @Operation(summary = "Get Students Count by mincode and status", description = "Get Students Count by mincode and status", tags = { "Business" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - public ResponseEntity getReportsCount(@RequestParam String reportType, @RequestBody List schoolOfRecords) { + public ResponseEntity getReportsCount(@RequestParam String reportType, @RequestBody List schoolOfRecords) { return response.GET(commonService.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType)); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java index 3061dd24..36076c21 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java @@ -25,17 +25,17 @@ public interface SchoolReportsRepository extends JpaRepository findBySchoolOfRecordAndReportTypeCodeOrderBySchoolOfRecord(String schoolOfRecord, String reportTypeCode); @Query("select count(*) from SchoolReportsLightEntity c where c.schoolOfRecord IN (:schoolOfRecords) and c.reportTypeCode=:reportType") - Long countBySchoolOfRecordsAndReportType(List schoolOfRecords, String reportType); + Integer countBySchoolOfRecordsAndReportType(List schoolOfRecords, String reportType); @Query("select count(*) from SchoolReportsLightEntity c where c.reportTypeCode=:reportType") - Long countByReportType(String reportType); + Integer countByReportType(String reportType); @Modifying @Query(value="update SCHOOL_REPORT set REPORT_TYPE_CODE = :reportTypeTo, update_date = SYSDATE, update_user = 'Batch ' || :batchId || ' Archive Process' where school_of_record in (:schoolOfRecords) and REPORT_TYPE_CODE = :reportTypeFrom", nativeQuery=true) Integer archiveSchoolReports(List schoolOfRecords, String reportTypeFrom, String reportTypeTo, long batchId); @Modifying - @Query(value="delete SCHOOL_REPORT where school_of_record in (:schoolOfRecords) and REPORT_TYPE_CODE = :reportType", nativeQuery=true) + @Query(value="delete SCHOOL_REPORT where school_of_record in (:schoolOfRecords) and REPORT_TYPE_CODE = :reportType and UPDATE_DATE <= SYSDATE - 1", nativeQuery=true) Integer deleteSchoolReports(List schoolOfRecords, String reportType); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 60940bf3..ad246d1e 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -845,8 +845,8 @@ private synchronized List getReportGradStudentData(String .block(); } - public Long countBySchoolOfRecordsAndReportType(List schoolOfRecords, String reportType) { - Long reportsCount = 0L; + public Integer countBySchoolOfRecordsAndReportType(List schoolOfRecords, String reportType) { + Integer reportsCount = 0; if(schoolOfRecords != null && !schoolOfRecords.isEmpty()) { reportsCount += schoolReportsRepository.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType); } @@ -855,12 +855,20 @@ public Long countBySchoolOfRecordsAndReportType(List schoolOfRecords, St @Transactional public Integer archiveSchoolReports(long batchId, List schoolOfRecords, String reportType) { - Integer reportsCount = 0; + Integer updatedReportsCount = 0; + Integer deletedReportsCount = 0; + Integer originalReportsCount = 0; if(schoolOfRecords != null && !schoolOfRecords.isEmpty()) { - schoolReportsRepository.deleteSchoolReports(schoolOfRecords, reportType + "ARC"); - reportsCount += schoolReportsRepository.archiveSchoolReports(schoolOfRecords, reportType, reportType + "ARC", batchId); + reportType = StringUtils.upperCase(StringUtils.endsWithIgnoreCase(reportType, "ARC") ? StringUtils.removeEndIgnoreCase(reportType, "ARC") : reportType); + String archivedReportType = StringUtils.upperCase(StringUtils.endsWith(reportType, "ARC") ? reportType : reportType + "ARC"); + originalReportsCount += schoolReportsRepository.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType); + updatedReportsCount += schoolReportsRepository.archiveSchoolReports(schoolOfRecords, reportType, archivedReportType, batchId); + if(originalReportsCount.equals(updatedReportsCount)) { + deletedReportsCount += schoolReportsRepository.deleteSchoolReports(schoolOfRecords, archivedReportType); + logger.debug("{} School Reports deleted", deletedReportsCount); + } } - return reportsCount; + return updatedReportsCount; } class UUIDPageTask implements Callable { diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java index bd0a0054..c1bed3db 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java @@ -56,7 +56,7 @@ public void testGetStudentCertificate() { public void testGetReportsCount() { // ID String mincode = "123456789"; - Mockito.when(commonService.countBySchoolOfRecordsAndReportType(List.of(mincode), "reportType")).thenReturn(1L); + Mockito.when(commonService.countBySchoolOfRecordsAndReportType(List.of(mincode), "reportType")).thenReturn(1); commonController.getReportsCount("reportType", List.of(mincode)); Mockito.verify(commonService).countBySchoolOfRecordsAndReportType(List.of(mincode), "reportType"); } diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 33ac7c99..3c09544e 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1682,30 +1682,35 @@ public void testCheckStudentCertificateExistsForSCCP_with_SCCP_Certificate() { @Test public void testCountBySchoolOfRecordsAndReportType() { - Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType")).thenReturn(1L); - Long count = commonService.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType"); + Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType")).thenReturn(1); + Integer count = commonService.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType"); assertThat(count).isNotNull().isEqualTo(1L); } @Test public void testArchiveSchoolReports() { - Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC")).thenReturn(1); - Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType", "reportTypeARC", 1L)).thenReturn(1); + Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType"); assertThat(count).isNotNull().isEqualTo(1); + + Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(0); + Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); + count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType"); + assertThat(count).isNotNull().isEqualTo(0); } @Test public void testArchiveSchoolReportsEmpty() { - Mockito.when(schoolReportsRepository.archiveSchoolReports(new ArrayList<>(), "reportType", "ARC", 1L)).thenReturn(0); + Mockito.when(schoolReportsRepository.archiveSchoolReports(new ArrayList<>(), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); Integer count = commonService.archiveSchoolReports(1L, new ArrayList<>(), "reportType"); assertThat(count).isNotNull().isEqualTo(0); } @Test public void testDeleteSchoolReports() { - Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC")).thenReturn(1); - Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType", "reportTypeARC", 1L)).thenReturn(1); + Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType"); assertThat(count).isNotNull().isEqualTo(1); } From c6bcb98d36cc419cbfdf325f49ea54e9e70b37cc Mon Sep 17 00:00:00 2001 From: arybakov Date: Thu, 18 Jul 2024 13:43:14 -0600 Subject: [PATCH 09/34] GRAD2-2322 School Reports Archive Process: Backend endpoints and Processing To Complete --- .../bc/gov/educ/api/grad/report/service/CommonServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 3c09544e..3fe83c70 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1684,7 +1684,7 @@ public void testCheckStudentCertificateExistsForSCCP_with_SCCP_Certificate() { public void testCountBySchoolOfRecordsAndReportType() { Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType")).thenReturn(1); Integer count = commonService.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType"); - assertThat(count).isNotNull().isEqualTo(1L); + assertThat(count).isNotNull().isEqualTo(1); } @Test From 7b3ef2d1b139536d7d1a08e5d7cb4abbdbe207bc Mon Sep 17 00:00:00 2001 From: Alexander Rybakov <83988488+arybakov-cgi@users.noreply.github.com> Date: Tue, 23 Jul 2024 11:04:51 -0600 Subject: [PATCH 10/34] Added FROM to delete statement --- .../api/grad/report/repository/SchoolReportsRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java index 36076c21..979ad177 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java @@ -35,7 +35,7 @@ public interface SchoolReportsRepository extends JpaRepository schoolOfRecords, String reportTypeFrom, String reportTypeTo, long batchId); @Modifying - @Query(value="delete SCHOOL_REPORT where school_of_record in (:schoolOfRecords) and REPORT_TYPE_CODE = :reportType and UPDATE_DATE <= SYSDATE - 1", nativeQuery=true) + @Query(value="delete from SCHOOL_REPORT where school_of_record in (:schoolOfRecords) and REPORT_TYPE_CODE = :reportType and UPDATE_DATE <= SYSDATE - 1", nativeQuery=true) Integer deleteSchoolReports(List schoolOfRecords, String reportType); } From aa8d51be1bd6dc8e3d43a4c27b74bc0e5f3487a9 Mon Sep 17 00:00:00 2001 From: Chris Ditcher Date: Fri, 9 Aug 2024 09:05:41 -0700 Subject: [PATCH 11/34] Updated to Ubuntu 22.04 (#273) (cherry picked from commit 87482f33c9186bd81e4f3182f22febbb025d457a) Co-authored-by: githubmamatha <106563495+githubmamatha@users.noreply.github.com> Co-authored-by: chris.ditcher From 0d93da4cfe056ff57e2ff329463b3584783e773e Mon Sep 17 00:00:00 2001 From: Alexander Rybakov <83988488+arybakov-cgi@users.noreply.github.com> Date: Mon, 19 Aug 2024 11:13:55 -0600 Subject: [PATCH 12/34] GRAD2-2322 (#274) School Reports Archive Process: All Reports by type --- .../report/repository/SchoolReportsRepository.java | 8 ++++++++ .../api/grad/report/service/CommonService.java | 13 +++++++++++-- .../api/grad/report/service/CommonServiceTest.java | 14 ++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java index 979ad177..92e26de3 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java @@ -34,8 +34,16 @@ public interface SchoolReportsRepository extends JpaRepository schoolOfRecords, String reportTypeFrom, String reportTypeTo, long batchId); + @Modifying + @Query(value="update SCHOOL_REPORT set REPORT_TYPE_CODE = :reportTypeTo, update_date = SYSDATE, update_user = 'Batch ' || :batchId || ' Archive Process' where REPORT_TYPE_CODE = :reportTypeFrom", nativeQuery=true) + Integer archiveSchoolReports(String reportTypeFrom, String reportTypeTo, long batchId); + @Modifying @Query(value="delete from SCHOOL_REPORT where school_of_record in (:schoolOfRecords) and REPORT_TYPE_CODE = :reportType and UPDATE_DATE <= SYSDATE - 1", nativeQuery=true) Integer deleteSchoolReports(List schoolOfRecords, String reportType); + @Modifying + @Query(value="delete from SCHOOL_REPORT where REPORT_TYPE_CODE = :reportType and UPDATE_DATE <= SYSDATE - 1", nativeQuery=true) + Integer deleteSchoolReports(String reportType); + } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index ad246d1e..2803a9c0 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -849,6 +849,8 @@ public Integer countBySchoolOfRecordsAndReportType(List schoolOfRecords, Integer reportsCount = 0; if(schoolOfRecords != null && !schoolOfRecords.isEmpty()) { reportsCount += schoolReportsRepository.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType); + } else { + reportsCount += schoolReportsRepository.countByReportType(reportType); } return reportsCount; } @@ -858,15 +860,22 @@ public Integer archiveSchoolReports(long batchId, List schoolOfRecords, Integer updatedReportsCount = 0; Integer deletedReportsCount = 0; Integer originalReportsCount = 0; + reportType = StringUtils.upperCase(StringUtils.endsWithIgnoreCase(reportType, "ARC") ? StringUtils.removeEndIgnoreCase(reportType, "ARC") : reportType); + String archivedReportType = StringUtils.upperCase(StringUtils.endsWith(reportType, "ARC") ? reportType : reportType + "ARC"); if(schoolOfRecords != null && !schoolOfRecords.isEmpty()) { - reportType = StringUtils.upperCase(StringUtils.endsWithIgnoreCase(reportType, "ARC") ? StringUtils.removeEndIgnoreCase(reportType, "ARC") : reportType); - String archivedReportType = StringUtils.upperCase(StringUtils.endsWith(reportType, "ARC") ? reportType : reportType + "ARC"); originalReportsCount += schoolReportsRepository.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType); updatedReportsCount += schoolReportsRepository.archiveSchoolReports(schoolOfRecords, reportType, archivedReportType, batchId); if(originalReportsCount.equals(updatedReportsCount)) { deletedReportsCount += schoolReportsRepository.deleteSchoolReports(schoolOfRecords, archivedReportType); logger.debug("{} School Reports deleted", deletedReportsCount); } + } else { + originalReportsCount += schoolReportsRepository.countByReportType(reportType); + updatedReportsCount += schoolReportsRepository.archiveSchoolReports(reportType, archivedReportType, batchId); + if(originalReportsCount.equals(updatedReportsCount)) { + deletedReportsCount += schoolReportsRepository.deleteSchoolReports(archivedReportType); + logger.debug("{} School Reports deleted", deletedReportsCount); + } } return updatedReportsCount; } diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 3fe83c70..3e6882ed 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1685,6 +1685,10 @@ public void testCountBySchoolOfRecordsAndReportType() { Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType")).thenReturn(1); Integer count = commonService.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType"); assertThat(count).isNotNull().isEqualTo(1); + + Mockito.when(schoolReportsRepository.countByReportType("reportType")).thenReturn(1); + count = commonService.countBySchoolOfRecordsAndReportType(List.of(), "reportType"); + assertThat(count).isNotNull().isEqualTo(1); } @Test @@ -1698,6 +1702,16 @@ public void testArchiveSchoolReports() { Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType"); assertThat(count).isNotNull().isEqualTo(0); + + Mockito.when(schoolReportsRepository.deleteSchoolReports("reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.archiveSchoolReports("reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); + count = commonService.archiveSchoolReports(1L, List.of(), "reportType"); + assertThat(count).isNotNull().isEqualTo(1); + + Mockito.when(schoolReportsRepository.deleteSchoolReports("reportTypeARC".toUpperCase())).thenReturn(0); + Mockito.when(schoolReportsRepository.archiveSchoolReports("reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); + count = commonService.archiveSchoolReports(1L, List.of(), "reportType"); + assertThat(count).isNotNull().isEqualTo(0); } @Test From 8f4105cd36f3b09c7b0b7a5e74e4ad8fe44cab00 Mon Sep 17 00:00:00 2001 From: arybakov Date: Mon, 19 Aug 2024 15:13:20 -0600 Subject: [PATCH 13/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../report/controller/CommonController.java | 31 ++++++++++++----- .../GradStudentReportsRepository.java | 12 +++++-- .../grad/report/service/CommonService.java | 33 +++++++++++++------ .../util/EducGradReportApiConstants.java | 1 + .../report/util/PermissionsConstants.java | 1 + .../controller/CommonControllerTest.java | 27 +++++++++++---- .../report/service/CommonServiceTest.java | 21 +++++------- 7 files changed, 86 insertions(+), 40 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index 7d6bc5e6..9b4e0865 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -82,9 +82,9 @@ public ResponseEntity getStudentReportByType( @DeleteMapping(EducGradReportApiConstants.STUDENT_REPORT_BY_STUDENTID) @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) - @Operation(summary = "Read Student Reports by Student ID and Report Type", description = "Read Student Reports by Student ID and Report Type", tags = { "Reports" }) + @Operation(summary = "Delete Student Reports by Student ID and Report Type", description = "Delete Student Reports by Student ID and Report Type", tags = { "Reports" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - public ResponseEntity deleteStudentReportByType( + public ResponseEntity deleteStudentReportByType( @RequestParam(value = "reportType") String reportType, @PathVariable UUID studentID) { logger.debug("getStudentReportByType : "); @@ -97,10 +97,9 @@ public ResponseEntity deleteStudentReportByType( @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) public ResponseEntity processStudentReports( @RequestParam(value = "reportTypeCode") String reportTypeCode, - @RequestParam(value = "actionType") String actionType, @RequestBody List studentIDs) { logger.debug("processStudentReports : "); - return response.GET(commonService.processStudentReports(studentIDs, reportTypeCode, actionType)); + return response.GET(commonService.processStudentReports(studentIDs, reportTypeCode)); } @GetMapping(EducGradReportApiConstants.STUDENT_CERTIFICATES) @@ -399,17 +398,31 @@ public ResponseEntity getStudentCredentialByType(@PathVaria @PostMapping (EducGradReportApiConstants.REPORT_COUNT) @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) - @Operation(summary = "Get Students Count by mincode and status", description = "Get Students Count by mincode and status", tags = { "Business" }) + @Operation(summary = "Get Reports Count by mincode and status", description = "Get Students Count by mincode and status", tags = { "Business" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - public ResponseEntity getReportsCount(@RequestParam String reportType, @RequestBody List schoolOfRecords) { - return response.GET(commonService.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType)); + public ResponseEntity getReportsCount(@RequestParam String reportType, @RequestBody List reportContainerIds) { + if(StringUtils.containsAnyIgnoreCase(reportType, "ACHV")) { + return response.GET(commonService.countByStudentGuidsAndReportType(reportContainerIds, reportType)); + } else { + return response.GET(commonService.countBySchoolOfRecordsAndReportType(reportContainerIds, reportType)); + } } @PostMapping (EducGradReportApiConstants.REPORT_ARCHIVE) @PreAuthorize(PermissionsConstants.ARCHIVE_SCHOOL_REPORT) - @Operation(summary = "Get Students Count by mincode and status", description = "Get Students Count by mincode and status", tags = { "Business" }) + @Operation(summary = "Archive Reports", description = "Archive Reports", tags = { "Business" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - public ResponseEntity archiveSchoolReports(@RequestParam long batchId, @RequestParam String reportType, @RequestBody List schoolOfRecords) { + public ResponseEntity archiveReports(@RequestParam long batchId, @RequestParam String reportType, @RequestBody List schoolOfRecords) { + logger.debug("Archive Reports for batch {}", batchId); return response.GET(commonService.archiveSchoolReports(batchId, schoolOfRecords, reportType)); } + + @DeleteMapping (EducGradReportApiConstants.REPORT_DELETE) + @PreAuthorize(PermissionsConstants.DELETE_STUDENT_REPORT) + @Operation(summary = "Delete Reports", description = "Delete Reports", tags = { "Business" }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + public ResponseEntity deleteReports(@RequestParam long batchId, @RequestParam String reportType, @RequestBody List studentGuids) { + logger.debug("Delete Reports for batch {}", batchId); + return response.GET(commonService.deleteStudentReports(studentGuids, reportType)); + } } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java index 034c2bea..77d64f92 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java @@ -18,9 +18,11 @@ public interface GradStudentReportsRepository extends JpaRepository existsByReportTypeCode(String reportType); - long deleteByStudentIDInAndGradReportTypeCode(List studentIDs, String gradReportTypeCode); + Integer deleteByStudentIDInAndGradReportTypeCode(List studentIDs, String gradReportTypeCode); - long deleteByStudentIDAndGradReportTypeCode(UUID studentID, String gradReportTypeCode); + Integer deleteByGradReportTypeCode(String gradReportTypeCode); + + Integer deleteByStudentIDAndGradReportTypeCode(UUID studentID, String gradReportTypeCode); List findByStudentID(UUID studentID); @@ -32,4 +34,10 @@ public interface GradStudentReportsRepository extends JpaRepository findByReportUpdateDate(); + + @Query("select count(*) from GradStudentReportsEntity c where c.studentID IN (:studentGuids) and c.gradReportTypeCode=:reportType") + Integer countByStudentGuidsAndReportType(List studentGuids, String reportType); + + @Query("select count(*) from GradStudentReportsEntity c where c.gradReportTypeCode=:reportType") + Integer countByReportType(String reportType); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 2803a9c0..0c9e51cf 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -10,7 +10,6 @@ import ca.bc.gov.educ.api.grad.report.util.ThreadLocalStateUtil; import jakarta.transaction.Transactional; import org.apache.commons.codec.binary.Base64; -import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.SerializationUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; @@ -321,11 +320,7 @@ public int deleteAllStudentAchievement(UUID studentID) { } @Transactional - public long processStudentReports(List studentIDs, String reportType, String actionType) { - String reportCode = StringUtils.replace(reportType, "TVRRUN", "ACHV"); - if(StringUtils.containsIgnoreCase(actionType, "DELETE")) { - return deleteStudentReports(studentIDs, reportCode); - } + public long processStudentReports(List studentIDs, String reportType) { long reportsCount = 0L; for(UUID uuid: studentIDs) { Optional existingEntity = gradStudentReportsRepository.findByStudentIDAndGradReportTypeCode(uuid, reportType); @@ -340,13 +335,17 @@ public long processStudentReports(List studentIDs, String reportType, Stri } @Transactional - public long deleteStudentReports(List studentIDs, String reportType) { - return gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(studentIDs, ObjectUtils.defaultIfNull(reportType, "ACHV").toUpperCase()); + public Integer deleteStudentReports(List studentIDs, String reportType) { + if(studentIDs != null && !studentIDs.isEmpty()) { + return gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(studentIDs, StringUtils.upperCase(reportType)); + } else { + return gradStudentReportsRepository.deleteByGradReportTypeCode(StringUtils.upperCase(reportType)); + } } @Transactional - public long deleteStudentReports(UUID studentID, String reportType) { - return gradStudentReportsRepository.deleteByStudentIDAndGradReportTypeCode(studentID, ObjectUtils.defaultIfNull(reportType, "ACHV").toUpperCase()); + public Integer deleteStudentReports(UUID studentID, String reportType) { + return gradStudentReportsRepository.deleteByStudentIDAndGradReportTypeCode(studentID, StringUtils.upperCase(reportType)); } public List getAllStudentReportList(UUID studentID) { @@ -855,6 +854,20 @@ public Integer countBySchoolOfRecordsAndReportType(List schoolOfRecords, return reportsCount; } + public Integer countByStudentGuidsAndReportType(List studentGuidsString, String reportType) { + Integer reportsCount = 0; + if(studentGuidsString != null && !studentGuidsString.isEmpty()) { + List studentGuids = new ArrayList<>(); + for(String guid: studentGuidsString) { + studentGuids.add(UUID.fromString(guid)); + } + reportsCount += gradStudentReportsRepository.countByStudentGuidsAndReportType(studentGuids, reportType); + } else { + reportsCount += gradStudentReportsRepository.countByReportType(reportType); + } + return reportsCount; + } + @Transactional public Integer archiveSchoolReports(long batchId, List schoolOfRecords, String reportType) { Integer updatedReportsCount = 0; diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java index c35b0d1a..bcdb7f77 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java @@ -25,6 +25,7 @@ private EducGradReportApiConstants(){} public static final String REPORT_COUNT = "/count"; public static final String REPORT_ARCHIVE = "/archive"; + public static final String REPORT_DELETE = "/delete"; public static final String GET_ALL_CERTIFICATE_TYPE_MAPPING = "/certificatetype"; public static final String GET_ALL_CERTIFICATE_TYPE_BY_CODE_MAPPING = "/certificatetype/{certTypeCode}"; diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/PermissionsConstants.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/PermissionsConstants.java index 6fac89f3..b6ea0152 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/PermissionsConstants.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/PermissionsConstants.java @@ -24,6 +24,7 @@ private PermissionsConstants() { public static final String READ_GRAD_REPORT = _PREFIX + "SCOPE_READ_GRAD_REPORT_CODE_DATA" + _SUFFIX; public static final String ARCHIVE_SCHOOL_REPORT = _PREFIX + "SCOPE_ARCHIVE_SCHOOL_REPORT" + _SUFFIX; + public static final String DELETE_STUDENT_REPORT = _PREFIX + "SCOPE_DELETE_STUDENT_REPORT" + _SUFFIX; public static final String DELETE_REPORT_TYPE = _PREFIX + "SCOPE_DELETE_GRAD_REPORT_CODE_DATA" + _SUFFIX; public static final String UPDATE_REPORT_TYPE = _PREFIX + "SCOPE_UPDATE_GRAD_REPORT_CODE_DATA" + _SUFFIX; public static final String CREATE_REPORT_TYPE = _PREFIX + "SCOPE_CREATE_GRAD_REPORT_CODE_DATA" + _SUFFIX; diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java index c1bed3db..aa92cc5b 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java @@ -66,24 +66,37 @@ public void testArchiveSchoolReports() { // ID String mincode = "123456789"; Mockito.when(commonService.archiveSchoolReports(1L, List.of(mincode), "reportType")).thenReturn(1); - commonController.archiveSchoolReports(1L, "reportType", List.of(mincode)); + commonController.archiveReports(1L, "reportType", List.of(mincode)); Mockito.verify(commonService).archiveSchoolReports(1L, List.of(mincode), "reportType"); } + @Test + public void testDeleteStudentReports() { + // ID + UUID guid = UUID.randomUUID(); + Mockito.when(commonService.deleteStudentReports(List.of(guid), "reportType")).thenReturn(1); + commonController.deleteReports(1L, "reportType", List.of(guid)); + Mockito.verify(commonService).deleteStudentReports(List.of(guid), "reportType"); + + Mockito.when(commonService.deleteStudentReports(List.of(), "reportType")).thenReturn(1); + commonController.deleteReports(1L, "reportType", List.of()); + Mockito.verify(commonService).deleteStudentReports(List.of(), "reportType"); + } + @Test public void testProcessStudentReports() { final UUID studentGuid = UUID.randomUUID(); - Mockito.when(commonService.processStudentReports(List.of(studentGuid), "TVRRUN", "TVRDELETE")).thenReturn(1L); - commonController.processStudentReports("TVRRUN", "TVRDELETE", List.of(studentGuid)); - Mockito.verify(commonService).processStudentReports(List.of(studentGuid), "TVRRUN", "TVRDELETE"); + Mockito.when(commonService.processStudentReports(List.of(studentGuid), "TVRRUN")).thenReturn(1L); + commonController.processStudentReports("TVRRUN", List.of(studentGuid)); + Mockito.verify(commonService).processStudentReports(List.of(studentGuid), "TVRRUN"); } @Test public void testDeleteStudentReportByType() { final UUID studentGuid = UUID.randomUUID(); - Mockito.when(commonService.deleteStudentReports(studentGuid, "TVRRUN")).thenReturn(1L); - commonController.deleteStudentReportByType("TVRRUN", studentGuid); - Mockito.verify(commonService).deleteStudentReports(studentGuid, "TVRRUN"); + Mockito.when(commonService.deleteStudentReports(studentGuid, "REPORT_TYPE")).thenReturn(1); + commonController.deleteStudentReportByType("REPORT_TYPE", studentGuid); + Mockito.verify(commonService).deleteStudentReports(studentGuid, "REPORT_TYPE"); } @Test diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 3e6882ed..31fc97d0 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -334,14 +334,18 @@ public void testGetStudentReportByType() { public void testDeleteStudentReports() { // ID final UUID studentID = UUID.randomUUID(); - final String reportTypeCode = "TEST"; + final String reportTypeCode = "TEST".toUpperCase(); - when(gradStudentReportsRepository.deleteByStudentIDAndGradReportTypeCode(studentID, reportTypeCode)).thenReturn(1L); + when(gradStudentReportsRepository.deleteByStudentIDAndGradReportTypeCode(studentID, reportTypeCode)).thenReturn(1); var result = commonService.deleteStudentReports(studentID, reportTypeCode); assertThat(result).isEqualTo(1); - when(gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(List.of(studentID), reportTypeCode)).thenReturn(1L); - result = commonService.deleteStudentReports(studentID, reportTypeCode); + when(gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(List.of(studentID), reportTypeCode)).thenReturn(1); + result = commonService.deleteStudentReports(List.of(studentID), reportTypeCode); + assertThat(result).isEqualTo(1); + + when(gradStudentReportsRepository.deleteByGradReportTypeCode(reportTypeCode)).thenReturn(1); + result = commonService.deleteStudentReports(List.of(), reportTypeCode); assertThat(result).isEqualTo(1); } @@ -351,12 +355,6 @@ public void testProcessStudentReports() { // ID final UUID studentID = UUID.randomUUID(); final String reportTypeCode = "TVRRUN"; - String actionType = "TVRDELETE"; - - when(gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(List.of(studentID), reportTypeCode)).thenReturn(0L); - var result = commonService.processStudentReports(List.of(studentID), reportTypeCode, actionType); - assertThat(result).isZero(); - final UUID reportID = UUID.randomUUID(); final String pen = "123456789"; @@ -366,11 +364,10 @@ public void testProcessStudentReports() { gradStudentReport.setPen(pen); gradStudentReport.setStudentID(studentID); gradStudentReport.setReport("TEST Report Body"); - actionType = "TVRCREATE"; when(gradStudentReportsRepository.findByStudentIDAndGradReportTypeCode(studentID, reportTypeCode)).thenReturn(Optional.of(gradStudentReport)); when(gradStudentReportsRepository.save(gradStudentReport)).thenReturn(gradStudentReport); - result = commonService.processStudentReports(List.of(studentID), reportTypeCode, actionType); + var result = commonService.processStudentReports(List.of(studentID), reportTypeCode); assertThat(result).isEqualTo(1); } From fd06123035a25c050bad9c537f3b08d10caab59f Mon Sep 17 00:00:00 2001 From: arybakov Date: Mon, 19 Aug 2024 15:17:46 -0600 Subject: [PATCH 14/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../gov/educ/api/grad/report/controller/CommonController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index 9b4e0865..1552d748 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -87,7 +87,7 @@ public ResponseEntity getStudentReportByType( public ResponseEntity deleteStudentReportByType( @RequestParam(value = "reportType") String reportType, @PathVariable UUID studentID) { - logger.debug("getStudentReportByType : "); + logger.debug("deleteStudentReportByType {}", reportType); return response.GET(commonService.deleteStudentReports(studentID, reportType)); } From a25637a3eefbc700820b2d91e268627c46bea8a0 Mon Sep 17 00:00:00 2001 From: arybakov Date: Mon, 19 Aug 2024 15:18:20 -0600 Subject: [PATCH 15/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../gov/educ/api/grad/report/controller/CommonController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index 1552d748..5a124d30 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -81,7 +81,7 @@ public ResponseEntity getStudentReportByType( } @DeleteMapping(EducGradReportApiConstants.STUDENT_REPORT_BY_STUDENTID) - @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) + @PreAuthorize(PermissionsConstants.DELETE_STUDENT_REPORT) @Operation(summary = "Delete Student Reports by Student ID and Report Type", description = "Delete Student Reports by Student ID and Report Type", tags = { "Reports" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) public ResponseEntity deleteStudentReportByType( From 131ae8244268dd00fb82f460d1d31d5b5fccd193 Mon Sep 17 00:00:00 2001 From: arybakov Date: Mon, 19 Aug 2024 15:19:18 -0600 Subject: [PATCH 16/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../api/grad/report/controller/CommonControllerTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java index aa92cc5b..9aaad36a 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java @@ -86,9 +86,9 @@ public void testDeleteStudentReports() { @Test public void testProcessStudentReports() { final UUID studentGuid = UUID.randomUUID(); - Mockito.when(commonService.processStudentReports(List.of(studentGuid), "TVRRUN")).thenReturn(1L); - commonController.processStudentReports("TVRRUN", List.of(studentGuid)); - Mockito.verify(commonService).processStudentReports(List.of(studentGuid), "TVRRUN"); + Mockito.when(commonService.processStudentReports(List.of(studentGuid), "ARCH")).thenReturn(1L); + commonController.processStudentReports("ARCH", List.of(studentGuid)); + Mockito.verify(commonService).processStudentReports(List.of(studentGuid), "ARCH"); } @Test From 3863587543f76e60d42e2bda41d570115d3fd811 Mon Sep 17 00:00:00 2001 From: arybakov Date: Mon, 19 Aug 2024 15:25:33 -0600 Subject: [PATCH 17/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../gov/educ/api/grad/report/controller/CommonController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index 5a124d30..c794f210 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -87,7 +87,7 @@ public ResponseEntity getStudentReportByType( public ResponseEntity deleteStudentReportByType( @RequestParam(value = "reportType") String reportType, @PathVariable UUID studentID) { - logger.debug("deleteStudentReportByType {}", reportType); + logger.debug("deleteStudentReportByType"); return response.GET(commonService.deleteStudentReports(studentID, reportType)); } From 9b8108615ef2a460fe6297b1458fdbcf54597c05 Mon Sep 17 00:00:00 2001 From: arybakov Date: Mon, 19 Aug 2024 15:35:49 -0600 Subject: [PATCH 18/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../report/controller/CommonControllerTest.java | 6 ++++++ .../api/grad/report/service/CommonServiceTest.java | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java index 9aaad36a..521a1b58 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java @@ -56,9 +56,15 @@ public void testGetStudentCertificate() { public void testGetReportsCount() { // ID String mincode = "123456789"; + String guid = UUID.randomUUID().toString(); + Mockito.when(commonService.countBySchoolOfRecordsAndReportType(List.of(mincode), "reportType")).thenReturn(1); commonController.getReportsCount("reportType", List.of(mincode)); Mockito.verify(commonService).countBySchoolOfRecordsAndReportType(List.of(mincode), "reportType"); + + Mockito.when(commonService.countByStudentGuidsAndReportType(List.of(guid), "ACHV")).thenReturn(1); + commonController.getReportsCount("ACHV", List.of(guid)); + Mockito.verify(commonService).countByStudentGuidsAndReportType(List.of(guid), "ACHV"); } @Test diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 31fc97d0..1a055aa4 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1688,6 +1688,19 @@ public void testCountBySchoolOfRecordsAndReportType() { assertThat(count).isNotNull().isEqualTo(1); } + @Test + public void testCountByStudentGuidsAndReportType() { + + UUID uuid = UUID.randomUUID(); + Mockito.when(gradStudentReportsRepository.countByStudentGuidsAndReportType(List.of(uuid), "reportType")).thenReturn(1); + Integer count = commonService.countByStudentGuidsAndReportType(List.of(uuid.toString()), "reportType"); + assertThat(count).isNotNull().isEqualTo(1); + + Mockito.when(gradStudentReportsRepository.countByReportType("reportType")).thenReturn(1); + count = commonService.countByStudentGuidsAndReportType(List.of(), "reportType"); + assertThat(count).isNotNull().isEqualTo(1); + } + @Test public void testArchiveSchoolReports() { Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); From 351c8aa1f8629a8a75029e22b10f79e6e7b6eeb8 Mon Sep 17 00:00:00 2001 From: "chris.ditcher" Date: Tue, 20 Aug 2024 14:34:45 -0700 Subject: [PATCH 19/34] Added application-local to gitignore --- .gitignore | 5 ++++- api/.gitignore | 55 -------------------------------------------------- 2 files changed, 4 insertions(+), 56 deletions(-) delete mode 100644 api/.gitignore diff --git a/.gitignore b/.gitignore index 07c41426..1ca7b04e 100644 --- a/.gitignore +++ b/.gitignore @@ -52,4 +52,7 @@ target/ build/ ### VS Code ### -.vscode/ \ No newline at end of file +.vscode/ + +### Local dev ### +**/application-local.yaml \ No newline at end of file diff --git a/api/.gitignore b/api/.gitignore deleted file mode 100644 index 07c41426..00000000 --- a/api/.gitignore +++ /dev/null @@ -1,55 +0,0 @@ -# Compiled class file -*.class - -# Log file -*.log - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/** -!**/src/test/** - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ - -### VS Code ### -.vscode/ \ No newline at end of file From f62c8606894ba1d9ae5f1d6cbdbde77faa8170c3 Mon Sep 17 00:00:00 2001 From: arybakov Date: Tue, 20 Aug 2024 15:53:57 -0600 Subject: [PATCH 20/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../report/controller/CommonController.java | 10 +++++++++- .../GradStudentReportsRepository.java | 6 ++++++ .../grad/report/service/CommonService.java | 20 +++++++++++++++++-- .../util/EducGradReportApiConstants.java | 1 + 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index c794f210..7586e752 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -408,6 +408,14 @@ public ResponseEntity getReportsCount(@RequestParam String reportType, } } + @PostMapping (EducGradReportApiConstants.STUDENT_REPORTS_BY_GUIDS) + @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) + @Operation(summary = "Get Report Students Guids by mincode and status", description = "Get Report Students Guids by mincode and status", tags = { "Business" }) + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) + public ResponseEntity> getStudentIDsForTVRReport(@RequestParam String reportType, @RequestBody List reportContainerIds) { + return response.GET(commonService.getStudentIDsByStudentGuidsAndReportType(reportContainerIds, reportType)); + } + @PostMapping (EducGradReportApiConstants.REPORT_ARCHIVE) @PreAuthorize(PermissionsConstants.ARCHIVE_SCHOOL_REPORT) @Operation(summary = "Archive Reports", description = "Archive Reports", tags = { "Business" }) @@ -417,7 +425,7 @@ public ResponseEntity archiveReports(@RequestParam long batchId, @Reque return response.GET(commonService.archiveSchoolReports(batchId, schoolOfRecords, reportType)); } - @DeleteMapping (EducGradReportApiConstants.REPORT_DELETE) + @PostMapping (EducGradReportApiConstants.REPORT_DELETE) @PreAuthorize(PermissionsConstants.DELETE_STUDENT_REPORT) @Operation(summary = "Delete Reports", description = "Delete Reports", tags = { "Business" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java index 77d64f92..876a1c63 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java @@ -38,6 +38,12 @@ public interface GradStudentReportsRepository extends JpaRepository studentGuids, String reportType); + @Query("select c.studentID from GradStudentReportsEntity c where c.studentID IN (:studentGuids) and c.gradReportTypeCode=:reportType") + List getStudentIDsByStudentGuidsAndReportType(List studentGuids, String reportType); + @Query("select count(*) from GradStudentReportsEntity c where c.gradReportTypeCode=:reportType") Integer countByReportType(String reportType); + + @Query("select c.studentID from GradStudentReportsEntity c where c.gradReportTypeCode=:reportType") + List getStudentIDsByReportType(String reportType); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 0c9e51cf..62dac1b5 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -336,11 +336,13 @@ public long processStudentReports(List studentIDs, String reportType) { @Transactional public Integer deleteStudentReports(List studentIDs, String reportType) { + Integer result; if(studentIDs != null && !studentIDs.isEmpty()) { - return gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(studentIDs, StringUtils.upperCase(reportType)); + result = gradStudentReportsRepository.deleteByStudentIDInAndGradReportTypeCode(studentIDs, StringUtils.upperCase(reportType)); } else { - return gradStudentReportsRepository.deleteByGradReportTypeCode(StringUtils.upperCase(reportType)); + result = gradStudentReportsRepository.deleteByGradReportTypeCode(StringUtils.upperCase(reportType)); } + return result; } @Transactional @@ -868,6 +870,20 @@ public Integer countByStudentGuidsAndReportType(List studentGuidsString, return reportsCount; } + public List getStudentIDsByStudentGuidsAndReportType(List studentGuidsString, String reportType) { + List result; + if(studentGuidsString != null && !studentGuidsString.isEmpty()) { + List studentGuids = new ArrayList<>(); + for(String guid: studentGuidsString) { + studentGuids.add(UUID.fromString(guid)); + } + result = gradStudentReportsRepository.getStudentIDsByStudentGuidsAndReportType(studentGuids, reportType); + } else { + result = gradStudentReportsRepository.getStudentIDsByReportType(reportType); + } + return result; + } + @Transactional public Integer archiveSchoolReports(long batchId, List schoolOfRecords, String reportType) { Integer updatedReportsCount = 0; diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java index bcdb7f77..fe68b709 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/util/EducGradReportApiConstants.java @@ -48,6 +48,7 @@ private EducGradReportApiConstants(){} public static final String STUDENT_REPORT = "/studentreport"; public static final String STUDENT_REPORT_BY_STUDENTID = "/studentreport/{studentID}"; public static final String STUDENT_REPORTS = "/studentreports"; + public static final String STUDENT_REPORTS_BY_GUIDS = "/studentreportsbystudentid"; public static final String SCHOOL_REPORT = "/schoolreport"; public static final String STUDENT_CERTIFICATE = "/studentcertificate"; public static final String STUDENT_CERTIFICATES = "/studentcertificates"; From c55ea2aeb1c1dfe3c5d004ec9cc6afd5bc711e12 Mon Sep 17 00:00:00 2001 From: arybakov Date: Wed, 21 Aug 2024 13:57:41 -0600 Subject: [PATCH 21/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../report/controller/CommonController.java | 4 +- .../api/grad/report/model/dto/Address.java | 72 +++++++++++++++++++ .../model/dto/StudentSearchRequest.java | 28 ++++++-- .../GradStudentReportsRepository.java | 4 +- .../grad/report/service/CommonService.java | 4 +- 5 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 api/src/main/java/ca/bc/gov/educ/api/grad/report/model/dto/Address.java diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index 7586e752..3c91ca41 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -410,9 +410,9 @@ public ResponseEntity getReportsCount(@RequestParam String reportType, @PostMapping (EducGradReportApiConstants.STUDENT_REPORTS_BY_GUIDS) @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) - @Operation(summary = "Get Report Students Guids by mincode and status", description = "Get Report Students Guids by mincode and status", tags = { "Business" }) + @Operation(summary = "Get Report Students Guids by mincode and type", description = "Get Report Students Guids by mincode and type", tags = { "Business" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - public ResponseEntity> getStudentIDsForTVRReport(@RequestParam String reportType, @RequestBody List reportContainerIds) { + public ResponseEntity> getStudentIDsByIdentityAndReportType(@RequestParam String reportType, @RequestBody List reportContainerIds) { return response.GET(commonService.getStudentIDsByStudentGuidsAndReportType(reportContainerIds, reportType)); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/model/dto/Address.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/model/dto/Address.java new file mode 100644 index 00000000..95050202 --- /dev/null +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/model/dto/Address.java @@ -0,0 +1,72 @@ +package ca.bc.gov.educ.api.grad.report.model.dto; + +import java.io.Serializable; + +public class Address implements Serializable { + + private static final long serialVersionUID = 2L; + + private String streetLine1; + private String streetLine2; + private String streetLine3; + private String city; + private String region; + private String country; + private String code; + + public String getStreetLine1() { + return streetLine1; + } + + public void setStreetLine1(String value) { + this.streetLine1 = value; + } + + public String getStreetLine2() { + return streetLine2; + } + + public void setStreetLine2(String value) { + this.streetLine2 = value; + } + + public String getStreetLine3() { + return streetLine3; + } + + public void setStreetLine3(String streetLine3) { + this.streetLine3 = streetLine3; + } + + public String getCity() { + return city; + } + + public void setCity(String value) { + this.city = value; + } + + public String getRegion() { + return region; + } + + public void setRegion(String value) { + this.region = value; + } + + public String getCountry() { + return country; + } + + public void setCountry(String value) { + this.country = value; + } + + public String getCode() { + return code; + } + + public void setCode(String value) { + this.code = value; + } +} diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/model/dto/StudentSearchRequest.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/model/dto/StudentSearchRequest.java index 2ba36785..2cebfa83 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/model/dto/StudentSearchRequest.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/model/dto/StudentSearchRequest.java @@ -10,6 +10,7 @@ import java.io.Serializable; import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -19,12 +20,17 @@ @AllArgsConstructor @Builder public class StudentSearchRequest implements Serializable { - private List schoolOfRecords; - private List districts; - private List schoolCategoryCodes; - private List pens; - private List programs; - private List studentIDs; + private List schoolOfRecords = new ArrayList<>(); + private List districts = new ArrayList<>(); + private List schoolCategoryCodes = new ArrayList<>(); + private List pens = new ArrayList<>(); + private List programs = new ArrayList<>(); + private List studentIDs = new ArrayList<>(); + private List statuses = new ArrayList<>(); + private List reportTypes = new ArrayList(); + + private String user; + private Address address; @JsonFormat(pattern= EducGradReportApiConstants.DEFAULT_DATE_FORMAT) LocalDate gradDateFrom; @@ -33,5 +39,15 @@ public class StudentSearchRequest implements Serializable { Boolean validateInput; String activityCode; + String localDownload; + + public boolean isEmpty() { + return schoolOfRecords.isEmpty() && + districts.isEmpty() && + schoolCategoryCodes.isEmpty() && + pens.isEmpty() && + studentIDs.isEmpty() && + programs.isEmpty(); + } } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java index 876a1c63..3966fbe2 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java @@ -39,11 +39,11 @@ public interface GradStudentReportsRepository extends JpaRepository studentGuids, String reportType); @Query("select c.studentID from GradStudentReportsEntity c where c.studentID IN (:studentGuids) and c.gradReportTypeCode=:reportType") - List getStudentIDsByStudentGuidsAndReportType(List studentGuids, String reportType); + List getReportStudentIDsByStudentIDsAndReportType(List studentGuids, String reportType); @Query("select count(*) from GradStudentReportsEntity c where c.gradReportTypeCode=:reportType") Integer countByReportType(String reportType); @Query("select c.studentID from GradStudentReportsEntity c where c.gradReportTypeCode=:reportType") - List getStudentIDsByReportType(String reportType); + List getReportStudentIDsByReportType(String reportType); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 62dac1b5..0e93008f 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -877,9 +877,9 @@ public List getStudentIDsByStudentGuidsAndReportType(List studentG for(String guid: studentGuidsString) { studentGuids.add(UUID.fromString(guid)); } - result = gradStudentReportsRepository.getStudentIDsByStudentGuidsAndReportType(studentGuids, reportType); + result = gradStudentReportsRepository.getReportStudentIDsByStudentIDsAndReportType(studentGuids, reportType); } else { - result = gradStudentReportsRepository.getStudentIDsByReportType(reportType); + result = gradStudentReportsRepository.getReportStudentIDsByReportType(reportType); } return result; } From 384710a79651283dbbccbe62b55eb7d273804b17 Mon Sep 17 00:00:00 2001 From: arybakov Date: Wed, 21 Aug 2024 14:24:04 -0600 Subject: [PATCH 22/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../controller/CommonControllerTest.java | 22 +++++++++++++++++++ .../report/service/CommonServiceTest.java | 16 ++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java index 521a1b58..93e527d1 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java @@ -537,6 +537,28 @@ public void testGetAllStudentCredentialDistributionList() { Mockito.verify(commonService).getStudentCredentialsForUserRequestDisRun(credentialType,req,false,"accessToken"); } + @Test + public void testUpdateStudentCredentialPosting() { + // UUID + final UUID studentID = UUID.randomUUID(); + final String credentialType = "E"; + + Mockito.when(commonService.updateStudentCredentialPosting(studentID, credentialType)).thenReturn(true); + commonController.updateStudentCredentialPosting(studentID.toString(), credentialType); + Mockito.verify(commonService).updateStudentCredentialPosting(studentID, credentialType); + } + + @Test + public void testGetStudentIDsByIdentityAndReportType() { + // UUID + final UUID studentID = UUID.randomUUID(); + final String reportType = "ACHV"; + + Mockito.when(commonService.getStudentIDsByStudentGuidsAndReportType(List.of(studentID.toString()), reportType)).thenReturn(List.of(studentID)); + commonController.getStudentIDsByIdentityAndReportType(reportType, List.of(studentID.toString())); + Mockito.verify(commonService).getStudentIDsByStudentGuidsAndReportType(List.of(studentID.toString()), reportType); + } + @Test public void testGetAllStudentCredentialDistributionListWithNullDistributionDate() { // UUID diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 1a055aa4..bea0256f 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1701,6 +1701,22 @@ public void testCountByStudentGuidsAndReportType() { assertThat(count).isNotNull().isEqualTo(1); } + @Test + public void testGetStudentIDsByStudentGuidsAndReportType() { + + UUID uuid = UUID.randomUUID(); + Mockito.when(gradStudentReportsRepository.getReportStudentIDsByStudentIDsAndReportType(List.of(uuid), "reportType")).thenReturn(List.of(uuid)); + List result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(uuid.toString()), "reportType"); + assertThat(result).isNotNull(); + assertThat(result).isNotEmpty(); + + Mockito.when(gradStudentReportsRepository.getReportStudentIDsByReportType("reportType")).thenReturn(List.of(uuid)); + result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(), "reportType"); + assertThat(result).isNotNull(); + assertThat(result).isNotEmpty(); + } + + @Test public void testArchiveSchoolReports() { Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); From 7f59df3f19a5e5aaa91d4c91324f494fa4590da8 Mon Sep 17 00:00:00 2001 From: arybakov Date: Wed, 21 Aug 2024 14:50:09 -0600 Subject: [PATCH 23/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../gov/educ/api/grad/report/service/CommonServiceTest.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index bea0256f..0fdc3499 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1707,13 +1707,11 @@ public void testGetStudentIDsByStudentGuidsAndReportType() { UUID uuid = UUID.randomUUID(); Mockito.when(gradStudentReportsRepository.getReportStudentIDsByStudentIDsAndReportType(List.of(uuid), "reportType")).thenReturn(List.of(uuid)); List result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(uuid.toString()), "reportType"); - assertThat(result).isNotNull(); - assertThat(result).isNotEmpty(); + assertThat(result).isNotNull().isNotEmpty(); Mockito.when(gradStudentReportsRepository.getReportStudentIDsByReportType("reportType")).thenReturn(List.of(uuid)); result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(), "reportType"); - assertThat(result).isNotNull(); - assertThat(result).isNotEmpty(); + assertThat(result).isNotNull().isNotEmpty(); } From f6674e7d37aa1520eab2ad2a20c5eab42c9e7007 Mon Sep 17 00:00:00 2001 From: Chris Ditcher Date: Fri, 23 Aug 2024 13:49:19 -0700 Subject: [PATCH 24/34] Update update-configmap.sh (cherry picked from commit 69664a76002e41b5ec47cbb5d379fc619ab061c6) --- tools/config/update-configmap.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/config/update-configmap.sh b/tools/config/update-configmap.sh index bde28e8b..8f9b93fa 100644 --- a/tools/config/update-configmap.sh +++ b/tools/config/update-configmap.sh @@ -23,6 +23,7 @@ FLB_CONFIG="[SERVICE] Exclude_Path *.gz,*.zip Parser docker Mem_Buf_Limit 20MB + Buffer_Max_Size 1MB [FILTER] Name record_modifier Match * From 84f1d16c6dbd87ad7466c758d4c8c4ea0baf9819 Mon Sep 17 00:00:00 2001 From: githubmamatha Date: Mon, 26 Aug 2024 12:12:13 -0700 Subject: [PATCH 25/34] WARN level log events i.e., Failed to validate connection oracle.jdbc.driver.T4CConnection@5f091a0d... --- api/src/main/resources/application.yaml | 3 +++ api/src/test/resources/application.yaml | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/api/src/main/resources/application.yaml b/api/src/main/resources/application.yaml index 2ee0fb4d..884494a6 100644 --- a/api/src/main/resources/application.yaml +++ b/api/src/main/resources/application.yaml @@ -61,6 +61,9 @@ logging: boot: autoconfigure: logging: ${SPRING_BOOT_AUTOCONFIG_LOG_LEVEL} + com: + zaxxer: + hikari: ERROR #Local properties server: diff --git a/api/src/test/resources/application.yaml b/api/src/test/resources/application.yaml index a1e44920..b4af2fa7 100644 --- a/api/src/test/resources/application.yaml +++ b/api/src/test/resources/application.yaml @@ -55,7 +55,9 @@ logging: boot: autoconfigure: logging: INFO - + com: + zaxxer: + hikari: ERROR #API Documentation springdoc: api-docs: From 06aa0dc2284533281e573dd4c57d4f7b4ea7eea9 Mon Sep 17 00:00:00 2001 From: arybakov Date: Tue, 27 Aug 2024 16:11:47 -0600 Subject: [PATCH 26/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../grad/report/controller/CommonController.java | 4 ++-- .../repository/GradStudentReportsRepository.java | 15 ++++++++++++--- .../api/grad/report/service/CommonService.java | 11 +++++++---- .../report/controller/CommonControllerTest.java | 6 +++--- .../grad/report/service/CommonServiceTest.java | 13 +++++++------ 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java index 3c91ca41..6e2e4ac2 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/controller/CommonController.java @@ -412,8 +412,8 @@ public ResponseEntity getReportsCount(@RequestParam String reportType, @PreAuthorize(PermissionsConstants.READ_GRADUATION_STUDENT_REPORTS) @Operation(summary = "Get Report Students Guids by mincode and type", description = "Get Report Students Guids by mincode and type", tags = { "Business" }) @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - public ResponseEntity> getStudentIDsByIdentityAndReportType(@RequestParam String reportType, @RequestBody List reportContainerIds) { - return response.GET(commonService.getStudentIDsByStudentGuidsAndReportType(reportContainerIds, reportType)); + public ResponseEntity> getStudentIDsByIdentityAndReportType(@RequestParam String reportType, @RequestParam Integer rowCount, @RequestBody List reportContainerIds) { + return response.GET(commonService.getStudentIDsByStudentGuidsAndReportType(reportContainerIds, reportType, rowCount)); } @PostMapping (EducGradReportApiConstants.REPORT_ARCHIVE) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java index 3966fbe2..08ebad8f 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/GradStudentReportsRepository.java @@ -2,7 +2,10 @@ import ca.bc.gov.educ.api.grad.report.model.dto.SchoolStudentCredentialDistribution; import ca.bc.gov.educ.api.grad.report.model.entity.GradStudentReportsEntity; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @@ -17,11 +20,17 @@ public interface GradStudentReportsRepository extends JpaRepository existsByReportTypeCode(String reportType); - + + @Modifying + @Query(value="DELETE from STUDENT_REPORT where GRADUATION_STUDENT_RECORD_ID in (:studentIDs) and REPORT_TYPE_CODE = :gradReportTypeCode", nativeQuery = true) Integer deleteByStudentIDInAndGradReportTypeCode(List studentIDs, String gradReportTypeCode); + @Modifying + @Query(value="DELETE from STUDENT_REPORT where REPORT_TYPE_CODE = :gradReportTypeCode", nativeQuery = true) Integer deleteByGradReportTypeCode(String gradReportTypeCode); + @Modifying + @Query(value="DELETE from STUDENT_REPORT where GRADUATION_STUDENT_RECORD_ID = :studentID and REPORT_TYPE_CODE = :gradReportTypeCode", nativeQuery = true) Integer deleteByStudentIDAndGradReportTypeCode(UUID studentID, String gradReportTypeCode); List findByStudentID(UUID studentID); @@ -39,11 +48,11 @@ public interface GradStudentReportsRepository extends JpaRepository studentGuids, String reportType); @Query("select c.studentID from GradStudentReportsEntity c where c.studentID IN (:studentGuids) and c.gradReportTypeCode=:reportType") - List getReportStudentIDsByStudentIDsAndReportType(List studentGuids, String reportType); + Page getReportStudentIDsByStudentIDsAndReportType(List studentGuids, String reportType, Pageable page); @Query("select count(*) from GradStudentReportsEntity c where c.gradReportTypeCode=:reportType") Integer countByReportType(String reportType); @Query("select c.studentID from GradStudentReportsEntity c where c.gradReportTypeCode=:reportType") - List getReportStudentIDsByReportType(String reportType); + Page findStudentIDByGradReportTypeCode(String reportType, Pageable page); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 0e93008f..07230d69 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -20,6 +20,7 @@ import org.springframework.core.io.InputStreamResource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -870,16 +871,18 @@ public Integer countByStudentGuidsAndReportType(List studentGuidsString, return reportsCount; } - public List getStudentIDsByStudentGuidsAndReportType(List studentGuidsString, String reportType) { - List result; + public List getStudentIDsByStudentGuidsAndReportType(List studentGuidsString, String reportType, Integer rowCount) { + List result = new ArrayList<>(); + rowCount = (rowCount) == 0 ? Integer.MAX_VALUE : rowCount; + Pageable paging = PageRequest.of(0, rowCount); if(studentGuidsString != null && !studentGuidsString.isEmpty()) { List studentGuids = new ArrayList<>(); for(String guid: studentGuidsString) { studentGuids.add(UUID.fromString(guid)); } - result = gradStudentReportsRepository.getReportStudentIDsByStudentIDsAndReportType(studentGuids, reportType); + result.addAll(gradStudentReportsRepository.getReportStudentIDsByStudentIDsAndReportType(studentGuids, reportType, paging).getContent()); } else { - result = gradStudentReportsRepository.getReportStudentIDsByReportType(reportType); + result.addAll(gradStudentReportsRepository.findStudentIDByGradReportTypeCode(reportType, paging).getContent()); } return result; } diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java index 93e527d1..5c241d8f 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/controller/CommonControllerTest.java @@ -554,9 +554,9 @@ public void testGetStudentIDsByIdentityAndReportType() { final UUID studentID = UUID.randomUUID(); final String reportType = "ACHV"; - Mockito.when(commonService.getStudentIDsByStudentGuidsAndReportType(List.of(studentID.toString()), reportType)).thenReturn(List.of(studentID)); - commonController.getStudentIDsByIdentityAndReportType(reportType, List.of(studentID.toString())); - Mockito.verify(commonService).getStudentIDsByStudentGuidsAndReportType(List.of(studentID.toString()), reportType); + Mockito.when(commonService.getStudentIDsByStudentGuidsAndReportType(List.of(studentID.toString()), reportType, 1)).thenReturn(List.of(studentID)); + commonController.getStudentIDsByIdentityAndReportType(reportType, 1, List.of(studentID.toString())); + Mockito.verify(commonService).getStudentIDsByStudentGuidsAndReportType(List.of(studentID.toString()), reportType, 1); } @Test diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 0fdc3499..d8b79adb 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1705,13 +1705,14 @@ public void testCountByStudentGuidsAndReportType() { public void testGetStudentIDsByStudentGuidsAndReportType() { UUID uuid = UUID.randomUUID(); - Mockito.when(gradStudentReportsRepository.getReportStudentIDsByStudentIDsAndReportType(List.of(uuid), "reportType")).thenReturn(List.of(uuid)); - List result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(uuid.toString()), "reportType"); - assertThat(result).isNotNull().isNotEmpty(); + Pageable paging = PageRequest.of(0, 1); + Mockito.when(gradStudentReportsRepository.getReportStudentIDsByStudentIDsAndReportType(List.of(uuid), "reportType", paging)).thenReturn(Page.empty()); + List result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(uuid.toString()), "reportType", 100); + assertThat(result).isNotNull().isEmpty(); - Mockito.when(gradStudentReportsRepository.getReportStudentIDsByReportType("reportType")).thenReturn(List.of(uuid)); - result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(), "reportType"); - assertThat(result).isNotNull().isNotEmpty(); + Mockito.when(gradStudentReportsRepository.findStudentIDByGradReportTypeCode("reportType", paging)).thenReturn(Page.empty()); + result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(), "reportType", 100); + assertThat(result).isNotNull().isEmpty(); } From d96374f5a0cc74d1198bb14f2aa5ba901c6b7b91 Mon Sep 17 00:00:00 2001 From: arybakov Date: Wed, 28 Aug 2024 10:31:38 -0600 Subject: [PATCH 27/34] GRAD2-2817 TVR Delete Process - Backend Changes Endpoints --- .../report/service/CommonServiceTest.java | 88 ++++++++++++++++++- 1 file changed, 84 insertions(+), 4 deletions(-) diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index d8b79adb..1d0e6cb6 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1706,12 +1706,92 @@ public void testGetStudentIDsByStudentGuidsAndReportType() { UUID uuid = UUID.randomUUID(); Pageable paging = PageRequest.of(0, 1); - Mockito.when(gradStudentReportsRepository.getReportStudentIDsByStudentIDsAndReportType(List.of(uuid), "reportType", paging)).thenReturn(Page.empty()); - List result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(uuid.toString()), "reportType", 100); - assertThat(result).isNotNull().isEmpty(); + Mockito.when(gradStudentReportsRepository.getReportStudentIDsByStudentIDsAndReportType(List.of(uuid), "reportType", paging)).thenReturn(new Page() { + @Override + public Iterator iterator() { + return getContent().listIterator(); + } + + @Override + public int getNumber() { + return 1; + } + + @Override + public int getSize() { + return 1; + } + + @Override + public int getNumberOfElements() { + return 1; + } + + @Override + public List getContent() { + return List.of(uuid); + } + + @Override + public boolean hasContent() { + return !getContent().isEmpty(); + } + + @Override + public Sort getSort() { + return null; + } + + @Override + public boolean isFirst() { + return false; + } + + @Override + public boolean isLast() { + return false; + } + + @Override + public boolean hasNext() { + return false; + } + + @Override + public boolean hasPrevious() { + return false; + } + + @Override + public Pageable nextPageable() { + return null; + } + + @Override + public Pageable previousPageable() { + return null; + } + + @Override + public int getTotalPages() { + return getContent().size(); + } + + @Override + public long getTotalElements() { + return getContent().size(); + } + + @Override + public Page map(Function converter) { + return null; + } + }); + List result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(uuid.toString()), "reportType", 1); + assertThat(result).isNotNull().isNotEmpty(); Mockito.when(gradStudentReportsRepository.findStudentIDByGradReportTypeCode("reportType", paging)).thenReturn(Page.empty()); - result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(), "reportType", 100); + result = commonService.getStudentIDsByStudentGuidsAndReportType(List.of(), "reportType", 1); assertThat(result).isNotNull().isEmpty(); } From 87bdd7c97a33561dc4b1c3a53293703be1bdcda5 Mon Sep 17 00:00:00 2001 From: arybakov Date: Fri, 6 Sep 2024 16:06:59 -0600 Subject: [PATCH 28/34] GRAD2-2817 Fix for duplicated archive school reports --- .../bc/gov/educ/api/grad/report/service/CommonService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 07230d69..b0e7978c 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -892,19 +892,18 @@ public Integer archiveSchoolReports(long batchId, List schoolOfRecords, Integer updatedReportsCount = 0; Integer deletedReportsCount = 0; Integer originalReportsCount = 0; - reportType = StringUtils.upperCase(StringUtils.endsWithIgnoreCase(reportType, "ARC") ? StringUtils.removeEndIgnoreCase(reportType, "ARC") : reportType); String archivedReportType = StringUtils.upperCase(StringUtils.endsWith(reportType, "ARC") ? reportType : reportType + "ARC"); if(schoolOfRecords != null && !schoolOfRecords.isEmpty()) { originalReportsCount += schoolReportsRepository.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType); updatedReportsCount += schoolReportsRepository.archiveSchoolReports(schoolOfRecords, reportType, archivedReportType, batchId); - if(originalReportsCount.equals(updatedReportsCount)) { + if(updatedReportsCount > 0 && originalReportsCount.equals(updatedReportsCount)) { deletedReportsCount += schoolReportsRepository.deleteSchoolReports(schoolOfRecords, archivedReportType); logger.debug("{} School Reports deleted", deletedReportsCount); } } else { originalReportsCount += schoolReportsRepository.countByReportType(reportType); updatedReportsCount += schoolReportsRepository.archiveSchoolReports(reportType, archivedReportType, batchId); - if(originalReportsCount.equals(updatedReportsCount)) { + if(updatedReportsCount > 0 && originalReportsCount.equals(updatedReportsCount)) { deletedReportsCount += schoolReportsRepository.deleteSchoolReports(archivedReportType); logger.debug("{} School Reports deleted", deletedReportsCount); } From a7779869a62f2874657bfcd89d55dd2197844951 Mon Sep 17 00:00:00 2001 From: arybakov Date: Fri, 6 Sep 2024 16:22:00 -0600 Subject: [PATCH 29/34] GRAD2-2817 Fix for duplicated archive school reports --- .../api/grad/report/service/CommonService.java | 2 +- .../grad/report/service/CommonServiceTest.java | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index b0e7978c..48858f67 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -892,7 +892,7 @@ public Integer archiveSchoolReports(long batchId, List schoolOfRecords, Integer updatedReportsCount = 0; Integer deletedReportsCount = 0; Integer originalReportsCount = 0; - String archivedReportType = StringUtils.upperCase(StringUtils.endsWith(reportType, "ARC") ? reportType : reportType + "ARC"); + String archivedReportType = StringUtils.appendIfMissing(reportType, "ARC", "ARC"); if(schoolOfRecords != null && !schoolOfRecords.isEmpty()) { originalReportsCount += schoolReportsRepository.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType); updatedReportsCount += schoolReportsRepository.archiveSchoolReports(schoolOfRecords, reportType, archivedReportType, batchId); diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 1d0e6cb6..f2d785bc 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1798,39 +1798,45 @@ public Page map(Function converter) { @Test public void testArchiveSchoolReports() { + Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); - Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType"); + Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(1); + Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); - count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType"); + count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(0); + Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.deleteSchoolReports("reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports("reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); - count = commonService.archiveSchoolReports(1L, List.of(), "reportType"); + count = commonService.archiveSchoolReports(1L, List.of(), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(1); + Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.deleteSchoolReports("reportTypeARC".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.archiveSchoolReports("reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); - count = commonService.archiveSchoolReports(1L, List.of(), "reportType"); + count = commonService.archiveSchoolReports(1L, List.of(), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(0); } @Test public void testArchiveSchoolReportsEmpty() { + Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.archiveSchoolReports(new ArrayList<>(), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); - Integer count = commonService.archiveSchoolReports(1L, new ArrayList<>(), "reportType"); + Integer count = commonService.archiveSchoolReports(1L, new ArrayList<>(), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(0); } @Test public void testDeleteSchoolReports() { + Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); - Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType"); + Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(1); } From a44f90dfbc98ff4d57e204b82d176e26cd0f8968 Mon Sep 17 00:00:00 2001 From: arybakov Date: Fri, 6 Sep 2024 17:26:14 -0600 Subject: [PATCH 30/34] GRAD2-2817 Fix for duplicated archive school reports --- .../report/repository/SchoolReportsRepository.java | 14 ++++++++------ .../api/grad/report/service/CommonService.java | 6 ++++-- .../api/grad/report/service/CommonServiceTest.java | 12 +++++++----- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java index 92e26de3..56b6d31d 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java @@ -30,6 +30,12 @@ public interface SchoolReportsRepository extends JpaRepository getReportGuidsBySchoolOfRecordsAndReportType(List schoolOfRecords, String reportType); + + @Query("select c.id from SchoolReportsLightEntity c where c.reportTypeCode=:reportType") + List getReportGuidsByReportType(String reportType); + @Modifying @Query(value="update SCHOOL_REPORT set REPORT_TYPE_CODE = :reportTypeTo, update_date = SYSDATE, update_user = 'Batch ' || :batchId || ' Archive Process' where school_of_record in (:schoolOfRecords) and REPORT_TYPE_CODE = :reportTypeFrom", nativeQuery=true) Integer archiveSchoolReports(List schoolOfRecords, String reportTypeFrom, String reportTypeTo, long batchId); @@ -39,11 +45,7 @@ public interface SchoolReportsRepository extends JpaRepository schoolOfRecords, String reportType); - - @Modifying - @Query(value="delete from SCHOOL_REPORT where REPORT_TYPE_CODE = :reportType and UPDATE_DATE <= SYSDATE - 1", nativeQuery=true) - Integer deleteSchoolReports(String reportType); + @Query(value="delete from SCHOOL_REPORT where SCHOOL_REPORT_ID not in (:schoolReportGuids) and REPORT_TYPE_CODE = :archivedReportType", nativeQuery=true) + Integer deleteNotMatchingSchoolReports(List schoolReportGuids, String archivedReportType); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 48858f67..7fda4ae4 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -894,17 +894,19 @@ public Integer archiveSchoolReports(long batchId, List schoolOfRecords, Integer originalReportsCount = 0; String archivedReportType = StringUtils.appendIfMissing(reportType, "ARC", "ARC"); if(schoolOfRecords != null && !schoolOfRecords.isEmpty()) { + List reportGuids = schoolReportsRepository.getReportGuidsBySchoolOfRecordsAndReportType(schoolOfRecords, reportType); originalReportsCount += schoolReportsRepository.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType); updatedReportsCount += schoolReportsRepository.archiveSchoolReports(schoolOfRecords, reportType, archivedReportType, batchId); if(updatedReportsCount > 0 && originalReportsCount.equals(updatedReportsCount)) { - deletedReportsCount += schoolReportsRepository.deleteSchoolReports(schoolOfRecords, archivedReportType); + deletedReportsCount += schoolReportsRepository.deleteNotMatchingSchoolReports(reportGuids, archivedReportType); logger.debug("{} School Reports deleted", deletedReportsCount); } } else { + List reportGuids = schoolReportsRepository.getReportGuidsByReportType(reportType); originalReportsCount += schoolReportsRepository.countByReportType(reportType); updatedReportsCount += schoolReportsRepository.archiveSchoolReports(reportType, archivedReportType, batchId); if(updatedReportsCount > 0 && originalReportsCount.equals(updatedReportsCount)) { - deletedReportsCount += schoolReportsRepository.deleteSchoolReports(archivedReportType); + deletedReportsCount += schoolReportsRepository.deleteNotMatchingSchoolReports(reportGuids, archivedReportType); logger.debug("{} School Reports deleted", deletedReportsCount); } } diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index f2d785bc..ef36aba0 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1798,26 +1798,27 @@ public Page map(Function converter) { @Test public void testArchiveSchoolReports() { + UUID schoolReportGuid = UUID.randomUUID(); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); - Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.deleteNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(1); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(0); - Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(0); + Mockito.when(schoolReportsRepository.deleteNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(0); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); - Mockito.when(schoolReportsRepository.deleteSchoolReports("reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.deleteNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports("reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); count = commonService.archiveSchoolReports(1L, List.of(), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(1); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(0); - Mockito.when(schoolReportsRepository.deleteSchoolReports("reportTypeARC".toUpperCase())).thenReturn(0); + Mockito.when(schoolReportsRepository.deleteNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.archiveSchoolReports("reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); count = commonService.archiveSchoolReports(1L, List.of(), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(0); @@ -1833,8 +1834,9 @@ public void testArchiveSchoolReportsEmpty() { @Test public void testDeleteSchoolReports() { + UUID schoolReportGuid = UUID.randomUUID(); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); - Mockito.when(schoolReportsRepository.deleteSchoolReports(List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.deleteNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(1); From 81df80c07973a3ca21f4bc4b59a9b0fe439e8af9 Mon Sep 17 00:00:00 2001 From: arybakov Date: Fri, 6 Sep 2024 17:38:56 -0600 Subject: [PATCH 31/34] GRAD2-2817 Fix for duplicated archive school reports --- .../report/repository/SchoolReportsRepository.java | 6 +++++- .../educ/api/grad/report/service/CommonService.java | 4 ++-- .../api/grad/report/service/CommonServiceTest.java | 12 +++++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java index 56b6d31d..99e1880e 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java @@ -44,8 +44,12 @@ public interface SchoolReportsRepository extends JpaRepository schoolReportGuids, List schoolOfRecords, String archivedReportType); + @Modifying @Query(value="delete from SCHOOL_REPORT where SCHOOL_REPORT_ID not in (:schoolReportGuids) and REPORT_TYPE_CODE = :archivedReportType", nativeQuery=true) - Integer deleteNotMatchingSchoolReports(List schoolReportGuids, String archivedReportType); + Integer deleteAllNotMatchingSchoolReports(List schoolReportGuids, String archivedReportType); } diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 7fda4ae4..68db35e0 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -898,7 +898,7 @@ public Integer archiveSchoolReports(long batchId, List schoolOfRecords, originalReportsCount += schoolReportsRepository.countBySchoolOfRecordsAndReportType(schoolOfRecords, reportType); updatedReportsCount += schoolReportsRepository.archiveSchoolReports(schoolOfRecords, reportType, archivedReportType, batchId); if(updatedReportsCount > 0 && originalReportsCount.equals(updatedReportsCount)) { - deletedReportsCount += schoolReportsRepository.deleteNotMatchingSchoolReports(reportGuids, archivedReportType); + deletedReportsCount += schoolReportsRepository.deleteSchoolOfRecordsNotMatchingSchoolReports(reportGuids, schoolOfRecords, archivedReportType); logger.debug("{} School Reports deleted", deletedReportsCount); } } else { @@ -906,7 +906,7 @@ public Integer archiveSchoolReports(long batchId, List schoolOfRecords, originalReportsCount += schoolReportsRepository.countByReportType(reportType); updatedReportsCount += schoolReportsRepository.archiveSchoolReports(reportType, archivedReportType, batchId); if(updatedReportsCount > 0 && originalReportsCount.equals(updatedReportsCount)) { - deletedReportsCount += schoolReportsRepository.deleteNotMatchingSchoolReports(reportGuids, archivedReportType); + deletedReportsCount += schoolReportsRepository.deleteAllNotMatchingSchoolReports(reportGuids, archivedReportType); logger.debug("{} School Reports deleted", deletedReportsCount); } } diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index ef36aba0..755ed304 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1800,25 +1800,26 @@ public Page map(Function converter) { public void testArchiveSchoolReports() { UUID schoolReportGuid = UUID.randomUUID(); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); - Mockito.when(schoolReportsRepository.deleteNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.deleteSchoolOfRecordsNotMatchingSchoolReports(List.of(schoolReportGuid), List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.deleteAllNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(1); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(0); - Mockito.when(schoolReportsRepository.deleteNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(0); + Mockito.when(schoolReportsRepository.deleteAllNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(0); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); - Mockito.when(schoolReportsRepository.deleteNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.deleteAllNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports("reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); count = commonService.archiveSchoolReports(1L, List.of(), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(1); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(0); - Mockito.when(schoolReportsRepository.deleteNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(0); + Mockito.when(schoolReportsRepository.deleteAllNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.archiveSchoolReports("reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); count = commonService.archiveSchoolReports(1L, List.of(), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(0); @@ -1836,7 +1837,8 @@ public void testArchiveSchoolReportsEmpty() { public void testDeleteSchoolReports() { UUID schoolReportGuid = UUID.randomUUID(); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); - Mockito.when(schoolReportsRepository.deleteNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.deleteSchoolOfRecordsNotMatchingSchoolReports(List.of(schoolReportGuid), List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.deleteAllNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); Integer count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(1); From 9c802ed66b57b76907f205719ef62733a32c1081 Mon Sep 17 00:00:00 2001 From: Alexander Rybakov <83988488+arybakov-cgi@users.noreply.github.com> Date: Mon, 9 Sep 2024 19:36:42 -0600 Subject: [PATCH 32/34] GRAD2-2817 (#281) * GRAD2-2817 Fix archive all when other schools being deleted * GRAD2-2817 Fix archive all when other schools being deleted * GRAD2-2817 Fix archive all when other schools being deleted --- .../repository/SchoolReportsRepository.java | 3 +++ .../api/grad/report/service/CommonService.java | 17 +++++++++-------- .../grad/report/service/CommonServiceTest.java | 8 +++++++- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java index 99e1880e..ea20c0ea 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/repository/SchoolReportsRepository.java @@ -36,6 +36,9 @@ public interface SchoolReportsRepository extends JpaRepository getReportGuidsByReportType(String reportType); + @Query("select c.schoolOfRecord from SchoolReportsLightEntity c where c.reportTypeCode=:reportType") + List getReportSchoolOfRecordsByReportType(String reportType); + @Modifying @Query(value="update SCHOOL_REPORT set REPORT_TYPE_CODE = :reportTypeTo, update_date = SYSDATE, update_user = 'Batch ' || :batchId || ' Archive Process' where school_of_record in (:schoolOfRecords) and REPORT_TYPE_CODE = :reportTypeFrom", nativeQuery=true) Integer archiveSchoolReports(List schoolOfRecords, String reportTypeFrom, String reportTypeTo, long batchId); diff --git a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java index 68db35e0..abbc76ac 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/grad/report/service/CommonService.java @@ -889,6 +889,15 @@ public List getStudentIDsByStudentGuidsAndReportType(List studentG @Transactional public Integer archiveSchoolReports(long batchId, List schoolOfRecords, String reportType) { + if(schoolOfRecords != null && !schoolOfRecords.isEmpty()) { + return archiveSchoolReportsBySchoolOfRecordAndReportType(batchId, schoolOfRecords, reportType); + } else { + schoolOfRecords = schoolReportsRepository.getReportSchoolOfRecordsByReportType(reportType); + return archiveSchoolReportsBySchoolOfRecordAndReportType(batchId, schoolOfRecords, reportType); + } + } + + private Integer archiveSchoolReportsBySchoolOfRecordAndReportType(long batchId, List schoolOfRecords, String reportType) { Integer updatedReportsCount = 0; Integer deletedReportsCount = 0; Integer originalReportsCount = 0; @@ -901,14 +910,6 @@ public Integer archiveSchoolReports(long batchId, List schoolOfRecords, deletedReportsCount += schoolReportsRepository.deleteSchoolOfRecordsNotMatchingSchoolReports(reportGuids, schoolOfRecords, archivedReportType); logger.debug("{} School Reports deleted", deletedReportsCount); } - } else { - List reportGuids = schoolReportsRepository.getReportGuidsByReportType(reportType); - originalReportsCount += schoolReportsRepository.countByReportType(reportType); - updatedReportsCount += schoolReportsRepository.archiveSchoolReports(reportType, archivedReportType, batchId); - if(updatedReportsCount > 0 && originalReportsCount.equals(updatedReportsCount)) { - deletedReportsCount += schoolReportsRepository.deleteAllNotMatchingSchoolReports(reportGuids, archivedReportType); - logger.debug("{} School Reports deleted", deletedReportsCount); - } } return updatedReportsCount; } diff --git a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java index 755ed304..d5cd7006 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/grad/report/service/CommonServiceTest.java @@ -1800,6 +1800,7 @@ public Page map(Function converter) { public void testArchiveSchoolReports() { UUID schoolReportGuid = UUID.randomUUID(); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.getReportSchoolOfRecordsByReportType("reportType".toUpperCase())).thenReturn(List.of("12345678")); Mockito.when(schoolReportsRepository.deleteSchoolOfRecordsNotMatchingSchoolReports(List.of(schoolReportGuid), List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.deleteAllNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); @@ -1807,18 +1808,21 @@ public void testArchiveSchoolReports() { assertThat(count).isNotNull().isEqualTo(1); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(0); + Mockito.when(schoolReportsRepository.getReportSchoolOfRecordsByReportType("reportType".toUpperCase())).thenReturn(List.of("12345678")); Mockito.when(schoolReportsRepository.deleteAllNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); count = commonService.archiveSchoolReports(1L, List.of("12345678"), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(0); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.getReportSchoolOfRecordsByReportType("reportType".toUpperCase())).thenReturn(List.of("12345678")); Mockito.when(schoolReportsRepository.deleteAllNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports("reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); count = commonService.archiveSchoolReports(1L, List.of(), "reportType".toUpperCase()); - assertThat(count).isNotNull().isEqualTo(1); + assertThat(count).isNotNull().isEqualTo(0); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(0); + Mockito.when(schoolReportsRepository.getReportSchoolOfRecordsByReportType("reportType".toUpperCase())).thenReturn(List.of("12345678")); Mockito.when(schoolReportsRepository.deleteAllNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(0); Mockito.when(schoolReportsRepository.archiveSchoolReports("reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); count = commonService.archiveSchoolReports(1L, List.of(), "reportType".toUpperCase()); @@ -1828,6 +1832,7 @@ public void testArchiveSchoolReports() { @Test public void testArchiveSchoolReportsEmpty() { Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(0); + Mockito.when(schoolReportsRepository.getReportSchoolOfRecordsByReportType("reportType".toUpperCase())).thenReturn(List.of("12345678")); Mockito.when(schoolReportsRepository.archiveSchoolReports(new ArrayList<>(), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(0); Integer count = commonService.archiveSchoolReports(1L, new ArrayList<>(), "reportType".toUpperCase()); assertThat(count).isNotNull().isEqualTo(0); @@ -1837,6 +1842,7 @@ public void testArchiveSchoolReportsEmpty() { public void testDeleteSchoolReports() { UUID schoolReportGuid = UUID.randomUUID(); Mockito.when(schoolReportsRepository.countBySchoolOfRecordsAndReportType(List.of("12345678"), "reportType".toUpperCase())).thenReturn(1); + Mockito.when(schoolReportsRepository.getReportSchoolOfRecordsByReportType("reportType".toUpperCase())).thenReturn(List.of("12345678")); Mockito.when(schoolReportsRepository.deleteSchoolOfRecordsNotMatchingSchoolReports(List.of(schoolReportGuid), List.of("12345678"), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.deleteAllNotMatchingSchoolReports(List.of(schoolReportGuid), "reportTypeARC".toUpperCase())).thenReturn(1); Mockito.when(schoolReportsRepository.archiveSchoolReports(List.of("12345678"), "reportType".toUpperCase(), "reportTypeARC".toUpperCase(), 1L)).thenReturn(1); From d86bb260ca6d11ec6449303a8f58e8d456923a6b Mon Sep 17 00:00:00 2001 From: "chris.ditcher" Date: Thu, 12 Sep 2024 11:25:06 -0700 Subject: [PATCH 33/34] Increased header size --- api/src/main/resources/application.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/api/src/main/resources/application.yaml b/api/src/main/resources/application.yaml index 884494a6..4cfd1a28 100644 --- a/api/src/main/resources/application.yaml +++ b/api/src/main/resources/application.yaml @@ -72,6 +72,7 @@ server: worker: 128 io: 16 #port: ${HTTP_PORT} + max-http-request-header-size: 20000 #API Documentation springdoc: From 6aef499c3400fd3b64d3891040edefce3cb6bfc1 Mon Sep 17 00:00:00 2001 From: githubmamatha <106563495+githubmamatha@users.noreply.github.com> Date: Thu, 12 Sep 2024 12:41:28 -0700 Subject: [PATCH 34/34] Update pom.xml --- api/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/pom.xml b/api/pom.xml index 97eee1f9..12af4f40 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -6,7 +6,7 @@ ca.bc.gov.educ educ-grad-graduation-report-api - 1.8.49 + 1.8.50 educ-grad-graduation-report-api Grad Graduation Report API for GRAD team