Skip to content

Commit

Permalink
Merge pull request #351 from bcgov/grad-release
Browse files Browse the repository at this point in the history
Grad release 1.23
  • Loading branch information
githubmamatha authored Sep 12, 2024
2 parents a956533 + 01f8812 commit 099d2ea
Show file tree
Hide file tree
Showing 96 changed files with 2,686 additions and 306 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,6 @@ build/

### VS Code ###
.vscode/

### local dev ###
**/application-local.yaml
2 changes: 1 addition & 1 deletion api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>ca.bc.gov.educ</groupId>
<artifactId>educ-grad-trax-api</artifactId>
<version>1.8.57</version>
<version>1.8.58</version>
<name>educ-grad-trax-api</name>
<description>Ministry of Education GRAD TRAX API</description>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
import ca.bc.gov.educ.api.trax.model.dto.DistrictContact;
import ca.bc.gov.educ.api.trax.model.dto.GradStatusEventPayloadDTO;
import ca.bc.gov.educ.api.trax.model.dto.SchoolContact;
import ca.bc.gov.educ.api.trax.model.entity.Event;
import ca.bc.gov.educ.api.trax.model.dto.institute.District;
import ca.bc.gov.educ.api.trax.model.dto.institute.MoveSchoolData;
import ca.bc.gov.educ.api.trax.model.dto.institute.School;
import ca.bc.gov.educ.api.trax.model.entity.EventEntity;
import ca.bc.gov.educ.api.trax.repository.EventRepository;
import ca.bc.gov.educ.api.trax.service.EventService;
import ca.bc.gov.educ.api.trax.util.JsonUtil;
Expand Down Expand Up @@ -48,74 +51,94 @@ public ChoreographEventHandler(final List<EventService> eventServices, final Eve
eventServices.forEach(eventService -> this.eventServiceMap.put(eventService.getEventType(), eventService));
}

