diff --git a/api/pom.xml b/api/pom.xml
index 44ec765a..29757966 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -215,6 +215,11 @@
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ 2.15.2
+
diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/config/GradTraxConfig.java b/api/src/main/java/ca/bc/gov/educ/api/trax/config/GradTraxConfig.java
index ecdfd868..008fa673 100644
--- a/api/src/main/java/ca/bc/gov/educ/api/trax/config/GradTraxConfig.java
+++ b/api/src/main/java/ca/bc/gov/educ/api/trax/config/GradTraxConfig.java
@@ -13,6 +13,8 @@
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.http.codec.json.Jackson2JsonDecoder;
+import org.springframework.http.codec.json.Jackson2JsonEncoder;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.web.client.RestTemplate;
@@ -44,9 +46,16 @@ public RestTemplate restTemplate(RestTemplateBuilder builder) {
@Bean
public WebClient webClient() {
+ //extend buffer to 50MB
+ Integer CODEC_50_MB_SIZE = 50 * 1024 * 1024;
HttpClient client = HttpClient.create();
client.warmup().block();
- return WebClient.builder().build();
+ return WebClient.builder().codecs(clientCodecConfigurer -> {
+ var codec = new Jackson2JsonDecoder();
+ codec.setMaxInMemorySize(CODEC_50_MB_SIZE);
+ clientCodecConfigurer.customCodecs().register(codec);
+ clientCodecConfigurer.customCodecs().register(new Jackson2JsonEncoder());
+ }).build();
}
/**
diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/controller/SchoolController.java b/api/src/main/java/ca/bc/gov/educ/api/trax/controller/SchoolController.java
index 2fc236cf..bd559707 100644
--- a/api/src/main/java/ca/bc/gov/educ/api/trax/controller/SchoolController.java
+++ b/api/src/main/java/ca/bc/gov/educ/api/trax/controller/SchoolController.java
@@ -87,4 +87,13 @@ public ResponseEntity> getSchoolsByParams(
public ResponseEntity checkSchoolExists(@PathVariable String minCode) {
return response.GET(schoolService.existsSchool(minCode));
}
+
+ @GetMapping(EducGradTraxApiConstants.GET_SCHOOLS_BY_SCHOOL_CATEGORY_MAPPING)
+ @PreAuthorize(PermissionsConstants.READ_SCHOOL_DATA)
+ @Operation(summary = "Check school existence by Mincode", description = "Check school existence by Mincode", tags = { "School" })
+ @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"),
+ @ApiResponse(responseCode = "204", description = "NO CONTENT")})
+ public ResponseEntity> getSchoolsBySchoolCategory(@RequestParam(required = false) String schoolCategory, @RequestHeader(name="Authorization") String accessToken) {
+ return response.GET(schoolService.getSchoolsBySchoolCategory(schoolCategory, accessToken.replace(BEARER, "")));
+ }
}
diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/model/entity/TraxUpdatedPubEvent.java b/api/src/main/java/ca/bc/gov/educ/api/trax/model/entity/TraxUpdatedPubEvent.java
index 48b5d0b0..10db141e 100644
--- a/api/src/main/java/ca/bc/gov/educ/api/trax/model/entity/TraxUpdatedPubEvent.java
+++ b/api/src/main/java/ca/bc/gov/educ/api/trax/model/entity/TraxUpdatedPubEvent.java
@@ -1,16 +1,17 @@
package ca.bc.gov.educ.api.trax.model.entity;
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.PastOrPresent;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
-import jakarta.persistence.*;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.PastOrPresent;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.UUID;
@@ -91,7 +92,12 @@ public String getEventPayload() {
* @param eventPayload the event payload
*/
public void setEventPayload(String eventPayload) {
- setEventPayloadBytes(eventPayload.getBytes(StandardCharsets.UTF_8));
+ setEventPayloadBytes(nullSafeEventPayload(eventPayload).getBytes(StandardCharsets.UTF_8));
+ }
+
+ private static String nullSafeEventPayload(String eventPayload) {
+ if(StringUtils.isBlank(eventPayload)) eventPayload = "{}";
+ return eventPayload;
}
/**
@@ -110,7 +116,7 @@ public static class TraxUpdatedPubEventBuilder {
* @return the student event . student event builder
*/
public TraxUpdatedPubEventBuilder eventPayload(String eventPayload) {
- this.eventPayloadBytes = eventPayload.getBytes(StandardCharsets.UTF_8);
+ this.eventPayloadBytes = nullSafeEventPayload(eventPayload).getBytes(StandardCharsets.UTF_8);
return this;
}
}
diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/service/SchoolService.java b/api/src/main/java/ca/bc/gov/educ/api/trax/service/SchoolService.java
index e5b13b19..ed2a268e 100644
--- a/api/src/main/java/ca/bc/gov/educ/api/trax/service/SchoolService.java
+++ b/api/src/main/java/ca/bc/gov/educ/api/trax/service/SchoolService.java
@@ -140,6 +140,21 @@ public boolean existsSchool(String minCode) {
return schoolRepository.countTabSchools(minCode) > 0L;
}
+ public List getSchoolsBySchoolCategory(String schoolCategoryCode, String accessToken) {
+ List result = new ArrayList<>();
+ if(StringUtils.isBlank(schoolCategoryCode)) {
+ return adaptSchools(getCommonSchools(accessToken));
+ } else {
+ List schools = getCommonSchools(accessToken);
+ for (CommonSchool s : schools) {
+ if (StringUtils.equalsIgnoreCase(schoolCategoryCode, s.getSchoolCategoryCode())) {
+ result.add(adaptSchool(s));
+ }
+ }
+ }
+ return result;
+ }
+
public CommonSchool getCommonSchool(String accessToken, String mincode) {
if(StringUtils.isBlank(mincode)) {
return null;
@@ -178,6 +193,22 @@ public List getCommonSchools(String accessToken) {
}
}
+ private School adaptSchool(CommonSchool commonSchool) {
+ School school = new School();
+ school.setMinCode(commonSchool.getDistNo()+commonSchool.getSchlNo());
+ school.setSchoolName(commonSchool.getSchoolName());
+ school.setSchoolCategory(commonSchool.getSchoolCategoryCode());
+ return school;
+ }
+
+ private List adaptSchools(List commonSchools) {
+ List result = new ArrayList<>();
+ for(CommonSchool sch: commonSchools) {
+ result.add(adaptSchool(sch));
+ }
+ return result;
+ }
+
private void adaptSchool(School school, CommonSchool commonSchool) {
if(commonSchool == null) {
return;
diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/util/EducGradTraxApiConstants.java b/api/src/main/java/ca/bc/gov/educ/api/trax/util/EducGradTraxApiConstants.java
index df2e5865..8ac0ae98 100644
--- a/api/src/main/java/ca/bc/gov/educ/api/trax/util/EducGradTraxApiConstants.java
+++ b/api/src/main/java/ca/bc/gov/educ/api/trax/util/EducGradTraxApiConstants.java
@@ -54,6 +54,7 @@ public class EducGradTraxApiConstants {
public static final String GET_DISTRICT_BY_DISTNO_MAPPING = "/{distCode}";
public static final String GET_DISTRICTS_BY_SCHOOL_CATEGORY_MAPPING = "/schoolCategories";
+ public static final String GET_SCHOOLS_BY_SCHOOL_CATEGORY_MAPPING = "/schoolCategories";
public static final String GET_TRANSCRIPT_DEMOG_BY_PEN_MAPPING = "/tran-demog/{pen}";
public static final String GET_TRANSCRIPT_COURSE_BY_PEN_MAPPING = "/tran-courses/{pen}";
diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/controller/SchoolControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/controller/SchoolControllerTest.java
index 9b28eef5..e13f2f37 100644
--- a/api/src/test/java/ca/bc/gov/educ/api/trax/controller/SchoolControllerTest.java
+++ b/api/src/test/java/ca/bc/gov/educ/api/trax/controller/SchoolControllerTest.java
@@ -90,6 +90,16 @@ public void testGetSchoolsByParams() {
Mockito.verify(schoolService).getSchoolsByParams("1234567", "123", null, "accessToken");
}
+ @Test
+ public void testGetSchoolsBySchoolCategoryCode() {
+ final School school = new School();
+ school.setMinCode("1234567");
+ school.setSchoolName("Test School");
+ Mockito.when(schoolService.getSchoolsBySchoolCategory("01", "accessToken")).thenReturn(Arrays.asList(school));
+ schoolController.getSchoolsBySchoolCategory("01", "accessToken");
+ Mockito.verify(schoolService).getSchoolsBySchoolCategory("01", "accessToken");
+ }
+
@Test
public void testCheckSchoolExists() {
Mockito.when(schoolService.existsSchool("1234567")).thenReturn(true);
diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/service/SchoolServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/service/SchoolServiceTest.java
index 5795446d..4a79f385 100644
--- a/api/src/test/java/ca/bc/gov/educ/api/trax/service/SchoolServiceTest.java
+++ b/api/src/test/java/ca/bc/gov/educ/api/trax/service/SchoolServiceTest.java
@@ -364,6 +364,19 @@ void testGetSchoolsByParams() {
assertThat(result).isNotNull();
}
+
+ @Test
+ void testGetSchoolsBySchoolCategoryCode() {
+ mockCommonSchools();
+ var result = schoolService.getSchoolsBySchoolCategory("02", "accessToken");
+ assertThat(result).isNotNull().isNotEmpty();
+ result = schoolService.getSchoolsBySchoolCategory("01", "accessToken");
+ assertThat(result).isNotNull().isEmpty();
+ result = schoolService.getSchoolsBySchoolCategory("", "accessToken");
+ assertThat(result).isNotNull().isNotEmpty();
+
+ }
+
@Test
void testGetSchoolsByParams_params() {
// School
@@ -468,4 +481,18 @@ void mockCommonSchool(String minCode, String schoolName) {
Mockito.when(this.responseMock.bodyToMono(new ParameterizedTypeReference>() {
})).thenReturn(Mono.just(List.of(commonSchool)));
}
+
+ void mockCommonSchools() {
+ CommonSchool commonSchool = new CommonSchool();
+ commonSchool.setSchlNo("1234567");
+ commonSchool.setSchoolName("Test School");
+ commonSchool.setSchoolCategoryCode("02");
+
+ Mockito.when(this.webClient.get()).thenReturn(this.requestHeadersUriMock);
+ Mockito.when(this.requestHeadersUriMock.uri(constants.getAllSchoolSchoolApiUrl())).thenReturn(this.requestHeadersMock);
+ Mockito.when(this.requestHeadersMock.headers(any(Consumer.class))).thenReturn(this.requestHeadersMock);
+ Mockito.when(this.requestHeadersMock.retrieve()).thenReturn(this.responseMock);
+ Mockito.when(this.responseMock.bodyToMono(new ParameterizedTypeReference>() {
+ })).thenReturn(Mono.just(List.of(commonSchool)));
+ }
}