
fi.evolver.basics.spring.log.MessageLogLiteRepository Maven / Gradle / Ivy
package fi.evolver.basics.spring.log;
import fi.evolver.basics.spring.log.entity.MessageLogLite;
import fi.evolver.basics.spring.log.entity.MessageLogMetadataLite;
import fi.evolver.basics.spring.log.model.MessageLogQuery;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import jakarta.persistence.criteria.Subquery;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import static fi.evolver.basics.spring.util.QueryUtils.*;
@Repository
public interface MessageLogLiteRepository extends JpaRepository, JpaSpecificationExecutor {
private static Specification createSpecification(MessageLogQuery params) {
return (messageLog, cq, cb) -> {
List result = new ArrayList<>();
in(cb, messageLog.get("appVersion"), params.getV()).ifPresent(result::add);
in(cb, messageLog.get("appServer"), params.getSrv()).ifPresent(result::add);
between(cb, messageLog.get("durationMs"), params.getD()).ifPresent(result::add);
in(cb, messageLog.get("messageChainId"), params.getMci()).ifPresent(result::add);
in(cb, messageLog.get("messageType"), params.getM()).ifPresent(result::add);
in(cb, messageLog.get("protocol"), params.getP()).ifPresent(result::add);
in(cb, messageLog.get("requestingSystem"), params.getRqsn()).ifPresent(result::add);
in(cb, messageLog.get("respondingSystem"), params.getRpsn()).ifPresent(result::add);
between(cb, messageLog.get("requestSize"), params.getRqs()).ifPresent(result::add);
between(cb, messageLog.get("responseSize"), params.getRps()).ifPresent(result::add);
between(cb, messageLog.get("startTime"), params.getS()).ifPresent(result::add);
in(cb, messageLog.get("statusCode"), params.getC()).ifPresent(result::add);
params.getMetadata().forEach((k, v) -> {
Subquery subquery = cq.subquery(MessageLogMetadataLite.class);
Root mlMetadata = subquery.from(MessageLogMetadataLite.class);
subquery.select(mlMetadata).where(cb.and(
cb.equal(mlMetadata.get("messageLog"), messageLog),
cb.equal(mlMetadata.get("key"), k),
cb.like(cb.upper(mlMetadata.get("value")), v.toUpperCase())));
result.add(cb.exists(subquery));
});
return cb.and(result.toArray(new Predicate[result.size()]));
};
}
default Page search(MessageLogQuery params, Pageable page) {
return findAll(createSpecification(params), page);
}
int deleteByStartTimeLessThan(LocalDateTime deleteBefore);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy