diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/filter/FilterSpecifications.java b/api/src/main/java/ca/bc/gov/educ/api/trax/filter/FilterSpecifications.java index 16f498c7..0edbd4aa 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/filter/FilterSpecifications.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/filter/FilterSpecifications.java @@ -78,8 +78,15 @@ public void initSpecifications() { map.put(FilterOperation.IN, filterCriteria -> (root, criteriaQuery, criteriaBuilder) -> root .get(filterCriteria.getFieldName()).in(filterCriteria.getConvertedValues())); - map.put(FilterOperation.NOT_IN, filterCriteria -> (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder - .not(root.get(filterCriteria.getFieldName()).in(filterCriteria.getConvertedValues()))); + map.put(FilterOperation.NOT_IN, filterCriteria -> (root, criteriaQuery, criteriaBuilder) -> { + if (filterCriteria.getFieldName().contains(".")) { + String[] splits = filterCriteria.getFieldName().split("\\."); + if (splits.length == 2) { + return criteriaBuilder.or(criteriaBuilder.not(root.join(splits[0]).get(splits[1]).in(filterCriteria.getConvertedValues())), criteriaBuilder.isNull(root.join(splits[0]).get(splits[1]))); + } + } + return criteriaBuilder.or(criteriaBuilder.not(root.get(filterCriteria.getFieldName()).in(filterCriteria.getConvertedValues())), criteriaBuilder.isNull(root.get(filterCriteria.getFieldName()))); + }); map.put(FilterOperation.BETWEEN, filterCriteria -> (root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.between( diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/service/DistrictContactUpdatedService.java b/api/src/main/java/ca/bc/gov/educ/api/trax/service/DistrictContactUpdatedService.java index 2b94c3eb..2921141f 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/service/DistrictContactUpdatedService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/service/DistrictContactUpdatedService.java @@ -26,7 +26,7 @@ public void processEvent(final DistrictContact districtContact, EventEntity even log.debug("Processing District Contact Deleted"); try{ districtService.updateDistrictCache(districtContact.getDistrictId()); - this.updateEvent(eventEntity, true); + this.updateEvent(eventEntity, false); } catch (ServiceException e) { // do not mark eventEntity as processed log.error(e.getMessage()); diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/service/EventHistoryService.java b/api/src/main/java/ca/bc/gov/educ/api/trax/service/EventHistoryService.java index 737a40a3..819ecbbb 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/service/EventHistoryService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/service/EventHistoryService.java @@ -1,5 +1,6 @@ package ca.bc.gov.educ.api.trax.service; +import ca.bc.gov.educ.api.trax.constant.EventType; import ca.bc.gov.educ.api.trax.exception.EntityNotFoundException; import ca.bc.gov.educ.api.trax.exception.InvalidParameterException; import ca.bc.gov.educ.api.trax.exception.ServiceException; @@ -32,6 +33,7 @@ import java.time.Duration; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; @@ -87,15 +89,16 @@ public Specification setSpecificationAndSortCriteria(String Specification eventHistoryEntitySpecification = null; try { RequestUtil.getSortCriteria(sortCriteriaJson, objectMapper, sorts); + int i = 0; if (StringUtils.isNotBlank(searchCriteriaListJson)) { List searches = objectMapper.readValue(searchCriteriaListJson, new TypeReference<>() { }); - int i = 0; for (var search : searches) { eventHistoryEntitySpecification = getSpecifications(eventHistoryEntitySpecification, i, search); i++; } } + eventHistoryEntitySpecification = getSpecifications(eventHistoryEntitySpecification, i, getDefaultSearchCriteria()); } catch (JsonProcessingException e) { throw new TraxAPIRuntimeException(e.getMessage()); } @@ -123,6 +126,17 @@ private Specification getEventHistorySpecification(List ignorableEvents = List.of(EventType.CREATE_SCHOOL_CONTACT.name(), EventType.UPDATE_SCHOOL_CONTACT.name(), EventType.DELETE_SCHOOL_CONTACT.name(), EventType.CREATE_DISTRICT_CONTACT.name(), EventType.UPDATE_DISTRICT_CONTACT.name(), EventType.DELETE_DISTRICT_CONTACT.name()); + SearchCriteria searchCriteria = new SearchCriteria(); + searchCriteria.setCondition(Condition.AND); + searchCriteria.setValueType(ValueType.STRING); + searchCriteria.setOperation(FilterOperation.NOT_IN); + searchCriteria.setValue(String.join(",", ignorableEvents)); + searchCriteria.setKey("event.eventType"); + return Search.builder().searchCriteriaList(new ArrayList<>(List.of(searchCriteria))).condition(Condition.AND).build(); + } + private Specification getSpecificationPerGroup(Specification eventHistoryEntitySpecification, int i, SearchCriteria criteria, Specification typeSpecification) { if (i == 0) { eventHistoryEntitySpecification = Specification.where(typeSpecification); @@ -163,7 +177,6 @@ private Specification getTypeSpecification(String key, Filte return schoolEntitySpecification; } - @Transactional(propagation = Propagation.SUPPORTS) public CompletableFuture> findAll(Specification eventHistorySpecs, final Integer pageNumber, final Integer pageSize, final List sorts) { log.trace("In find all query: {}", eventHistorySpecs); diff --git a/api/src/main/java/ca/bc/gov/educ/api/trax/service/SchoolContactUpdatedService.java b/api/src/main/java/ca/bc/gov/educ/api/trax/service/SchoolContactUpdatedService.java index 5f2bea7a..d0659495 100644 --- a/api/src/main/java/ca/bc/gov/educ/api/trax/service/SchoolContactUpdatedService.java +++ b/api/src/main/java/ca/bc/gov/educ/api/trax/service/SchoolContactUpdatedService.java @@ -25,7 +25,7 @@ public void processEvent(final SchoolContact schoolContact, EventEntity eventEnt try{ SchoolDetail schoolDetail = this.schoolService.getSchoolDetailByIdFromInstituteApi(schoolContact.getSchoolId()); schoolService.updateSchoolCache(schoolDetail); - this.updateEvent(eventEntity, schoolDetail.isCanIssueTranscripts()); + this.updateEvent(eventEntity, false); } catch (ServiceException e) { // do not mark eventEntity as processed log.error(e.getMessage()); diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/controller/EventHistoryControllerTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/controller/EventHistoryControllerTest.java index 1b3eb304..5324af6e 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/trax/controller/EventHistoryControllerTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/trax/controller/EventHistoryControllerTest.java @@ -156,7 +156,7 @@ void testUpdateEventHistory_givenInvalidId_shouldReturnStatusNotFound() throws E } private EventHistory createEventHistoryData() throws JsonProcessingException { - var event = TestUtils.createEvent("DELETE_DISTRICT_CONTACT", TestUtils.createDistrictContact(), LocalDateTime.now(), eventRepository); + var event = TestUtils.createEvent("UPDATE_AUTHORITY_CONTACT", TestUtils.createAuthorityContact(), LocalDateTime.now(), eventRepository); var eventHistory = TestUtils.createEventHistory(event, LocalDateTime.now(), eventHistoryRepository); return mapper.toStructure(eventHistory); } diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/service/SchoolContactUpdatedServiceTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/service/SchoolContactUpdatedServiceTest.java index 1cb68d50..f73973d8 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/trax/service/SchoolContactUpdatedServiceTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/trax/service/SchoolContactUpdatedServiceTest.java @@ -62,7 +62,7 @@ public void testProcessEvent_givenUPDATE_SCHOOL_CONTACT_EventWithPassingHistoryC when(schoolServiceMock.getSchoolDetailByIdFromInstituteApi(request.getSchoolId())).thenReturn(schoolDetails); this.schoolContactUpdatedService.processEvent(request, event); var result = this.replicationTestUtils.getEventHistoryRepository().findByEvent_ReplicationEventId(event.getReplicationEventId()); - Assert.assertTrue(result.isPresent()); + Assert.assertFalse(result.isPresent()); } @Test diff --git a/api/src/test/java/ca/bc/gov/educ/api/trax/util/BaseEventHistoryTest.java b/api/src/test/java/ca/bc/gov/educ/api/trax/util/BaseEventHistoryTest.java index 8efb7177..37620d86 100644 --- a/api/src/test/java/ca/bc/gov/educ/api/trax/util/BaseEventHistoryTest.java +++ b/api/src/test/java/ca/bc/gov/educ/api/trax/util/BaseEventHistoryTest.java @@ -41,9 +41,9 @@ protected EventEntity createEventData() { .eventId(UUID.randomUUID()) .eventPayload(""" { - "schoolContactId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "schoolId": "d3b07384-d9a0-4c1e-8b0e-6e2b6b7b8b8b", - "schoolContactTypeCode": "string", + "authorityContactId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "independentAuthorityId": "d3b07384-d9a0-4c1e-8b0e-6e2b6b7b8b8b", + "authorityContactTypeCode": "string", "phoneNumber": "string", "jobTitle": "string", "phoneExtension": "string", @@ -56,8 +56,8 @@ protected EventEntity createEventData() { "expiryDate": "string" }""") .eventStatus("PROCESSED") - .eventType("CREATE_SCHOOL_CONTACT") - .eventOutcome("SCHOOL_CONTACT_CREATED") + .eventType("CREATE_AUTHORITY_CONTACT") + .eventOutcome("AUTHORITY_CONTACT_CREATED") .createUser(USER) .createDate(LocalDateTime.now()) .updateUser(USER)