Added date filter in pagination endpoint
This commit is contained in:
@@ -2,7 +2,6 @@ package net.gepafin.tendermanagement.dao;
|
|||||||
|
|
||||||
import jakarta.persistence.criteria.*;
|
import jakarta.persistence.criteria.*;
|
||||||
import net.gepafin.tendermanagement.config.Translator;
|
import net.gepafin.tendermanagement.config.Translator;
|
||||||
import net.gepafin.tendermanagement.config.jwt.TokenProvider;
|
|
||||||
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
||||||
import net.gepafin.tendermanagement.entities.*;
|
import net.gepafin.tendermanagement.entities.*;
|
||||||
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
|
import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum;
|
||||||
@@ -47,6 +46,7 @@ import java.io.ByteArrayOutputStream;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.Timestamp;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
@@ -54,6 +54,7 @@ import java.time.LocalDate;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.time.format.DateTimeParseException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@@ -63,6 +64,7 @@ import java.util.zip.ZipEntry;
|
|||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.isEmpty;
|
import static org.apache.commons.lang3.StringUtils.isEmpty;
|
||||||
|
import static org.hibernate.validator.internal.engine.messageinterpolation.el.RootResolver.FORMATTER;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class ApplicationDao {
|
public class ApplicationDao {
|
||||||
@@ -1592,7 +1594,7 @@ public class ApplicationDao {
|
|||||||
if (fieldPath != null) {
|
if (fieldPath != null) {
|
||||||
applyStringFilter(fieldPath, criteriaBuilder, predicates, value, matchMode);
|
applyStringFilter(fieldPath, criteriaBuilder, predicates, value, matchMode);
|
||||||
applyNumberFilter(fieldPath, criteriaBuilder, predicates, value, matchMode);
|
applyNumberFilter(fieldPath, criteriaBuilder, predicates, value, matchMode);
|
||||||
// applyDateFilter(fieldPath, criteriaBuilder, predicates, value, matchMode); // Date filter is commented
|
applyDateFilter(fieldPath, criteriaBuilder, predicates, value, matchMode,root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1603,7 +1605,7 @@ public class ApplicationDao {
|
|||||||
if (value instanceof String) {
|
if (value instanceof String) {
|
||||||
String valueStr = (String) value;
|
String valueStr = (String) value;
|
||||||
if (fieldPath.getJavaType().equals(String.class)) {
|
if (fieldPath.getJavaType().equals(String.class)) {
|
||||||
MatchModeEnum mode = MatchModeEnum.valueOf(matchMode.getValue());
|
MatchModeEnum mode = MatchModeEnum.fromObject(matchMode.getValue());
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case CONTAINS ->
|
case CONTAINS ->
|
||||||
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(fieldPath.as(String.class)), "%" + valueStr.toLowerCase() + "%"));
|
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(fieldPath.as(String.class)), "%" + valueStr.toLowerCase() + "%"));
|
||||||
@@ -1623,31 +1625,36 @@ public class ApplicationDao {
|
|||||||
if (value instanceof Number) {
|
if (value instanceof Number) {
|
||||||
numberValue = (Number) value;
|
numberValue = (Number) value;
|
||||||
}
|
}
|
||||||
MatchModeEnum mode = MatchModeEnum.valueOf(matchMode.getValue());
|
MatchModeEnum mode = MatchModeEnum.fromObject(matchMode.getValue());
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case EQUALS -> predicates.add(criteriaBuilder.equal(fieldPath, numberValue));
|
case EQUALS -> predicates.add(criteriaBuilder.equal(fieldPath, numberValue));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
private void applyDateFilter(Path<?> fieldPath, CriteriaBuilder criteriaBuilder, List<Predicate> predicates, Object value, MatchModeEnum matchMode) {
|
|
||||||
if (fieldPath.getJavaType().equals(LocalDateTime.class)) {
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
|
|
||||||
LocalDateTime dateValue = LocalDateTime.parse(value.toString(), formatter);
|
|
||||||
|
|
||||||
Expression<String> fieldAsString = criteriaBuilder.function("TO_CHAR", String.class, fieldPath, criteriaBuilder.literal("YYYY-MM-DD HH24:MI:SS.MS"));
|
public static LocalDateTime parseStringToLocalDateTime(String timestampStr) {
|
||||||
|
// Use ISO_LOCAL_DATE_TIME to parse the input string
|
||||||
|
return LocalDateTime.parse(timestampStr, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
|
||||||
|
}
|
||||||
|
|
||||||
MatchModeEnum mode = MatchModeEnum.valueOf(matchMode.getValue());
|
private void applyDateFilter(Path<?> fieldPath, CriteriaBuilder criteriaBuilder, List<Predicate> predicates, Object value, MatchModeEnum matchMode, Root<?> root) {
|
||||||
switch (mode) {
|
if (fieldPath.getJavaType().equals(LocalDateTime.class)) {
|
||||||
|
LocalDateTime testDateTime = parseStringToLocalDateTime(value.toString());
|
||||||
|
MatchModeEnum mode = MatchModeEnum.fromObject(matchMode.getValue());
|
||||||
|
|
||||||
case EQUALS -> predicates.add(criteriaBuilder.equal(fieldAsString, value.toString()));
|
|
||||||
case BEFORE -> predicates.add(criteriaBuilder.lessThan(fieldPath.as(LocalDateTime.class), dateValue));
|
switch (mode) {
|
||||||
case AFTER -> predicates.add(criteriaBuilder.greaterThan(fieldPath.as(LocalDateTime.class), dateValue));
|
// case DATEIS -> predicates.add(criteriaBuilder.equal(fieldPath.as(Timestamp.class), Timestamp.valueOf(testDateTime)));
|
||||||
|
case DATEISNOT -> predicates.add(criteriaBuilder.notEqual(fieldPath.as(Timestamp.class), Timestamp.valueOf(testDateTime)));
|
||||||
|
case BEFORE -> predicates.add(criteriaBuilder.lessThan(fieldPath.as(Timestamp.class), Timestamp.valueOf(testDateTime)));
|
||||||
|
case AFTER -> predicates.add(criteriaBuilder.greaterThan(fieldPath.as(Timestamp.class), Timestamp.valueOf(testDateTime)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
private Path<?> getFieldPath(Root<?> root, String fieldName) {
|
private Path<?> getFieldPath(Root<?> root, String fieldName) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -4,18 +4,33 @@ import com.fasterxml.jackson.annotation.JsonValue;
|
|||||||
|
|
||||||
|
|
||||||
public enum MatchModeEnum {
|
public enum MatchModeEnum {
|
||||||
STARTSWITH("STARTSWITH"),
|
STARTSWITH("Starts with"),
|
||||||
ENDSWITH("ENDSWITH"),
|
ENDSWITH("Ends with"),
|
||||||
CONTAINS("CONTAINS"),
|
CONTAINS("Contains"),
|
||||||
EQUALS("EQUALS"),
|
EQUALS("Equals"),
|
||||||
BEFORE("BEFORE"),
|
DATEIS("Date is"),
|
||||||
AFTER("AFTER");
|
DATEISNOT("Date is not"),
|
||||||
|
BEFORE("Date is before"),
|
||||||
|
AFTER("Date is after");
|
||||||
|
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
MatchModeEnum(String value) {
|
MatchModeEnum(String value) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
public static MatchModeEnum fromObject(Object value) {
|
||||||
|
if (value instanceof String) {
|
||||||
|
String strValue = ((String) value).trim();
|
||||||
|
for (MatchModeEnum mode : MatchModeEnum.values()) {
|
||||||
|
if (mode.getValue().equalsIgnoreCase(strValue)) {
|
||||||
|
return mode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new IllegalArgumentException("Invalid MatchModeEnum: " + value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@JsonValue
|
@JsonValue
|
||||||
public String getValue() {
|
public String getValue() {
|
||||||
|
|||||||
Reference in New Issue
Block a user