From 7913afb5fe17e301a905f0543f5c3d523396d615 Mon Sep 17 00:00:00 2001 From: Jinil Sung Date: Tue, 14 Jan 2025 16:52:33 -0800 Subject: [PATCH 1/3] GRAD2-3220: task is completed. GRAD2-3220: task is completed. --- .../api/trax/model/dto/ConvGradStudent.java | 3 +- .../model/dto/GradStatusEventPayloadDTO.java | 6 ++- .../gov/educ/api/trax/model/dto/School.java | 28 ------------- .../api/trax/model/dto/SnapshotResponse.java | 1 + .../model/dto/TraxGraduationUpdateDTO.java | 2 - .../gov/educ/api/trax/service/EdwService.java | 27 ++++++++++--- .../api/trax/service/EventCommonService.java | 9 ++++- .../GradStudentUndoCompletionService.java | 2 +- .../api/trax/service/TraxCommonService.java | 4 +- .../api/trax/service/TraxUpdateService.java | 3 +- .../controller/TraxCommonControllerTest.java | 2 +- .../educ/api/trax/service/EdwServiceTest.java | 33 ++++++++++++++- .../GradStudentGraduatedServiceTest.java | 40 +++++++++++++++++++ .../GradStudentUndoCompletionServiceTest.java | 23 +++++++++++ .../GradStudentUpdatedServiceTest.java | 23 +++++++++++ .../trax/service/TraxUpdateServiceTest.java | 39 +++++++++--------- .../gov/educ/api/trax/support/TestUtils.java | 8 ++-- 17 files changed, 178 insertions(+), 75 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/ConvGradStudent.java b/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/ConvGradStudent.java index 9e5e5729..4a2b9d61 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/ConvGradStudent.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/ConvGradStudent.java @@ -25,9 +25,8 @@ public class ConvGradStudent { private String gpa; private String honoursStanding; // inc private String studentGradData; - private String schoolOfRecord; // inc private UUID schoolOfRecordId; // inc - private String schoolAtGrad; // inc + private UUID schoolAtGradId; // inc private String studentGrade; // inc private String studentStatus; // inc private String archiveFlag; // inc diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/GradStatusEventPayloadDTO.java b/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/GradStatusEventPayloadDTO.java index 263fa1f7..5017482b 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/GradStatusEventPayloadDTO.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/GradStatusEventPayloadDTO.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.NoArgsConstructor; +import java.util.UUID; + @Data @Builder @AllArgsConstructor @@ -15,8 +17,8 @@ public class GradStatusEventPayloadDTO { private String pen; private String program; private String programCompletionDate; - private String schoolOfRecord; - private String schoolAtGrad; + private UUID schoolOfRecordId; + private UUID schoolAtGradId; private String studentGrade; private String studentStatus; private String honoursStanding; diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/School.java b/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/School.java index 87243a70..3fcaf65e 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/School.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/School.java @@ -26,34 +26,6 @@ public class School implements Comparable { private String schoolCategoryCode; private String schoolCategoryLegacyCode; - public String getSchoolName() { - return schoolName != null ? schoolName.trim(): ""; - } - - public String getDistrictName() { - return districtName != null ? districtName.trim(): ""; - } - - public String getAddress1() { - return address1 != null ? address1.trim(): ""; - } - - public String getAddress2() { - return address2 != null ? address2.trim(): ""; - } - - public String getCity() { - return city != null ? city.trim(): ""; - } - - public String getPostal() { - return postal != null ? postal.trim(): ""; - } - - public String getMinCode() { - return minCode != null ? minCode.trim(): ""; - } - @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/SnapshotResponse.java b/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/SnapshotResponse.java index 658be50a..22e4fe0a 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/SnapshotResponse.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/SnapshotResponse.java @@ -13,6 +13,7 @@ public class SnapshotResponse { private BigDecimal gpa; private String honourFlag; private String schoolOfRecord; + private String schoolOfRecordId; private String studentGrade; public SnapshotResponse(String pen, String graduatedDate, BigDecimal gpa, String honourFlag, String schoolOfRecord, String studentGrade) { diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/TraxGraduationUpdateDTO.java b/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/TraxGraduationUpdateDTO.java index 6b6531b7..cd73b597 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/TraxGraduationUpdateDTO.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/model/dto/TraxGraduationUpdateDTO.java @@ -19,8 +19,6 @@ public class TraxGraduationUpdateDTO extends TraxStudentUpdateDTO { private String graduationRequirementYear; // STUD_GRAD private String studentGrade; - // MINCODE - private String schoolOfRecord; // SchoolId private UUID schoolOfRecordId; // SLP_DATE diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/service/EdwService.java b/api/src/main/java/ca/bc/gov/educ/api/trax/service/EdwService.java index 2b03a976..a0463604 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/service/EdwService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/service/EdwService.java @@ -1,19 +1,21 @@ package ca.bc.gov.educ.api.trax.service; import ca.bc.gov.educ.api.trax.model.dto.SnapshotResponse; +import ca.bc.gov.educ.api.trax.model.dto.institute.School; import ca.bc.gov.educ.api.trax.repository.SnapshotRepository; +import ca.bc.gov.educ.api.trax.service.institute.SchoolService; import org.springframework.stereotype.Service; import java.util.List; @Service public class EdwService { - final SnapshotRepository snapshotRepository; + final private SnapshotRepository snapshotRepository; + final private SchoolService schoolService; - public EdwService( - SnapshotRepository snapshotRepository - ) { + public EdwService(SnapshotRepository snapshotRepository, SchoolService schoolService) { this.snapshotRepository = snapshotRepository; + this.schoolService = schoolService; } public List getUniqueSchoolList(Integer gradYear) { @@ -21,10 +23,23 @@ public List getUniqueSchoolList(Integer gradYear) { } public List getStudents(Integer gradYear) { - return snapshotRepository.getStudentsByGradYear(gradYear); + List results = snapshotRepository.getStudentsByGradYear(gradYear); + populateSchoolId(results); + return results; } public List getStudents(Integer gradYear, String schoolOfRecord) { - return snapshotRepository.getStudentsByGradYearAndSchoolOfRecord(gradYear, schoolOfRecord); + List results = snapshotRepository.getStudentsByGradYearAndSchoolOfRecord(gradYear, schoolOfRecord); + populateSchoolId(results); + return results; + } + + private void populateSchoolId(List list) { + list.forEach(r -> { + School sch = schoolService.getSchoolByMinCodeFromRedisCache(r.getSchoolOfRecord()); + if (sch != null) { + r.setSchoolOfRecordId(sch.getSchoolId()); + } + }); } } diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/service/EventCommonService.java b/api/src/main/java/ca/bc/gov/educ/api/trax/service/EventCommonService.java index 60248e46..d699a551 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/service/EventCommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/service/EventCommonService.java @@ -5,6 +5,7 @@ import ca.bc.gov.educ.api.trax.model.entity.EventEntity; import ca.bc.gov.educ.api.trax.model.entity.TraxStudentEntity; import ca.bc.gov.educ.api.trax.repository.TraxStudentRepository; +import ca.bc.gov.educ.api.trax.service.institute.CommonService; import ca.bc.gov.educ.api.trax.util.EducGradTraxApiConstants; import ca.bc.gov.educ.api.trax.util.EducGradTraxApiUtils; import ca.bc.gov.educ.api.trax.util.ReplicationUtils; @@ -43,6 +44,8 @@ public abstract class EventCommonService extends EventBaseService { public static final String FIELD_HONOUR_FLAG = "HONOUR_FLAG"; public static final String FIELD_XCRIPT_ACTV_DATE = "XCRIPT_ACTV_DATE"; + @Autowired + private CommonService commonService; @Autowired private TraxStudentRepository traxStudentRepository; @Autowired @@ -181,11 +184,13 @@ protected void validateAndPopulateUpdateFieldsMap(Map updateFieldsMap.remove(FIELD_SCC_DATE); // mincode_grad(= blank) - gradStatusUpdate.setSchoolAtGrad(null); + gradStatusUpdate.setSchoolAtGradId(null); updateFieldsMap.put(FIELD_MINCODE_GRAD, Pair.of(FieldType.TRAX_STRING, " ")); // stud_grade_at_grad(= blank) diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/service/TraxCommonService.java b/api/src/main/java/ca/bc/gov/educ/api/trax/service/TraxCommonService.java index a74bf678..1c0e81df 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/service/TraxCommonService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/service/TraxCommonService.java @@ -221,6 +221,7 @@ private ConvGradStudent populateConvGradStudent(Object[] fields) { String graduationRequirementYear = (String) fields[6]; UUID schoolOfRecordId = this.getSchoolIdFromRedisCache(schoolOfRecord); + UUID schoolAtGradId = this.getSchoolIdFromRedisCache(schoolAtGrad); // grad or non-grad Date programCompletionDate = null; @@ -278,9 +279,8 @@ private ConvGradStudent populateConvGradStudent(Object[] fields) { .pen(pen) .slpDate(slpDateStr) .sccDate(sccDateStr) - .schoolOfRecord(schoolOfRecord) .schoolOfRecordId(schoolOfRecordId) - .schoolAtGrad(schoolAtGrad) + .schoolAtGradId(schoolAtGradId) .studentGrade(studentGrade) .studentStatus(studentStatus != null? studentStatus.toString() : null) .archiveFlag(archiveFlag != null? archiveFlag.toString() : null) diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/service/TraxUpdateService.java b/api/src/main/java/ca/bc/gov/educ/api/trax/service/TraxUpdateService.java index ff83ef4f..ef81df89 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/service/TraxUpdateService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/service/TraxUpdateService.java @@ -146,8 +146,7 @@ private TraxStudentUpdateDTO populateEventPayload(String updateType, String pen) gradUpdate.setPen(pen); gradUpdate.setGraduationRequirementYear(traxStudent.getGraduationRequirementYear()); gradUpdate.setStudentGrade(traxStudent.getStudentGrade()); - gradUpdate.setSchoolOfRecord(traxStudent.getSchoolOfRecord()); - gradUpdate.setSchoolOfRecordId(commonService.getSchoolIdFromRedisCache(gradUpdate.getSchoolOfRecord())); + gradUpdate.setSchoolOfRecordId(traxStudent.getSchoolOfRecordId()); gradUpdate.setSlpDate(traxStudent.getSlpDate()); gradUpdate.setCitizenship(traxStudent.getStudentCitizenship()); gradUpdate.setStudentStatus(traxStudent.getStudentStatus()); diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/controller/TraxCommonControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/controller/TraxCommonControllerTest.java index 5a361d0f..667adbff 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/trax/controller/TraxCommonControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/trax/controller/TraxCommonControllerTest.java @@ -66,7 +66,7 @@ public void testGetStudentMasterDataFromTrax() { .graduationRequirementYear("2020") .program("2018-EN") .studentGrade("12") - .schoolOfRecord("12345678") + .schoolOfRecordId(UUID.randomUUID()) .build(); studentList.add(obj); Mockito.when(traxCommonService.getStudentMasterDataFromTrax(pen)).thenReturn(studentList); diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/service/EdwServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/service/EdwServiceTest.java index 6555b550..94b2d823 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/trax/service/EdwServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/trax/service/EdwServiceTest.java @@ -4,7 +4,9 @@ import ca.bc.gov.educ.api.trax.messaging.jetstream.Publisher; import ca.bc.gov.educ.api.trax.messaging.jetstream.Subscriber; import ca.bc.gov.educ.api.trax.model.dto.SnapshotResponse; +import ca.bc.gov.educ.api.trax.model.dto.institute.School; import ca.bc.gov.educ.api.trax.repository.SnapshotRepository; +import ca.bc.gov.educ.api.trax.service.institute.SchoolService; import ca.bc.gov.educ.api.trax.util.EducGradTraxApiConstants; import org.junit.After; import org.junit.Before; @@ -25,6 +27,7 @@ import java.math.BigDecimal; import java.util.Arrays; import java.util.List; +import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; @@ -41,6 +44,9 @@ public class EdwServiceTest { @MockBean private SnapshotRepository snapshotRepository; + @MockBean + private SchoolService schoolService; + @Autowired private EducGradTraxApiConstants constants; @@ -97,19 +103,30 @@ public void testGetUniqueSchoolList() { @Test public void testGetStudents() { Integer gradYear = 2023; + String minCode = "12345678"; + UUID schoolId = UUID.randomUUID(); // graduated student SnapshotResponse snapshot1 = new SnapshotResponse(); snapshot1.setPen("123456789"); snapshot1.setGraduatedDate("202306"); snapshot1.setGpa(BigDecimal.valueOf(3.60)); + snapshot1.setSchoolOfRecord(minCode); // non-graduated student SnapshotResponse snapshot2 = new SnapshotResponse(); snapshot1.setPen("111222333"); List snapshots = Arrays.asList(snapshot1, snapshot2); - when(this.snapshotRepository.getStudentsByGradYear(gradYear)).thenReturn(snapshots); + // School + School school = new School(); + school.setSchoolId(schoolId.toString()); + school.setMincode(minCode); + school.setDisplayName("Test School"); + school.setSchoolCategoryCode("PUBLIC"); + + when(this.schoolService.getSchoolByMinCodeFromRedisCache(minCode)).thenReturn(school); + var result = edwService.getStudents(gradYear); assertThat(result).hasSize(2); @@ -119,19 +136,31 @@ public void testGetStudents() { public void testGetStudentsByGradYearAndSchool() { Integer gradYear = 2023; String minCode = "12345678"; + UUID schoolId = UUID.randomUUID(); // graduated student SnapshotResponse snapshot1 = new SnapshotResponse(); snapshot1.setPen("123456789"); snapshot1.setGraduatedDate("202306"); snapshot1.setGpa(BigDecimal.valueOf(3.60)); + snapshot1.setSchoolOfRecord(minCode); // non-graduated student SnapshotResponse snapshot2 = new SnapshotResponse(); - snapshot1.setPen("111222333"); + snapshot2.setPen("111222333"); + snapshot2.setSchoolOfRecord(minCode); List snapshots = Arrays.asList(snapshot1, snapshot2); when(this.snapshotRepository.getStudentsByGradYearAndSchoolOfRecord(gradYear, minCode)).thenReturn(snapshots); + // School + School school = new School(); + school.setSchoolId(schoolId.toString()); + school.setMincode(minCode); + school.setDisplayName("Test School"); + school.setSchoolCategoryCode("PUBLIC"); + + when(this.schoolService.getSchoolByMinCodeFromRedisCache(minCode)).thenReturn(school); + var result = edwService.getStudents(gradYear, minCode); assertThat(result).hasSize(2); diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentGraduatedServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentGraduatedServiceTest.java index cec4b060..970a06a4 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentGraduatedServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentGraduatedServiceTest.java @@ -4,8 +4,10 @@ import ca.bc.gov.educ.api.trax.messaging.NatsConnection; import ca.bc.gov.educ.api.trax.messaging.jetstream.Publisher; import ca.bc.gov.educ.api.trax.messaging.jetstream.Subscriber; +import ca.bc.gov.educ.api.trax.model.dto.School; import ca.bc.gov.educ.api.trax.repository.EventRepository; import ca.bc.gov.educ.api.trax.repository.TraxStudentRepository; +import ca.bc.gov.educ.api.trax.service.institute.CommonService; import ca.bc.gov.educ.api.trax.support.TestUtils; import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.commons.lang3.StringUtils; @@ -25,6 +27,7 @@ import org.springframework.test.context.junit4.SpringRunner; import redis.clients.jedis.JedisCluster; +import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.openMocks; @RunWith(SpringRunner.class) @@ -40,6 +43,9 @@ public class GradStudentGraduatedServiceTest { @Autowired private TraxStudentRepository traxStudentRepository; + @MockBean + private CommonService commonService; + // NATS @MockBean private NatsConnection natsConnection; @@ -161,6 +167,23 @@ private void testProcessEvent(String program, String studentStatus) throws JsonP request.setProgram(program); request.setStudentStatus(studentStatus); final var event = TestUtils.createEvent(EventType.GRAD_STUDENT_GRADUATED.name(), request, eventRepository); + + // SchoolOfRecord + if (request.getSchoolOfRecordId() != null) { + School school = new School(); + school.setSchoolId(request.getSchoolOfRecordId().toString()); + + when(commonService.getSchoolForClobDataBySchoolIdFromRedisCache(request.getSchoolOfRecordId())).thenReturn(school); + } + + // SchoolAtGrad + if (request.getSchoolAtGradId() != null) { + School schoolAtGrad = new School(); + schoolAtGrad.setSchoolId(request.getSchoolAtGradId().toString()); + + when(commonService.getSchoolForClobDataBySchoolIdFromRedisCache(request.getSchoolAtGradId())).thenReturn(schoolAtGrad); + } + this.gradStudentGraduatedService.processEvent(request, event); } @@ -169,6 +192,23 @@ private void testProcessEventForNonGrad(String program, String studentStatus) th request.setProgram(program); request.setStudentStatus(studentStatus); final var event = TestUtils.createEvent(EventType.GRAD_STUDENT_GRADUATED.name(), request, eventRepository); + + // SchoolOfRecord + if (request.getSchoolOfRecordId() != null) { + School school = new School(); + school.setSchoolId(request.getSchoolOfRecordId().toString()); + + when(commonService.getSchoolForClobDataBySchoolIdFromRedisCache(request.getSchoolOfRecordId())).thenReturn(school); + } + + // SchoolAtGrad + if (request.getSchoolAtGradId() != null) { + School schoolAtGrad = new School(); + schoolAtGrad.setSchoolId(request.getSchoolAtGradId().toString()); + + when(commonService.getSchoolForClobDataBySchoolIdFromRedisCache(request.getSchoolAtGradId())).thenReturn(schoolAtGrad); + } + this.gradStudentGraduatedService.processEvent(request, event); } diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentUndoCompletionServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentUndoCompletionServiceTest.java index f4c56d8f..7bc593fc 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentUndoCompletionServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentUndoCompletionServiceTest.java @@ -4,8 +4,10 @@ import ca.bc.gov.educ.api.trax.messaging.NatsConnection; import ca.bc.gov.educ.api.trax.messaging.jetstream.Publisher; import ca.bc.gov.educ.api.trax.messaging.jetstream.Subscriber; +import ca.bc.gov.educ.api.trax.model.dto.School; import ca.bc.gov.educ.api.trax.repository.EventRepository; import ca.bc.gov.educ.api.trax.repository.TraxStudentRepository; +import ca.bc.gov.educ.api.trax.service.institute.CommonService; import ca.bc.gov.educ.api.trax.support.TestUtils; import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.commons.lang3.StringUtils; @@ -25,6 +27,7 @@ import org.springframework.test.context.junit4.SpringRunner; import redis.clients.jedis.JedisCluster; +import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.openMocks; @RunWith(SpringRunner.class) @@ -40,6 +43,9 @@ public class GradStudentUndoCompletionServiceTest { @Autowired private TraxStudentRepository traxStudentRepository; + @MockBean + private CommonService commonService; + // NATS @MockBean private NatsConnection natsConnection; @@ -155,6 +161,23 @@ private void testProcessEvent(String program, String studentStatus) throws JsonP request.setProgram(program); request.setStudentStatus(studentStatus); final var event = TestUtils.createEvent(EventType.GRAD_STUDENT_UNDO_COMPLETION.name(), request, eventRepository); + + // SchoolOfRecord + if (request.getSchoolOfRecordId() != null) { + School school = new School(); + school.setSchoolId(request.getSchoolOfRecordId().toString()); + + when(commonService.getSchoolForClobDataBySchoolIdFromRedisCache(request.getSchoolOfRecordId())).thenReturn(school); + } + + // SchoolAtGrad + if (request.getSchoolAtGradId() != null) { + School schoolAtGrad = new School(); + schoolAtGrad.setSchoolId(request.getSchoolAtGradId().toString()); + + when(commonService.getSchoolForClobDataBySchoolIdFromRedisCache(request.getSchoolAtGradId())).thenReturn(schoolAtGrad); + } + this.gradStudentUndoCompletionService.processEvent(request, event); } diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentUpdatedServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentUpdatedServiceTest.java index c3d45833..6f6c1e20 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentUpdatedServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/trax/service/GradStudentUpdatedServiceTest.java @@ -4,8 +4,10 @@ import ca.bc.gov.educ.api.trax.messaging.NatsConnection; import ca.bc.gov.educ.api.trax.messaging.jetstream.Publisher; import ca.bc.gov.educ.api.trax.messaging.jetstream.Subscriber; +import ca.bc.gov.educ.api.trax.model.dto.School; import ca.bc.gov.educ.api.trax.repository.EventRepository; import ca.bc.gov.educ.api.trax.repository.TraxStudentRepository; +import ca.bc.gov.educ.api.trax.service.institute.CommonService; import ca.bc.gov.educ.api.trax.support.TestUtils; import com.fasterxml.jackson.core.JsonProcessingException; import org.apache.commons.lang3.StringUtils; @@ -25,6 +27,7 @@ import org.springframework.test.context.junit4.SpringRunner; import redis.clients.jedis.JedisCluster; +import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.openMocks; @RunWith(SpringRunner.class) @@ -40,6 +43,9 @@ public class GradStudentUpdatedServiceTest { @Autowired private TraxStudentRepository traxStudentRepository; + @MockBean + private CommonService commonService; + // NATS @MockBean private NatsConnection natsConnection; @@ -167,6 +173,23 @@ private void testProcessEvent(String program, String studentStatus) throws JsonP request.setProgram(program); request.setStudentStatus(studentStatus); final var event = TestUtils.createEvent(EventType.GRAD_STUDENT_UPDATED.name(), request, eventRepository); + + // SchoolOfRecord + if (request.getSchoolOfRecordId() != null) { + School school = new School(); + school.setSchoolId(request.getSchoolOfRecordId().toString()); + + when(commonService.getSchoolForClobDataBySchoolIdFromRedisCache(request.getSchoolOfRecordId())).thenReturn(school); + } + + // SchoolAtGrad + if (request.getSchoolAtGradId() != null) { + School schoolAtGrad = new School(); + schoolAtGrad.setSchoolId(request.getSchoolAtGradId().toString()); + + when(commonService.getSchoolForClobDataBySchoolIdFromRedisCache(request.getSchoolAtGradId())).thenReturn(schoolAtGrad); + } + this.gradStudentUpdatedService.processEvent(request, event); } diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/service/TraxUpdateServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/service/TraxUpdateServiceTest.java index 67b36b97..825966e5 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/trax/service/TraxUpdateServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/trax/service/TraxUpdateServiceTest.java @@ -137,7 +137,7 @@ public void testGetOutstandingList() { public void testScheduledRunForTraxUpdates() throws JsonProcessingException { String pen = "123456789"; String mincode = "12345678"; - UUID schoolOfRecordId = UUID.randomUUID(); + UUID schoolId = UUID.randomUUID(); LockAssert.TestHelper.makeAllAssertsPass(true); TraxUpdateInGradEntity traxUpdateInGradEntity = new TraxUpdateInGradEntity(); @@ -149,8 +149,7 @@ public void testScheduledRunForTraxUpdates() throws JsonProcessingException { TraxGraduationUpdateDTO payload = new TraxGraduationUpdateDTO(); payload.setPen(pen); payload.setStudentGrade("12"); - payload.setSchoolOfRecord(mincode); - payload.setSchoolOfRecordId(schoolOfRecordId); + payload.setSchoolOfRecordId(schoolId); payload.setCitizenship("C"); payload.setGraduationRequirementYear("2018"); String jsonString = JsonUtil.getJsonStringFromObject(payload); @@ -158,11 +157,11 @@ public void testScheduledRunForTraxUpdates() throws JsonProcessingException { ConvGradStudent traxStudent = new ConvGradStudent(); traxStudent.setPen(pen); traxStudent.setStudentGrade("12"); - traxStudent.setSchoolOfRecord(mincode); traxStudent.setGraduationRequirementYear("2018"); traxStudent.setStudentStatus("A"); traxStudent.setArchiveFlag("A"); traxStudent.setStudentCitizenship("C"); + traxStudent.setSchoolOfRecordId(schoolId); TraxUpdatedPubEvent traxUpdatedPubEvent = TraxUpdatedPubEvent.builder() .eventType(EventType.UPD_GRAD.toString()) @@ -183,7 +182,7 @@ public void testScheduledRunForTraxUpdates() throws JsonProcessingException { when(traxUpdateInGradRepository.findOutstandingUpdates(any())).thenReturn(Arrays.asList(traxUpdateInGradEntity)); when(traxUpdatedPubEventRepository.save(traxUpdatedPubEvent)).thenReturn(traxUpdatedPubEvent); when(traxCommonService.getStudentMasterDataFromTrax(pen)).thenReturn(Arrays.asList(traxStudent)); - when(commonService.getSchoolIdFromRedisCache(mincode)).thenReturn(schoolOfRecordId); + when(commonService.getSchoolIdFromRedisCache(mincode)).thenReturn(schoolId ); traxUpdateService.publishTraxUpdatedEvent(traxUpdateInGradEntity); traxUpdateService.updateStatus(traxUpdateInGradEntity); @@ -210,7 +209,7 @@ public void testProcess_whenNewStudent_isAdded() throws JsonProcessingException ConvGradStudent traxStudent = new ConvGradStudent(); traxStudent.setPen(pen); traxStudent.setStudentGrade("12"); - traxStudent.setSchoolOfRecord("12345678"); + traxStudent.setSchoolOfRecordId(UUID.randomUUID()); traxStudent.setGraduationRequirementYear("2018"); traxStudent.setStudentStatus("A"); traxStudent.setArchiveFlag("A"); @@ -260,7 +259,7 @@ public void testProcess_whenStudentDemographicInfo_isUpdated() throws JsonProces ConvGradStudent traxStudent = new ConvGradStudent(); traxStudent.setPen(pen); traxStudent.setStudentGrade("12"); - traxStudent.setSchoolOfRecord("12345678"); + traxStudent.setSchoolOfRecordId(UUID.randomUUID()); traxStudent.setGraduationRequirementYear("2018"); traxStudent.setStudentStatus("A"); traxStudent.setArchiveFlag("A"); @@ -302,7 +301,7 @@ public void testProcess_whenStudentDemographicInfo_isUpdated() throws JsonProces public void testProcess_whenGraduation_isUpdated() throws JsonProcessingException { String pen = "123456789"; String mincode = "12345678"; - UUID schoolOfRecordId = UUID.randomUUID(); + UUID schoolId = UUID.randomUUID(); TraxUpdateInGradEntity traxUpdateInGradEntity = new TraxUpdateInGradEntity(); traxUpdateInGradEntity.setPen(pen); @@ -313,8 +312,7 @@ public void testProcess_whenGraduation_isUpdated() throws JsonProcessingExceptio TraxGraduationUpdateDTO payload = new TraxGraduationUpdateDTO(); payload.setPen(pen); payload.setStudentGrade("12"); - payload.setSchoolOfRecord(mincode); - payload.setSchoolOfRecordId(schoolOfRecordId); + payload.setSchoolOfRecordId(schoolId); payload.setCitizenship("C"); payload.setGraduationRequirementYear("2018"); String jsonString = JsonUtil.getJsonStringFromObject(payload); @@ -322,11 +320,11 @@ public void testProcess_whenGraduation_isUpdated() throws JsonProcessingExceptio ConvGradStudent traxStudent = new ConvGradStudent(); traxStudent.setPen(pen); traxStudent.setStudentGrade("12"); - traxStudent.setSchoolOfRecord(mincode); traxStudent.setGraduationRequirementYear("2018"); traxStudent.setStudentStatus("A"); traxStudent.setArchiveFlag("A"); traxStudent.setStudentCitizenship("C"); + traxStudent.setSchoolOfRecordId(schoolId); TraxUpdatedPubEvent traxUpdatedPubEvent = TraxUpdatedPubEvent.builder() .eventType(EventType.UPD_GRAD.toString()) @@ -346,7 +344,7 @@ public void testProcess_whenGraduation_isUpdated() throws JsonProcessingExceptio when(restUtils.getTokenResponseObject()).thenReturn(tokenObj); when(traxUpdatedPubEventRepository.save(traxUpdatedPubEvent)).thenReturn(traxUpdatedPubEvent); when(traxCommonService.getStudentMasterDataFromTrax(pen)).thenReturn(Arrays.asList(traxStudent)); - when(commonService.getSchoolIdFromRedisCache(mincode)).thenReturn(schoolOfRecordId); + when(commonService.getSchoolIdFromRedisCache(mincode)).thenReturn(schoolId ); traxUpdateService.publishTraxUpdatedEvent(traxUpdateInGradEntity); traxUpdateService.updateStatus(traxUpdateInGradEntity); @@ -358,7 +356,7 @@ public void testProcess_whenGraduation_isUpdated() throws JsonProcessingExceptio public void testProcess_whenStudentStatus_isUpdated() throws JsonProcessingException { String pen = "123456789"; String mincode = "12345678"; - UUID schoolOfRecordId = UUID.randomUUID(); + UUID schoolId = UUID.randomUUID(); TraxUpdateInGradEntity traxUpdateInGradEntity = new TraxUpdateInGradEntity(); traxUpdateInGradEntity.setPen(pen); @@ -370,18 +368,17 @@ public void testProcess_whenStudentStatus_isUpdated() throws JsonProcessingExcep payload.setPen(pen); payload.setStudentStatus("A"); payload.setStudentStatus("A"); - payload.setSchoolOfRecord(mincode); - payload.setSchoolOfRecordId(schoolOfRecordId); + payload.setSchoolOfRecordId(schoolId); String jsonString = JsonUtil.getJsonStringFromObject(payload); ConvGradStudent traxStudent = new ConvGradStudent(); traxStudent.setPen(pen); traxStudent.setStudentGrade("12"); - traxStudent.setSchoolOfRecord(mincode); traxStudent.setGraduationRequirementYear("2018"); traxStudent.setStudentStatus("A"); traxStudent.setArchiveFlag("A"); traxStudent.setStudentCitizenship("C"); + traxStudent.setSchoolOfRecordId(schoolId); TraxUpdatedPubEvent traxUpdatedPubEvent = TraxUpdatedPubEvent.builder() .eventType(EventType.UPD_GRAD.toString()) @@ -401,7 +398,7 @@ public void testProcess_whenStudentStatus_isUpdated() throws JsonProcessingExcep when(restUtils.getTokenResponseObject()).thenReturn(tokenObj); when(traxUpdatedPubEventRepository.save(traxUpdatedPubEvent)).thenReturn(traxUpdatedPubEvent); when(traxCommonService.getStudentMasterDataFromTrax(pen)).thenReturn(Arrays.asList(traxStudent)); - when(commonService.getSchoolIdFromRedisCache(mincode)).thenReturn(schoolOfRecordId); + when(commonService.getSchoolIdFromRedisCache(mincode)).thenReturn(schoolId ); traxUpdateService.publishTraxUpdatedEvent(traxUpdateInGradEntity); traxUpdateService.updateStatus(traxUpdateInGradEntity); @@ -427,7 +424,7 @@ public void testProcess_whenXProgram_isUpdated() throws JsonProcessingException ConvGradStudent traxStudent = new ConvGradStudent(); traxStudent.setPen(pen); traxStudent.setStudentGrade("12"); - traxStudent.setSchoolOfRecord("12345678"); + traxStudent.setSchoolOfRecordId(UUID.randomUUID()); traxStudent.setGraduationRequirementYear("2018"); traxStudent.setStudentStatus("A"); traxStudent.setArchiveFlag("A"); @@ -476,7 +473,7 @@ public void testProcess_whenAssessment_isUpdated() throws JsonProcessingExceptio ConvGradStudent traxStudent = new ConvGradStudent(); traxStudent.setPen(pen); traxStudent.setStudentGrade("12"); - traxStudent.setSchoolOfRecord("12345678"); + traxStudent.setSchoolOfRecordId(UUID.randomUUID()); traxStudent.setGraduationRequirementYear("2018"); traxStudent.setStudentStatus("A"); traxStudent.setArchiveFlag("A"); @@ -525,7 +522,7 @@ public void testProcess_whenCourse_isUpdated() throws JsonProcessingException { ConvGradStudent traxStudent = new ConvGradStudent(); traxStudent.setPen(pen); traxStudent.setStudentGrade("12"); - traxStudent.setSchoolOfRecord("12345678"); + traxStudent.setSchoolOfRecordId(UUID.randomUUID()); traxStudent.setGraduationRequirementYear("2018"); traxStudent.setStudentStatus("A"); traxStudent.setArchiveFlag("A"); @@ -577,7 +574,7 @@ public void testProcess_whenFrenchImmersion_forGrade10_isAdded() throws JsonProc ConvGradStudent traxStudent = new ConvGradStudent(); traxStudent.setPen(pen); traxStudent.setStudentGrade("12"); - traxStudent.setSchoolOfRecord("12345678"); + traxStudent.setSchoolOfRecordId(UUID.randomUUID()); traxStudent.setGraduationRequirementYear("2018"); traxStudent.setStudentStatus("A"); traxStudent.setArchiveFlag("A"); diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/support/TestUtils.java b/api/src/test/java/ca/bc/gov/educ/api/trax/support/TestUtils.java index a3bd8eec..cb9a5f18 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/trax/support/TestUtils.java +++ b/api/src/test/java/ca/bc/gov/educ/api/trax/support/TestUtils.java @@ -27,14 +27,14 @@ public class TestUtils { public static GradStatusEventPayloadDTO createGraduationStatus(boolean isGraduated) { GradStatusEventPayloadDTO graduationStatus = new GradStatusEventPayloadDTO(); - graduationStatus.setPen("123456789 "); + graduationStatus.setPen("123456789"); graduationStatus.setProgram("2018-EN"); graduationStatus.setStudentStatus("CUR"); graduationStatus.setStudentGrade("12"); - graduationStatus.setSchoolOfRecord("111222333"); + graduationStatus.setSchoolOfRecordId(UUID.randomUUID()); graduationStatus.setStudentGrade("12"); if (isGraduated) { - graduationStatus.setSchoolAtGrad("111222333"); + graduationStatus.setSchoolAtGradId(UUID.randomUUID()); graduationStatus.setProgramCompletionDate("2022-06-30"); } return graduationStatus; @@ -167,7 +167,7 @@ public static DistrictContact createDistrictContact() { public static TraxStudentEntity createTraxStudent(boolean isGraduated) { TraxStudentEntity entity = TraxStudentEntity.builder() - .studNo("123456789 ") + .studNo("123456789") .gradReqtYear("2018") .studGrade("12") .mincode("111222333") From f0499fa8a6ee73162258dd1ce9f671771648e78b Mon Sep 17 00:00:00 2001 From: Jinil Sung Date: Tue, 14 Jan 2025 17:03:20 -0800 Subject: [PATCH 2/3] Updated to work on sonar complaints. Updated to work on sonar complaints. --- .../main/java/ca/bc/gov/educ/api/trax/service/EdwService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/service/EdwService.java b/api/src/main/java/ca/bc/gov/educ/api/trax/service/EdwService.java index a0463604..c16bbd3f 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/service/EdwService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/service/EdwService.java @@ -10,8 +10,8 @@ @Service public class EdwService { - final private SnapshotRepository snapshotRepository; - final private SchoolService schoolService; + private final SnapshotRepository snapshotRepository; + private final SchoolService schoolService; public EdwService(SnapshotRepository snapshotRepository, SchoolService schoolService) { this.snapshotRepository = snapshotRepository; From 12ddb9ecc25ad83268e3277a9d5eb247770a1136 Mon Sep 17 00:00:00 2001 From: Jinil Sung Date: Wed, 15 Jan 2025 10:38:35 -0800 Subject: [PATCH 3/3] Compression is enabled. Compression is enabled. --- api/src/main/resources/application.yaml | 5 +++++ tools/config/update-configmap.sh | 1 + 2 files changed, 6 insertions(+) diff --git a/api/src/main/resources/application.yaml b/api/src/main/resources/application.yaml index ce93672e..3b2f7b79 100644 --- a/api/src/main/resources/application.yaml +++ b/api/src/main/resources/application.yaml @@ -98,6 +98,11 @@ server: io: 16 #port: ${HTTP_PORT} max-http-request-header-size: 20000 + compression: + enabled: ${ENABLE_COMPRESSION} + mime-types: application/json,application/xml,text/html,text/xml,text/plain,text/css,text/javascript,application/javascript + min-response-size: 2048 + excluded-user-agents: MSIE 6.0,UCBrowser #API Documentation springdoc: diff --git a/tools/config/update-configmap.sh b/tools/config/update-configmap.sh index 156f7900..a3778ccc 100644 --- a/tools/config/update-configmap.sh +++ b/tools/config/update-configmap.sh @@ -81,6 +81,7 @@ oc create -n "$GRAD_NAMESPACE"-"$envValue" configmap "$APP_NAME"-config-map \ --from-literal=MIN_IDLE='15' \ --from-literal=IDLE_TIMEOUT='600000' \ --from-literal=MAX_LIFETIME='1500000' \ + --from-literal=ENABLE_COMPRESSION="true" \ --dry-run=client -o yaml | oc apply -f - echo Creating config map "$APP_NAME"-flb-sc-config-map