1 | package org.cardanofoundation.explorer.api.repository.ledgersync.impl; | |
2 | ||
3 | import java.util.List; | |
4 | ||
5 | import jakarta.persistence.EntityManager; | |
6 | import jakarta.persistence.PersistenceContext; | |
7 | import jakarta.persistence.criteria.CriteriaBuilder; | |
8 | import jakarta.persistence.criteria.CriteriaQuery; | |
9 | import jakarta.persistence.criteria.Order; | |
10 | import jakarta.persistence.criteria.Predicate; | |
11 | import jakarta.persistence.criteria.Root; | |
12 | ||
13 | import lombok.AccessLevel; | |
14 | import lombok.RequiredArgsConstructor; | |
15 | import lombok.experimental.FieldDefaults; | |
16 | ||
17 | import org.springframework.data.domain.Sort.Direction; | |
18 | import org.springframework.stereotype.Repository; | |
19 | import org.springframework.transaction.annotation.Propagation; | |
20 | import org.springframework.transaction.annotation.Transactional; | |
21 | ||
22 | import org.cardanofoundation.explorer.api.repository.ledgersync.CustomBlockRepository; | |
23 | import org.cardanofoundation.explorer.common.entity.ledgersync.BaseEntity_; | |
24 | import org.cardanofoundation.explorer.common.entity.ledgersync.Block; | |
25 | ||
26 | @Repository | |
27 | @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) | |
28 | @RequiredArgsConstructor | |
29 | public class CustomBlockRepositoryImpl implements CustomBlockRepository { | |
30 | ||
31 | @PersistenceContext EntityManager entityManager; | |
32 | ||
33 | @Override | |
34 | @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) | |
35 | public List<Block> findByBlockIdAndLimit(Long blockId, int limit, Direction direction) { | |
36 | CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); | |
37 | CriteriaQuery<Block> blockQuery = criteriaBuilder.createQuery(Block.class); | |
38 | Root<Block> blockRoot = blockQuery.from(Block.class); | |
39 | Predicate selectionCondition; | |
40 | Order orderByBlockId; | |
41 | ||
42 |
1
1. findByBlockIdAndLimit : negated conditional → NO_COVERAGE |
if (direction.equals(Direction.ASC)) { |
43 | selectionCondition = | |
44 | criteriaBuilder.greaterThanOrEqualTo(blockRoot.get(BaseEntity_.id), blockId); | |
45 | orderByBlockId = criteriaBuilder.asc(blockRoot.get(BaseEntity_.id)); | |
46 | } else { | |
47 | selectionCondition = | |
48 | criteriaBuilder.lessThanOrEqualTo(blockRoot.get(BaseEntity_.id), blockId); | |
49 | orderByBlockId = criteriaBuilder.desc(blockRoot.get(BaseEntity_.id)); | |
50 | } | |
51 | ||
52 | blockQuery.select(blockRoot).where(selectionCondition).orderBy(orderByBlockId); | |
53 |
1
1. findByBlockIdAndLimit : replaced return value with Collections.emptyList for org/cardanofoundation/explorer/api/repository/ledgersync/impl/CustomBlockRepositoryImpl::findByBlockIdAndLimit → NO_COVERAGE |
return entityManager.createQuery(blockQuery).setMaxResults(limit).getResultList(); |
54 | } | |
55 | } | |
Mutations | ||
42 |
1.1 |
|
53 |
1.1 |