use of ca.bc.gov.educ.penreg.api.constants.EventType in project EDUC-PEN-REG-BATCH-API by bcgov.
the class PenReqBatchNewPenOrchestrator method addPossibleMatchesToStudent.
private void addPossibleMatchesToStudent(final Event event, final Saga saga, final PenRequestBatchUserActionsSagaData penRequestBatchUserActionsSagaData) throws JsonProcessingException {
final String studentID;
// this scenario might occur during replay when message could not reach batch api from student-api and batch api retried the same flow.
if (event.getEventOutcome() == STUDENT_ALREADY_EXIST) {
studentID = event.getEventPayload();
} else {
final Student student = JsonUtil.getJsonObjectFromString(Student.class, event.getEventPayload());
studentID = student.getStudentID();
}
penRequestBatchUserActionsSagaData.setStudentID(studentID);
final SagaEvent eventStates = this.createEventState(saga, event.getEventType(), event.getEventOutcome(), event.getEventPayload());
// set current event as saga state.
saga.setSagaState(ADD_POSSIBLE_MATCH.toString());
// resave the updated saga data.
saga.setPayload(JsonUtil.getJsonStringFromObject(penRequestBatchUserActionsSagaData));
this.getSagaService().updateAttachedSagaWithEvents(saga, eventStates);
final var possibleMatches = penRequestBatchUserActionsSagaData.getMatchedStudentIDList().stream().map(matchedStudentID -> PossibleMatch.builder().createUser(penRequestBatchUserActionsSagaData.getCreateUser()).updateUser(penRequestBatchUserActionsSagaData.getUpdateUser()).studentID(studentID).matchedStudentID(matchedStudentID).matchReasonCode(TwinReasonCodes.PENCREATE.getCode()).build()).collect(Collectors.toList());
final Event nextEvent = Event.builder().sagaId(saga.getSagaId()).eventType(ADD_POSSIBLE_MATCH).replyTo(this.getTopicToSubscribe()).eventPayload(JsonUtil.getJsonStringFromObject(possibleMatches)).build();
this.postMessageToTopic(PEN_MATCH_API_TOPIC.toString(), nextEvent);
log.info("message sent to PEN_MATCH_API_TOPIC for ADD_POSSIBLE_MATCH Event.");
}
use of ca.bc.gov.educ.penreg.api.constants.EventType in project EDUC-PEN-REG-BATCH-API by bcgov.
the class BaseOrchestrator method replayFromLastEvent.
/**
* This method will restart the saga process from where it was left the last time. which could occur due to various reasons
*
* @param saga the model object.
* @param eventStates the event states corresponding to the saga
* @param t the payload string as an object
* @throws InterruptedException if thread is interrupted.
* @throws TimeoutException if connection to messaging system times out.
* @throws IOException if there is connectivity problem
*/
private void replayFromLastEvent(final Saga saga, final List<SagaEvent> eventStates, final T t) throws InterruptedException, TimeoutException, IOException {
val sagaEventOptional = this.findTheLastEventOccurred(eventStates);
if (sagaEventOptional.isPresent()) {
val sagaEvent = sagaEventOptional.get();
log.trace(sagaEventOptional.toString());
final EventType currentEvent = EventType.valueOf(sagaEvent.getSagaEventState());
final EventOutcome eventOutcome = EventOutcome.valueOf(sagaEvent.getSagaEventOutcome());
final Event event = Event.builder().eventOutcome(eventOutcome).eventType(currentEvent).eventPayload(sagaEvent.getSagaEventResponse()).build();
final Optional<SagaEventState<T>> sagaEventState = this.findNextSagaEventState(currentEvent, eventOutcome, t);
if (sagaEventState.isPresent()) {
log.trace(SYSTEM_IS_GOING_TO_EXECUTE_NEXT_EVENT_FOR_CURRENT_EVENT, sagaEventState.get().getNextEventType(), event.toString(), saga.getSagaId());
this.invokeNextEvent(event, saga, t, sagaEventState.get());
}
}
}
use of ca.bc.gov.educ.penreg.api.constants.EventType in project EDUC-PEN-REG-BATCH-API by bcgov.
the class PenReqBatchUserMatchOrchestrator method addPossibleMatchToStudent.
/**
* this method expects that the twin ids provided in the payload here is already validated.
* Add twin records to student.
*
* @param event the event
* @param saga the saga
* @param penRequestBatchUserActionsSagaData the pen request batch user actions saga data
* @throws JsonProcessingException the json processing exception
*/
protected void addPossibleMatchToStudent(final Event event, final Saga saga, final PenRequestBatchUserActionsSagaData penRequestBatchUserActionsSagaData) throws JsonProcessingException {
final SagaEvent eventStates = this.createEventState(saga, event.getEventType(), event.getEventOutcome(), event.getEventPayload());
// set current event as saga state.
saga.setSagaState(ADD_POSSIBLE_MATCH.toString());
this.getSagaService().updateAttachedSagaWithEvents(saga, eventStates);
final var possibleMatches = penRequestBatchUserActionsSagaData.getMatchedStudentIDList().stream().map(matchedStudentID -> PossibleMatch.builder().createUser(penRequestBatchUserActionsSagaData.getCreateUser()).updateUser(penRequestBatchUserActionsSagaData.getUpdateUser()).studentID(penRequestBatchUserActionsSagaData.getStudentID()).matchedStudentID(matchedStudentID).matchReasonCode(TwinReasonCodes.PEN_MATCH.getCode()).build()).collect(Collectors.toList());
final Event nextEvent = Event.builder().sagaId(saga.getSagaId()).eventType(ADD_POSSIBLE_MATCH).replyTo(this.getTopicToSubscribe()).eventPayload(JsonUtil.getJsonStringFromObject(possibleMatches)).build();
this.postMessageToTopic(PEN_MATCH_API_TOPIC.toString(), nextEvent);
log.info("message sent to PEN_MATCH_API_TOPIC for ADD_POSSIBLE_MATCH Event.");
}
Aggregations