From 79e82960268a22dc08ce812a3eae40f87e42cecf Mon Sep 17 00:00:00 2001 From: "QSL\\SumathiT" Date: Fri, 14 Feb 2025 17:11:38 -0800 Subject: [PATCH 1/2] Changes to remove usage of clob for student information. --- .../api/graduation/service/ReportService.java | 44 +++++++++++-------- .../service/GraduationServiceTest.java | 8 ++-- .../graduation/service/ReportServiceTest.java | 10 ++++- 3 files changed, 38 insertions(+), 24 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/graduation/service/ReportService.java b/api/src/main/java/ca/bc/gov/educ/api/graduation/service/ReportService.java index 87af3935..1ba2ad61 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/graduation/service/ReportService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/graduation/service/ReportService.java @@ -16,6 +16,8 @@ import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; +import org.modelmapper.Conditions; +import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -41,6 +43,7 @@ public class ReportService { SchoolService schoolService; OptionalProgramService optionalProgramService; RESTService restService; + ModelMapper modelMapper; @Autowired public ReportService(JsonTransformer jsonTransformer, EducGraduationApiConstants educGraduationApiConstants, SchoolService schoolService, OptionalProgramService optionalProgramService, RESTService restService) { @@ -49,6 +52,7 @@ public ReportService(JsonTransformer jsonTransformer, EducGraduationApiConstants this.schoolService = schoolService; this.optionalProgramService = optionalProgramService; this.restService = restService; + this.modelMapper = new ModelMapper(); } public ProgramCertificateTranscript getTranscript(GraduationStudentRecord gradResponse, ca.bc.gov.educ.api.graduation.model.dto.GraduationData graduationDataStatus, ExceptionMessage exception) { @@ -200,9 +204,8 @@ public ReportData prepareTranscriptData(ca.bc.gov.educ.api.graduation.model.dto. public ReportData prepareTranscriptData(String pen, boolean xml, ExceptionMessage exception) { try { - GraduationStudentRecord graduationStudentRecord = getGraduationStudentRecordByPen(pen); - ca.bc.gov.educ.api.graduation.model.dto.GraduationData graduationData = (ca.bc.gov.educ.api.graduation.model.dto.GraduationData) jsonTransformer.unmarshall(graduationStudentRecord.getStudentGradData(), ca.bc.gov.educ.api.graduation.model.dto.GraduationData.class); - return prepareTranscriptData(graduationData, graduationStudentRecord, xml, exception); + Pair graduationStudentRecord = getGraduationStudentRecordAndGraduationData(pen); + return prepareTranscriptData(graduationStudentRecord.getRight(), graduationStudentRecord.getLeft(), xml, exception); } catch (Exception e) { exception.setExceptionName("PREPARE TRANSCRIPT REPORT DATA FROM PEN"); exception.setExceptionDetails(e.getCause() == null ? e.getLocalizedMessage() : e.getCause().getLocalizedMessage()); @@ -955,9 +958,8 @@ private String getEncodedStringFromBytes(byte[] bytes) { public ReportData prepareCertificateData(String pen, ExceptionMessage exception) { try { - GraduationStudentRecord graduationStudentRecord = getGraduationStudentRecordByPen(pen); - ca.bc.gov.educ.api.graduation.model.dto.GraduationData graduationData = (ca.bc.gov.educ.api.graduation.model.dto.GraduationData) jsonTransformer.unmarshall(graduationStudentRecord.getStudentGradData(), ca.bc.gov.educ.api.graduation.model.dto.GraduationData.class); - return prepareCertificateData(graduationStudentRecord, graduationData); + Pair graduationStudentRecord = getGraduationStudentRecordAndGraduationData(pen); + return prepareCertificateData(graduationStudentRecord.getLeft(), graduationStudentRecord.getRight()); } catch (Exception e) { exception.setExceptionName("PREPARE CERTIFICATE REPORT DATA FROM PEN"); exception.setExceptionDetails(e.getCause() == null ? e.getLocalizedMessage() : e.getCause().getLocalizedMessage()); @@ -1099,12 +1101,14 @@ private String generateStudentAchievementReportJasper(ReportData data) { } } - public ReportData prepareAchievementReportData(ca.bc.gov.educ.api.graduation.model.dto.GraduationData graduationDataStatus, List optionalProgramList, ExceptionMessage exception) { + public ReportData prepareAchievementReportData(String pen, ca.bc.gov.educ.api.graduation.model.dto.GraduationData graduationDataStatus, List optionalProgramList, ExceptionMessage exception) { try { School schoolAtGrad = getSchoolAtGradData(graduationDataStatus); School schoolOfRecord = getSchoolData(graduationDataStatus.getSchool()); ReportData data = new ReportData(); data.setSchool(schoolOfRecord); + //Override student demog information + overrideDemogProperties(getStudentByPenFromStudentApi(pen),graduationDataStatus); data.setStudent(getStudentDataAchvReport(graduationDataStatus.getGradStudent(), optionalProgramList)); data.setOrgCode(StringUtils.startsWith(data.getSchool().getMincode(), "098") ? "YU" : "BC"); data.setGraduationStatus(getGraduationStatus(graduationDataStatus, schoolAtGrad, schoolOfRecord)); @@ -1126,9 +1130,16 @@ public ReportData prepareAchievementReportData(ca.bc.gov.educ.api.graduation.mod public Pair getGraduationStudentRecordAndGraduationData(String pen) { String graduationDataJson = "{}"; try { - GraduationStudentRecord graduationStudentRecord = getGraduationStudentRecordByPen(pen); - graduationDataJson = graduationStudentRecord.getStudentGradData(); - ca.bc.gov.educ.api.graduation.model.dto.GraduationData graduationData = (ca.bc.gov.educ.api.graduation.model.dto.GraduationData) jsonTransformer.unmarshall(graduationDataJson, ca.bc.gov.educ.api.graduation.model.dto.GraduationData.class); + GradSearchStudent student = getStudentByPenFromStudentApi(pen); + GraduationStudentRecord graduationStudentRecord = getGradStatusFromGradStudentApi(student.getStudentID()); + if (graduationStudentRecord.getStudentGradData() == null) { + throw new EntityNotFoundException( + ReportService.class, + String.format("Student with PEN %s doesn't have graduation data in GRAD Student system", pen)); + } + ca.bc.gov.educ.api.graduation.model.dto.GraduationData graduationData = (ca.bc.gov.educ.api.graduation.model.dto.GraduationData) jsonTransformer.unmarshall(graduationStudentRecord.getStudentGradData(), ca.bc.gov.educ.api.graduation.model.dto.GraduationData.class); + //Override student demog information + overrideDemogProperties(student,graduationData); return Pair.of(graduationStudentRecord, graduationData); } catch (Exception e) { log.error("GraduationData {} unmarshal error for student {}: {}", graduationDataJson, pen, e.getLocalizedMessage()); @@ -1136,15 +1147,12 @@ public Pair getOptionalProgramAchvReport(String gradProgramCode, List optionalProgramList) { diff --git a/api/src/test/java/ca/bc/gov/educ/api/graduation/service/GraduationServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/graduation/service/GraduationServiceTest.java index c66af701..b68df7e4 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/graduation/service/GraduationServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/graduation/service/GraduationServiceTest.java @@ -163,7 +163,7 @@ public void testGraduateStudent() { std.setFirstName("Sreepad"); data.setStudent(std); Mockito.when(gradStatusService.saveStudentRecordProjectedRun(projectedRunClob, studentID, null, exception)).thenReturn(gradResponse); - Mockito.when(reportService.prepareAchievementReportData(graduationDataStatus, list, exception)).thenReturn(data); + Mockito.when(reportService.prepareAchievementReportData(gradResponse.getPen(), graduationDataStatus, list, exception)).thenReturn(data); Mockito.when(gradStatusService.getGradStatus(studentID, exception)).thenReturn(gradResponse); Mockito.when(gradAlgorithmService.runProjectedAlgorithm(gradResponse.getStudentID(), gradResponse.getProgram())).thenReturn(graduationDataStatus); Mockito.when(gradStatusService.processProjectedResults(gradResponse,graduationDataStatus)).thenReturn(gradResponse); @@ -248,7 +248,7 @@ public void testGraduateStudent_excep_1() { std.setFirstName("Sreepad"); data.setStudent(std); Mockito.when(gradStatusService.saveStudentRecordProjectedRun(projectedRunClob, studentID, null, exception)).thenReturn(gradResponse); - Mockito.when(reportService.prepareAchievementReportData(graduationDataStatus, list, exception)).thenReturn(data); + Mockito.when(reportService.prepareAchievementReportData(gradResponse.getPen(), graduationDataStatus, list, exception)).thenReturn(data); Mockito.when(gradStatusService.getGradStatus(studentID, exception)).thenReturn(gradResponse); Mockito.when(gradAlgorithmService.runProjectedAlgorithm(gradResponse.getStudentID(), gradResponse.getProgram())).thenReturn(graduationDataStatus); Mockito.when(gradStatusService.processProjectedResults(gradResponse,graduationDataStatus)).thenReturn(gradResponse); @@ -312,7 +312,7 @@ public void testGraduateStudent_excep_2() { std.setFirstName("Sreepad"); data.setStudent(std); Mockito.when(gradStatusService.saveStudentRecordProjectedRun(projectedRunClob, studentID, null, exception)).thenReturn(gradResponse); - Mockito.when(reportService.prepareAchievementReportData(graduationDataStatus, list, exception)).thenReturn(data); + Mockito.when(reportService.prepareAchievementReportData(gradResponse.getPen(), graduationDataStatus, list, exception)).thenReturn(data); Mockito.when(gradStatusService.getGradStatus(studentID, exception)).thenReturn(gradResponse); Mockito.when(gradAlgorithmService.runProjectedAlgorithm(gradResponse.getStudentID(), gradResponse.getProgram())).thenReturn(graduationDataStatus); Mockito.when(gradStatusService.processProjectedResults(gradResponse,graduationDataStatus)).thenReturn(gradResponse); @@ -374,7 +374,7 @@ public void testGraduateStudent_error() { std.setFirstName("Sreepad"); data.setStudent(std); Mockito.when(gradStatusService.saveStudentRecordProjectedRun(projectedRunClob, studentID, null, exception)).thenReturn(gradResponse); - Mockito.when(reportService.prepareAchievementReportData(graduationDataStatus, list, exception)).thenReturn(data); + Mockito.when(reportService.prepareAchievementReportData(gradResponse.getPen(), graduationDataStatus, list, exception)).thenReturn(data); Mockito.when(gradStatusService.getGradStatus(studentID, exception)).thenReturn(gradResponse); Mockito.when(gradAlgorithmService.runProjectedAlgorithm(gradResponse.getStudentID(), gradResponse.getProgram())).thenReturn(graduationDataStatus); diff --git a/api/src/test/java/ca/bc/gov/educ/api/graduation/service/ReportServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/graduation/service/ReportServiceTest.java index fde8ea01..d8734884 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/graduation/service/ReportServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/graduation/service/ReportServiceTest.java @@ -1420,10 +1420,16 @@ public void testStudentAchievementReport() throws Exception { spc.setDescription("wasd"); spc.setSpCase("A"); spc.setPassFlag("Y"); + GradSearchStudent gradSearchStudent = new GradSearchStudent(); + gradSearchStudent.setPen(gradStatus.getGradStudent().getPen()); + gradSearchStudent.setLegalFirstName(gradStatus.getGradStudent().getLegalFirstName()); + gradSearchStudent.setLegalMiddleNames(gradStatus.getGradStudent().getLegalMiddleNames()); + gradSearchStudent.setLegalLastName(gradStatus.getGradStudent().getLegalLastName()); + gradSearchStudent.setStudentID(gradStatus.getGradStudent().getStudentID()); when(this.restService.get(String.format(constants.getSpecialCase(),"A"), SpecialCase.class)).thenReturn(spc); - - ReportData data = reportService.prepareAchievementReportData(gradStatus,optionalProgram, exception); + when(this.restService.get(String.format(constants.getPenStudentApiByPenUrl(),gradStatus.getGradStudent().getPen()), List.class)).thenReturn(List.of(gradSearchStudent)); + ReportData data = reportService.prepareAchievementReportData(gradStatus.getGradStudent().getPen(), gradStatus,optionalProgram, exception); assertNotNull(data); assertNotNull(data.getStudentExams()); assertNotNull(data.getStudentCourses()); From 2b9833023fa2b7428f28c13e04653a86588ed446 Mon Sep 17 00:00:00 2001 From: "QSL\\SumathiT" Date: Tue, 25 Feb 2025 10:40:42 -0800 Subject: [PATCH 2/2] Compilation fixes. --- .../process/ProjectedGradFinalMarksRegistrationsProcess.java | 2 +- .../gov/educ/api/graduation/service/GradAlgorithmService.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/graduation/process/ProjectedGradFinalMarksRegistrationsProcess.java b/api/src/main/java/ca/bc/gov/educ/api/graduation/process/ProjectedGradFinalMarksRegistrationsProcess.java index 86bb1549..7e6c2d97 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/graduation/process/ProjectedGradFinalMarksRegistrationsProcess.java +++ b/api/src/main/java/ca/bc/gov/educ/api/graduation/process/ProjectedGradFinalMarksRegistrationsProcess.java @@ -39,7 +39,7 @@ public ProcessorData fire(ProcessorData processorData) { gradStatusService.saveStudentRecordProjectedRun(projectedRunClob, processorData.getStudentID(), processorData.getBatchId(), exception); gradResponse = gradStatusService.processProjectedResults(gradResponse, graduationDataStatus); List projectedOptionalGradResponse = optionalProgramService.projectedOptionalPrograms(graduationDataStatus, processorData.getStudentID()); - ReportData data = reportService.prepareAchievementReportData(graduationDataStatus, projectedOptionalGradResponse, exception); + ReportData data = reportService.prepareAchievementReportData(gradResponse.getPen(), graduationDataStatus, projectedOptionalGradResponse, exception); if (checkExceptions(data.getException(), algorithmResponse,processorData)) { return processorData; } diff --git a/api/src/main/java/ca/bc/gov/educ/api/graduation/service/GradAlgorithmService.java b/api/src/main/java/ca/bc/gov/educ/api/graduation/service/GradAlgorithmService.java index f38909ae..8cebd9aa 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/graduation/service/GradAlgorithmService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/graduation/service/GradAlgorithmService.java @@ -2,10 +2,8 @@ import java.util.UUID; -import ca.bc.gov.educ.api.graduation.util.ThreadLocalStateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.web.reactive.function.client.WebClient; import ca.bc.gov.educ.api.graduation.model.dto.ExceptionMessage; import ca.bc.gov.educ.api.graduation.model.dto.GraduationData;