public void handleEvent(@NonNull final Event event) {
public void handleEvent(@NonNull final EventEntity eventEntity) {
//only one thread will process all the request. since RDB won't handle concurrent requests.
this.eventExecutor.execute(() -> {
try {
switch (EventType.valueOf(event.getEventType())) {
switch (EventType.valueOf(eventEntity.getEventType())) {
case GRAD_STUDENT_GRADUATED -> {
log.debug("Processing GRAD_STUDENT_GRADUATED event record :: {} ", event);
val studentGraduated = JsonUtil.getJsonObjectFromString(GradStatusEventPayloadDTO.class, event.getEventPayload());
this.eventServiceMap.get(GRAD_STUDENT_GRADUATED.toString()).processEvent(studentGraduated, event);
log.debug("Processing GRAD_STUDENT_GRADUATED eventEntity record :: {} ", eventEntity);
val studentGraduated = JsonUtil.getJsonObjectFromString(GradStatusEventPayloadDTO.class, eventEntity.getEventPayload());
this.eventServiceMap.get(GRAD_STUDENT_GRADUATED.toString()).processEvent(studentGraduated, eventEntity);
}
case GRAD_STUDENT_UPDATED -> {
log.debug("Processing GRAD_STUDENT_UPDATED event record :: {} ", event);
val studentUpdated = JsonUtil.getJsonObjectFromString(GradStatusEventPayloadDTO.class, event.getEventPayload());
this.eventServiceMap.get(GRAD_STUDENT_UPDATED.toString()).processEvent(studentUpdated, event);
log.debug("Processing GRAD_STUDENT_UPDATED eventEntity record :: {} ", eventEntity);
val studentUpdated = JsonUtil.getJsonObjectFromString(GradStatusEventPayloadDTO.class, eventEntity.getEventPayload());
this.eventServiceMap.get(GRAD_STUDENT_UPDATED.toString()).processEvent(studentUpdated, eventEntity);
}
case GRAD_STUDENT_UNDO_COMPLETION -> {
log.debug("Processing GRAD_STUDENT_UNDO_COMPLETION event record :: {} ", event);
val studentUndoCompletion = JsonUtil.getJsonObjectFromString(GradStatusEventPayloadDTO.class, event.getEventPayload());
this.eventServiceMap.get(GRAD_STUDENT_UNDO_COMPLETION.toString()).processEvent(studentUndoCompletion, event);
log.debug("Processing GRAD_STUDENT_UNDO_COMPLETION eventEntity record :: {} ", eventEntity);
val studentUndoCompletion = JsonUtil.getJsonObjectFromString(GradStatusEventPayloadDTO.class, eventEntity.getEventPayload());
this.eventServiceMap.get(GRAD_STUDENT_UNDO_COMPLETION.toString()).processEvent(studentUndoCompletion, eventEntity);
}
case CREATE_SCHOOL_CONTACT -> {
log.debug("Processing {} event record :: {} ", event.getEventType(), event);
val schoolContactCreated = JsonUtil.getJsonObjectFromString(SchoolContact.class, event.getEventPayload());
this.eventServiceMap.get(CREATE_SCHOOL_CONTACT.toString()).processEvent(schoolContactCreated, event);
log.debug("Processing {} eventEntity record :: {} ", eventEntity.getEventType(), eventEntity);
val schoolContactCreated = JsonUtil.getJsonObjectFromString(SchoolContact.class, eventEntity.getEventPayload());
this.eventServiceMap.get(CREATE_SCHOOL_CONTACT.toString()).processEvent(schoolContactCreated, eventEntity);
}
case UPDATE_SCHOOL_CONTACT -> {
log.debug("Processing {} event record :: {} ", event.getEventType(), event);
val schoolContactUpdated = JsonUtil.getJsonObjectFromString(SchoolContact.class, event.getEventPayload());
this.eventServiceMap.get(UPDATE_SCHOOL_CONTACT.toString()).processEvent(schoolContactUpdated, event);
log.debug("Processing {} eventEntity record :: {} ", eventEntity.getEventType(), eventEntity);
val schoolContactUpdated = JsonUtil.getJsonObjectFromString(SchoolContact.class, eventEntity.getEventPayload());
this.eventServiceMap.get(UPDATE_SCHOOL_CONTACT.toString()).processEvent(schoolContactUpdated, eventEntity);
}
case DELETE_SCHOOL_CONTACT -> {
log.debug("Processing {} event record :: {} ", event.getEventType(), event);
val schoolContactDeleted = JsonUtil.getJsonObjectFromString(SchoolContact.class, event.getEventPayload());
this.eventServiceMap.get(DELETE_SCHOOL_CONTACT.toString()).processEvent(schoolContactDeleted, event);
log.debug("Processing {} eventEntity record :: {} ", eventEntity.getEventType(), eventEntity);
val schoolContactDeleted = JsonUtil.getJsonObjectFromString(SchoolContact.class, eventEntity.getEventPayload());
this.eventServiceMap.get(DELETE_SCHOOL_CONTACT.toString()).processEvent(schoolContactDeleted, eventEntity);
}
case CREATE_AUTHORITY_CONTACT -> {
log.debug("Processing {} event record :: {} ", event.getEventType(), event);
val authorityContactCreated = JsonUtil.getJsonObjectFromString(AuthorityContact.class, event.getEventPayload());
this.eventServiceMap.get(CREATE_AUTHORITY_CONTACT.toString()).processEvent(authorityContactCreated, event);
log.debug("Processing {} eventEntity record :: {} ", eventEntity.getEventType(), eventEntity);
val authorityContactCreated = JsonUtil.getJsonObjectFromString(AuthorityContact.class, eventEntity.getEventPayload());
this.eventServiceMap.get(CREATE_AUTHORITY_CONTACT.toString()).processEvent(authorityContactCreated, eventEntity);
}
case UPDATE_AUTHORITY_CONTACT -> {
log.debug("Processing {} event record :: {} ", event.getEventType(), event);
val authorityContactUpdated = JsonUtil.getJsonObjectFromString(AuthorityContact.class, event.getEventPayload());
this.eventServiceMap.get(UPDATE_AUTHORITY_CONTACT.toString()).processEvent(authorityContactUpdated, event);
log.debug("Processing {} eventEntity record :: {} ", eventEntity.getEventType(), eventEntity);
val authorityContactUpdated = JsonUtil.getJsonObjectFromString(AuthorityContact.class, eventEntity.getEventPayload());
this.eventServiceMap.get(UPDATE_AUTHORITY_CONTACT.toString()).processEvent(authorityContactUpdated, eventEntity);
}
case DELETE_AUTHORITY_CONTACT -> {
log.debug("Processing {} event record :: {} ", event.getEventType(), event);
val authorityContactDeleted = JsonUtil.getJsonObjectFromString(AuthorityContact.class, event.getEventPayload());
this.eventServiceMap.get(DELETE_AUTHORITY_CONTACT.toString()).processEvent(authorityContactDeleted, event);
log.debug("Processing {} eventEntity record :: {} ", eventEntity.getEventType(), eventEntity);
val authorityContactDeleted = JsonUtil.getJsonObjectFromString(AuthorityContact.class, eventEntity.getEventPayload());
this.eventServiceMap.get(DELETE_AUTHORITY_CONTACT.toString()).processEvent(authorityContactDeleted, eventEntity);
}
case CREATE_DISTRICT_CONTACT -> {
log.debug("Processing {} event record :: {} ", event.getEventType(), event);
val districtContactCreated = JsonUtil.getJsonObjectFromString(DistrictContact.class, event.getEventPayload());
this.eventServiceMap.get(CREATE_DISTRICT_CONTACT.toString()).processEvent(districtContactCreated, event);
log.debug("Processing {} eventEntity record :: {} ", eventEntity.getEventType(), eventEntity);
val districtContactCreated = JsonUtil.getJsonObjectFromString(DistrictContact.class, eventEntity.getEventPayload());
this.eventServiceMap.get(CREATE_DISTRICT_CONTACT.toString()).processEvent(districtContactCreated, eventEntity);
}
case UPDATE_DISTRICT_CONTACT -> {
log.debug("Processing {} event record :: {} ", event.getEventType(), event);
val districtContactUpdated = JsonUtil.getJsonObjectFromString(DistrictContact.class, event.getEventPayload());
this.eventServiceMap.get(UPDATE_DISTRICT_CONTACT.toString()).processEvent(districtContactUpdated, event);
log.debug("Processing {} eventEntity record :: {} ", eventEntity.getEventType(), eventEntity);
val districtContactUpdated = JsonUtil.getJsonObjectFromString(DistrictContact.class, eventEntity.getEventPayload());
this.eventServiceMap.get(UPDATE_DISTRICT_CONTACT.toString()).processEvent(districtContactUpdated, eventEntity);
}
case DELETE_DISTRICT_CONTACT -> {
log.debug("Processing {} event record :: {} ", event.getEventType(), event);
val districtContactDeleted = JsonUtil.getJsonObjectFromString(DistrictContact.class, event.getEventPayload());
this.eventServiceMap.get(DELETE_DISTRICT_CONTACT.toString()).processEvent(districtContactDeleted, event);
log.debug("Processing {} eventEntity record :: {} ", eventEntity.getEventType(), eventEntity);
val districtContactDeleted = JsonUtil.getJsonObjectFromString(DistrictContact.class, eventEntity.getEventPayload());
this.eventServiceMap.get(DELETE_DISTRICT_CONTACT.toString()).processEvent(districtContactDeleted, eventEntity);
}
case UPDATE_SCHOOL -> {
val schoolUpdated = JsonUtil.getJsonObjectFromString(School.class, eventEntity.getEventPayload());
this.eventServiceMap.get(UPDATE_SCHOOL.toString()).processEvent(schoolUpdated, eventEntity);
}
case CREATE_SCHOOL -> {
val schoolCreated = JsonUtil.getJsonObjectFromString(School.class, eventEntity.getEventPayload());
this.eventServiceMap.get(CREATE_SCHOOL.toString()).processEvent(schoolCreated, eventEntity);
}
case CREATE_DISTRICT -> {
val districtCreated = JsonUtil.getJsonObjectFromString(District.class, eventEntity.getEventPayload());
this.eventServiceMap.get(CREATE_DISTRICT.toString()).processEvent(districtCreated, eventEntity);
}
case MOVE_SCHOOL -> {
val schoolMoved = JsonUtil.getJsonObjectFromString(MoveSchoolData.class, eventEntity.getEventPayload());
this.eventServiceMap.get(MOVE_SCHOOL.toString()).processEvent(schoolMoved, eventEntity);
}
case UPDATE_DISTRICT -> {
val districtUpdated = JsonUtil.getJsonObjectFromString(District.class, eventEntity.getEventPayload());
this.eventServiceMap.get(UPDATE_DISTRICT.toString()).processEvent(districtUpdated, eventEntity);
}
default -> {
log.warn("Silently ignoring event: {}", event);
this.eventRepository.findByEventId(event.getEventId()).ifPresent(existingEvent -> {
log.warn("Silently ignoring eventEntity: {}", eventEntity);
this.eventRepository.findByEventId(eventEntity.getEventId()).ifPresent(existingEvent -> {
existingEvent.setEventStatus(EventStatus.PROCESSED.toString());
existingEvent.setUpdateDate(LocalDateTime.now());
this.eventRepository.save(existingEvent);
Expand All @@ -124,7 +147,7 @@ public void handleEvent(@NonNull final Event event) {
}
}
} catch (final Exception exception) {
log.error("Exception while processing event :: {}", event, exception);
log.error("Exception while processing eventEntity :: {}", eventEntity, exception);
}
});

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ca.bc.gov.educ.api.trax.constant;

/**
* Activity codes are for labeling types of events processed
*/
public enum EventActivityCode {
INSTITUTE_EVENT, PEN_EVENT, COREG_EVENT
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ca.bc.gov.educ.api.trax.constant;

/**
* The enum Event outcome.
* The enum EventEntity outcome.
*/
public enum EventOutcome {
/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ca.bc.gov.educ.api.trax.constant;

/**
* The enum Event status.
* The enum EventEntity status.
*/
public enum EventStatus {
/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package ca.bc.gov.educ.api.trax.constant;

/**
* The enum Event type.
* The enum EventEntity type.
*/
public enum EventType {
/* ===========================================================
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ public enum Topics {
* TraxUpdate events topic.
*/
TRAX_UPDATE_EVENT_TOPIC,
INSTITUTE_EVENTS_TOPIC
INSTITUTE_EVENTS_TOPIC,
COREG_EVENTS_TOPIC,
PEN_EVENTS_TOPIC

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import ca.bc.gov.educ.api.trax.model.dto.GradProvince;
import ca.bc.gov.educ.api.trax.service.CodeService;
import ca.bc.gov.educ.api.trax.util.EducGradTraxApiConstants;
import ca.bc.gov.educ.api.trax.util.GradValidation;
import ca.bc.gov.educ.api.trax.util.PermissionsConstants;
import ca.bc.gov.educ.api.trax.util.ResponseHelper;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import ca.bc.gov.educ.api.trax.model.dto.District;
import ca.bc.gov.educ.api.trax.service.DistrictService;
import ca.bc.gov.educ.api.trax.util.EducGradTraxApiConstants;
import ca.bc.gov.educ.api.trax.util.GradValidation;
import ca.bc.gov.educ.api.trax.util.PermissionsConstants;
import ca.bc.gov.educ.api.trax.util.ResponseHelper;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
Expand Down Expand Up @@ -48,7 +47,7 @@ public ResponseEntity<District> getDistrictDetails(@PathVariable String distCode

@GetMapping(EducGradTraxApiConstants.GRAD_DISTRICT_URL_MAPPING_V1 + EducGradTraxApiConstants.GET_DISTRICTS_BY_SCHOOL_CATEGORY_MAPPING)
@PreAuthorize(PermissionsConstants.READ_SCHOOL_DATA)
@Operation(summary = "Check school existence by Mincode", description = "Check school existence by Mincode", tags = { "School" })
@Operation(summary = "Get Districts by SchoolCategory", description = "Get Districts by SchoolCategory", tags = { "School" })
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "204", description = "NO CONTENT")})
public ResponseEntity<List<District>> getDistrictBySchoolCategory(@RequestParam(required = false) String schoolCategory) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public ResponseEntity<List<CommonSchool>> getAllCommonSchool() {

@GetMapping(EducGradTraxApiConstants.GRAD_SCHOOL_URL_MAPPING_V1 + EducGradTraxApiConstants.GET_COMMON_SCHOOL_BY_CODE_MAPPING)
@PreAuthorize(PermissionsConstants.READ_SCHOOL_DATA)
@Operation(summary = "Find a Common School by Mincode", description = "Get a Common School by Mincode", tags = { "School" })
@Operation(summary = "Find a Common School by Mincode", description = "Find a Common School by Mincode", tags = { "School" })
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "404", description = "NOT FOUND")})
public ResponseEntity<CommonSchool> getCommonSchool(@PathVariable String minCode) {
Expand Down Expand Up @@ -114,7 +114,7 @@ public ResponseEntity<Boolean> checkSchoolExists(@PathVariable String minCode) {

@GetMapping(EducGradTraxApiConstants.GRAD_SCHOOL_URL_MAPPING_V1 + 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" })
@Operation(summary = "Get schools by SchoolCategory", description = "Get schools by SchoolCategory", tags = { "School" })
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "204", description = "NO CONTENT")})
public ResponseEntity<List<School>> getSchoolsBySchoolCategory(@RequestParam(required = false) String schoolCategory, @RequestHeader(name="Authorization") String accessToken) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
Expand Down
Loading

0 comments on commit 099d2ea

Please sign in to comment.