All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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