Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: Remove preprocess that filters out deleted entitites in tracker stores [DHIS2-18883] #19921

Merged
merged 3 commits into from
Feb 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,8 @@
package org.hisp.dhis.program.hibernate;

import jakarta.persistence.EntityManager;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -64,17 +59,6 @@ public HibernateEventStore(
super(entityManager, jdbcTemplate, publisher, Event.class, aclService, false);
}

@Override
protected void preProcessPredicates(
CriteriaBuilder builder, List<Function<Root<Event>, Predicate>> predicates) {
predicates.add(root -> builder.equal(root.get("deleted"), false));
}

@Override
protected Event postProcessObject(Event event) {
return (event == null || event.isDeleted()) ? null : event;
}

@Override
public void mergeEventDataValuesWithDataElement(
@Nonnull Collection<UID> sourceDataElements, @Nonnull UID targetDataElement) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ public TrackedEntity validateTrackedEntity(UID uid, UserDetails user)

// TODO(tracker) Are these validations enough? Should we check for ownership too?
TrackedEntity trackedEntity = manager.get(TrackedEntity.class, uid.getValue());
if (trackedEntity == null) {
if (trackedEntity == null || trackedEntity.isDeleted()) {
throw new BadRequestException("Tracked entity is specified but does not exist: " + uid);
}
trackedEntityAuditService.addTrackedEntityAudit(READ, user.getUsername(), trackedEntity);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ public class PageParams {
private static final int DEFAULT_PAGE = 1;
private static final int DEFAULT_PAGE_SIZE = 50;

public static PageParams single() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just throwing this out there. I have see "first()" used in libs, that could be a potential name here as well. No strong opinions

return new PageParams(1, 1, false);
}

/** The page number to be returned. */
final int page;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,23 +81,21 @@ class DefaultEnrollmentService implements EnrollmentService {
@Nonnull
@Override
public Enrollment getEnrollment(@Nonnull UID uid) throws ForbiddenException, NotFoundException {
return getEnrollment(uid, EnrollmentParams.FALSE, false);
return getEnrollment(uid, EnrollmentParams.FALSE);
}

@Nonnull
@Override
public Enrollment getEnrollment(
@Nonnull UID uid, @Nonnull EnrollmentParams params, boolean includeDeleted)
public Enrollment getEnrollment(@Nonnull UID uid, @Nonnull EnrollmentParams params)
throws NotFoundException, ForbiddenException {
Page<Enrollment> enrollments;
try {
EnrollmentOperationParams operationParams =
EnrollmentOperationParams.builder()
.enrollments(Set.of(uid))
.enrollmentParams(params)
.includeDeleted(includeDeleted)
.build();
enrollments = getEnrollments(operationParams, new PageParams(1, 1, false));
enrollments = getEnrollments(operationParams, PageParams.single());
} catch (BadRequestException e) {
throw new IllegalArgumentException(
"this must be a bug in how the EnrollmentOperationParams are built");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public interface EnrollmentService {
Enrollment getEnrollment(UID uid) throws ForbiddenException, NotFoundException;

@Nonnull
Enrollment getEnrollment(UID uid, EnrollmentParams params, boolean includeDeleted)
Enrollment getEnrollment(UID uid, EnrollmentParams params)
throws NotFoundException, ForbiddenException;

/** Get all enrollments matching given params. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,10 @@
import static org.hisp.dhis.util.DateUtils.toLongGmtDate;

import jakarta.persistence.EntityManager;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.StringJoiner;
import java.util.function.Function;
import java.util.function.LongSupplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
Expand Down Expand Up @@ -296,17 +292,6 @@ String getFullQuery() {
}
}

@Override
protected void preProcessPredicates(
CriteriaBuilder builder, List<Function<Root<Enrollment>, Predicate>> predicates) {
predicates.add(root -> builder.equal(root.get("deleted"), false));
}

@Override
protected Enrollment postProcessObject(Enrollment enrollment) {
return (enrollment == null || enrollment.isDeleted()) ? null : enrollment;
}

public Set<String> getOrderableFields() {
return ORDERABLE_FIELDS;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ private FileResource getFileResourceMetadata(UID eventUid, UID dataElementUid)
.eventParams(EventParams.FALSE)
.dataElementFilters(Map.of(dataElementUid, List.of()))
.build();
events = getEvents(operationParams, new PageParams(1, 1, false));
events = getEvents(operationParams, PageParams.single());
} catch (BadRequestException e) {
throw new IllegalArgumentException(
"this must be a bug in how the EventOperationParams are built");
Expand Down Expand Up @@ -180,7 +180,7 @@ public Event getEvent(
.eventParams(eventParams)
.idSchemeParams(idSchemeParams)
.build();
events = getEvents(operationParams, new PageParams(1, 1, false));
events = getEvents(operationParams, PageParams.single());
} catch (BadRequestException e) {
throw new IllegalArgumentException(
"this must be a bug in how the EventOperationParams are built");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ public Relationship getRelationship(@Nonnull UID uid)
throws ForbiddenException, NotFoundException {
Relationship relationship = relationshipStore.getByUid(uid.getValue());

if (relationship == null) {
if (relationship == null || relationship.isDeleted()) {
throw new NotFoundException(Relationship.class, uid);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.function.LongSupplier;
import java.util.stream.Stream;
import javax.annotation.Nonnull;
Expand Down Expand Up @@ -379,15 +378,4 @@ private Page<Relationship> getPage(
public Set<String> getOrderableFields() {
return ORDERABLE_FIELDS;
}

@Override
protected void preProcessPredicates(
CriteriaBuilder builder, List<Function<Root<Relationship>, Predicate>> predicates) {
predicates.add(root -> builder.equal(root.get("deleted"), false));
}

@Override
protected Relationship postProcessObject(Relationship relationship) {
return (relationship == null || relationship.isDeleted()) ? null : relationship;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ private FileResource getFileResourceMetadata(
UID trackedEntityUid, UID attributeUid, @CheckForNull UID programUid)
throws NotFoundException {
TrackedEntity trackedEntity = trackedEntityStore.getByUid(trackedEntityUid.getValue());
if (trackedEntity == null) {
if (trackedEntity == null || trackedEntity.isDeleted()) {
throw new NotFoundException(TrackedEntity.class, trackedEntityUid.getValue());
}

Expand Down Expand Up @@ -238,7 +238,7 @@ private TrackedEntity getTrackedEntity(
UID uid, Program program, TrackedEntityParams params, UserDetails user)
throws NotFoundException, ForbiddenException, BadRequestException {
TrackedEntity trackedEntity = trackedEntityStore.getByUid(uid.getValue());
if (trackedEntity == null) {
if (trackedEntity == null || trackedEntity.isDeleted()) {
throw new NotFoundException(TrackedEntity.class, uid);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,13 @@
import static org.hisp.dhis.util.DateUtils.toLongGmtDate;

import jakarta.persistence.EntityManager;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.LongSupplier;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -1077,15 +1073,4 @@ private String getFromSubQueryLimitAndOffset(
.toString();
}
}

@Override
protected void preProcessPredicates(
CriteriaBuilder builder, List<Function<Root<TrackedEntity>, Predicate>> predicates) {
predicates.add(root -> builder.equal(root.get("deleted"), false));
}

@Override
protected TrackedEntity postProcessObject(TrackedEntity trackedEntity) {
return (trackedEntity == null || trackedEntity.isDeleted()) ? null : trackedEntity;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,11 @@ public void emptyDatabase() {
emptyTable("eventchangelog");
emptyTable("trackedentityprogramowner");

emptyTable("programmessage_phonenumbers");
emptyTable("programmessage_emailaddresses");
emptyTable("programmessage_deliverychannels");
emptyTable("programmessage");

emptyTable("event_notes");
emptyTable("enrollment_notes");
emptyTable("note");
Expand Down
Loading
Loading