1 | package org.cardanofoundation.explorer.api.service.impl; | |
2 | ||
3 | import java.util.Comparator; | |
4 | import java.util.List; | |
5 | import java.util.Objects; | |
6 | import java.util.stream.Collectors; | |
7 | import java.util.stream.Stream; | |
8 | ||
9 | import lombok.RequiredArgsConstructor; | |
10 | ||
11 | import org.springframework.data.domain.Pageable; | |
12 | import org.springframework.data.domain.Sort; | |
13 | import org.springframework.stereotype.Service; | |
14 | ||
15 | import org.cardanofoundation.explorer.api.common.enumeration.PoolActionType; | |
16 | import org.cardanofoundation.explorer.api.common.enumeration.PoolStatus; | |
17 | import org.cardanofoundation.explorer.api.mapper.PoolCertificateMapper; | |
18 | import org.cardanofoundation.explorer.api.model.response.BaseFilterResponse; | |
19 | import org.cardanofoundation.explorer.api.model.response.pool.PoolCertificateHistory; | |
20 | import org.cardanofoundation.explorer.api.model.response.pool.TxPoolCertificateHistory; | |
21 | import org.cardanofoundation.explorer.api.model.response.pool.projection.PoolCertificateProjection; | |
22 | import org.cardanofoundation.explorer.api.repository.ledgersync.EpochRepository; | |
23 | import org.cardanofoundation.explorer.api.repository.ledgersync.PoolRetireRepository; | |
24 | import org.cardanofoundation.explorer.api.repository.ledgersync.PoolUpdateRepository; | |
25 | import org.cardanofoundation.explorer.api.service.PoolCertificateService; | |
26 | ||
27 | @Service | |
28 | @RequiredArgsConstructor | |
29 | public class PoolCertificateServiceImpl implements PoolCertificateService { | |
30 | ||
31 | private final PoolUpdateRepository poolUpdateRepository; | |
32 | private final PoolRetireRepository poolRetireRepository; | |
33 | private final EpochRepository epochRepository; | |
34 | ||
35 | private final PoolCertificateMapper poolCertificateMapper; | |
36 | ||
37 | @Override | |
38 | public BaseFilterResponse<TxPoolCertificateHistory> getTxPoolCertificateHistory( | |
39 | String poolViewOrHash, Pageable pageable) { | |
40 | ||
41 | List<TxPoolCertificateHistory> txCertificateHistories = | |
42 | getAllPoolCertificateHistories(poolViewOrHash).stream() | |
43 | .collect(Collectors.groupingBy(PoolCertificateHistory::getTxId)) | |
44 | .values() | |
45 | .stream() | |
46 | .map( | |
47 | poolCertificateHistoryList -> { | |
48 | TxPoolCertificateHistory txPoolCertificateHistory = | |
49 | poolCertificateMapper.fromPoolCertificateHistory( | |
50 | poolCertificateHistoryList.get(0)); | |
51 |
1
1. lambda$getTxPoolCertificateHistory$0 : removed call to org/cardanofoundation/explorer/api/model/response/pool/TxPoolCertificateHistory::setActions → KILLED |
txPoolCertificateHistory.setActions( |
52 | poolCertificateHistoryList.stream() | |
53 | .map(PoolCertificateHistory::getActionType) | |
54 | .toList()); | |
55 |
1
1. lambda$getTxPoolCertificateHistory$0 : replaced return value with null for org/cardanofoundation/explorer/api/service/impl/PoolCertificateServiceImpl::lambda$getTxPoolCertificateHistory$0 → KILLED |
return txPoolCertificateHistory; |
56 | }) | |
57 | .collect(Collectors.toList()); | |
58 | ||
59 |
1
1. getTxPoolCertificateHistory : removed call to java/util/List::sort → SURVIVED |
txCertificateHistories.sort( |
60 |
1
1. getTxPoolCertificateHistory : negated conditional → KILLED |
Sort.Direction.DESC.equals(pageable.getSort().getOrderFor("createdAt").getDirection()) |
61 | ? Comparator.comparing(TxPoolCertificateHistory::getBlockTime).reversed() | |
62 | : Comparator.comparing(TxPoolCertificateHistory::getBlockTime)); | |
63 | ||
64 |
1
1. getTxPoolCertificateHistory : replaced return value with null for org/cardanofoundation/explorer/api/service/impl/PoolCertificateServiceImpl::getTxPoolCertificateHistory → KILLED |
return new BaseFilterResponse<>( |
65 | BaseFilterResponse.getPageImpl(txCertificateHistories, pageable)); | |
66 | } | |
67 | ||
68 | @Override | |
69 | public PoolStatus getCurrentPoolStatus(String poolViewOrHash) { | |
70 | PoolCertificateHistory latestPoolUpdate = | |
71 | poolCertificateMapper.fromPoolCertificateProjection( | |
72 | poolUpdateRepository.getLastPoolUpdateByPoolHash(poolViewOrHash)); | |
73 | ||
74 | PoolCertificateHistory latestPoolRetire = | |
75 | poolCertificateMapper.fromPoolCertificateProjection( | |
76 | poolRetireRepository.getLastPoolRetireByPoolHash(poolViewOrHash)); | |
77 | ||
78 | PoolStatus poolStatus = null; | |
79 |
1
1. getCurrentPoolStatus : negated conditional → KILLED |
long latestPoolUpdateTxId = latestPoolUpdate == null ? -1 : latestPoolUpdate.getTxId(); |
80 |
1
1. getCurrentPoolStatus : negated conditional → KILLED |
long latestPoolRetireTxId = latestPoolRetire == null ? -1 : latestPoolRetire.getTxId(); |
81 | long latestPoolUpdateCertIndex = | |
82 |
1
1. getCurrentPoolStatus : negated conditional → SURVIVED |
latestPoolUpdate == null ? -1 : latestPoolUpdate.getCertIndex(); |
83 | long latestPoolRetireCertIndex = | |
84 |
1
1. getCurrentPoolStatus : negated conditional → SURVIVED |
latestPoolRetire == null ? -1 : latestPoolRetire.getCertIndex(); |
85 |
2
1. getCurrentPoolStatus : changed conditional boundary → SURVIVED 2. getCurrentPoolStatus : negated conditional → KILLED |
if (latestPoolUpdateTxId > latestPoolRetireTxId) { |
86 | poolStatus = PoolStatus.ACTIVE; | |
87 |
5
1. getCurrentPoolStatus : changed conditional boundary → NO_COVERAGE 2. getCurrentPoolStatus : changed conditional boundary → SURVIVED 3. getCurrentPoolStatus : negated conditional → NO_COVERAGE 4. getCurrentPoolStatus : negated conditional → NO_COVERAGE 5. getCurrentPoolStatus : negated conditional → KILLED |
} else if (latestPoolUpdateTxId < latestPoolRetireTxId |
88 | || (latestPoolUpdateTxId == latestPoolRetireTxId | |
89 | && latestPoolUpdateCertIndex < latestPoolRetireCertIndex)) { | |
90 | Integer currentEpochNo = epochRepository.findCurrentEpochNo().orElse(0); | |
91 | poolStatus = | |
92 |
2
1. getCurrentPoolStatus : changed conditional boundary → SURVIVED 2. getCurrentPoolStatus : negated conditional → KILLED |
latestPoolRetire.getCertEpochNo() > currentEpochNo |
93 | ? PoolStatus.RETIRING | |
94 | : PoolStatus.RETIRED; | |
95 | } | |
96 |
1
1. getCurrentPoolStatus : replaced return value with null for org/cardanofoundation/explorer/api/service/impl/PoolCertificateServiceImpl::getCurrentPoolStatus → KILLED |
return poolStatus; |
97 | } | |
98 | ||
99 | @Override | |
100 | public List<PoolCertificateHistory> getPoolCertificateByAction( | |
101 | String poolViewOrHash, PoolActionType action) { | |
102 |
1
1. getPoolCertificateByAction : replaced return value with Collections.emptyList for org/cardanofoundation/explorer/api/service/impl/PoolCertificateServiceImpl::getPoolCertificateByAction → NO_COVERAGE |
return getAllPoolCertificateHistories(poolViewOrHash).stream() |
103 |
2
1. lambda$getPoolCertificateByAction$1 : replaced boolean return with true for org/cardanofoundation/explorer/api/service/impl/PoolCertificateServiceImpl::lambda$getPoolCertificateByAction$1 → NO_COVERAGE 2. lambda$getPoolCertificateByAction$1 : replaced boolean return with false for org/cardanofoundation/explorer/api/service/impl/PoolCertificateServiceImpl::lambda$getPoolCertificateByAction$1 → NO_COVERAGE |
.filter(poolCertificate -> poolCertificate.getActionType().equals(action)) |
104 | .sorted(Comparator.comparing(PoolCertificateHistory::getTxId)) | |
105 | .toList(); | |
106 | } | |
107 | ||
108 | private List<PoolCertificateHistory> getAllPoolCertificateHistories(String poolViewOrHash) { | |
109 | List<PoolCertificateHistory> certificateHistories = | |
110 | Stream.concat( | |
111 | poolUpdateRepository.getPoolUpdateByPoolViewOrHash(poolViewOrHash).stream(), | |
112 | poolRetireRepository.getPoolRetireByPoolViewOrHash(poolViewOrHash).stream()) | |
113 | .sorted( | |
114 | Comparator.comparing(PoolCertificateProjection::getTxId) | |
115 | .thenComparing(PoolCertificateProjection::getCertIndex)) | |
116 | .map(poolCertificateMapper::fromPoolCertificateProjection) | |
117 | .toList(); | |
118 | ||
119 |
2
1. getAllPoolCertificateHistories : negated conditional → KILLED 2. getAllPoolCertificateHistories : changed conditional boundary → KILLED |
for (int i = 0; i < certificateHistories.size(); i++) { |
120 | PoolCertificateHistory certificateHistory = certificateHistories.get(i); | |
121 |
1
1. getAllPoolCertificateHistories : negated conditional → KILLED |
if (i == 0) { |
122 |
1
1. getAllPoolCertificateHistories : removed call to org/cardanofoundation/explorer/api/model/response/pool/PoolCertificateHistory::setActionType → KILLED |
certificateHistory.setActionType(PoolActionType.POOL_REGISTRATION); |
123 | continue; | |
124 | } | |
125 |
1
1. getAllPoolCertificateHistories : negated conditional → KILLED |
if (!Objects.isNull(certificateHistory.getPoolRetireId())) { |
126 |
1
1. getAllPoolCertificateHistories : removed call to org/cardanofoundation/explorer/api/model/response/pool/PoolCertificateHistory::setActionType → KILLED |
certificateHistory.setActionType(PoolActionType.POOL_DEREGISTRATION); |
127 |
1
1. getAllPoolCertificateHistories : negated conditional → KILLED |
} else if (!Objects.isNull(certificateHistory.getPoolUpdateId())) { |
128 |
1
1. getAllPoolCertificateHistories : Replaced integer subtraction with addition → KILLED |
PoolCertificateHistory previousCertificateHistory = certificateHistories.get(i - 1); |
129 |
1
1. getAllPoolCertificateHistories : negated conditional → KILLED |
if (previousCertificateHistory.getActionType().equals(PoolActionType.POOL_DEREGISTRATION) |
130 |
2
1. getAllPoolCertificateHistories : changed conditional boundary → SURVIVED 2. getAllPoolCertificateHistories : negated conditional → KILLED |
&& certificateHistory.getTxEpochNo() >= previousCertificateHistory.getCertEpochNo()) { |
131 |
1
1. getAllPoolCertificateHistories : removed call to org/cardanofoundation/explorer/api/model/response/pool/PoolCertificateHistory::setActionType → KILLED |
certificateHistory.setActionType(PoolActionType.POOL_REGISTRATION); |
132 | } else { | |
133 |
1
1. getAllPoolCertificateHistories : removed call to org/cardanofoundation/explorer/api/model/response/pool/PoolCertificateHistory::setActionType → KILLED |
certificateHistory.setActionType(PoolActionType.POOL_UPDATE); |
134 | } | |
135 | } | |
136 | } | |
137 | ||
138 |
1
1. getAllPoolCertificateHistories : replaced return value with Collections.emptyList for org/cardanofoundation/explorer/api/service/impl/PoolCertificateServiceImpl::getAllPoolCertificateHistories → KILLED |
return certificateHistories; |
139 | } | |
140 | } | |
Mutations | ||
51 |
1.1 |
|
55 |
1.1 |
|
59 |
1.1 |
|
60 |
1.1 |
|
64 |
1.1 |
|
79 |
1.1 |
|
80 |
1.1 |
|
82 |
1.1 |
|
84 |
1.1 |
|
85 |
1.1 2.2 |
|
87 |
1.1 2.2 3.3 4.4 5.5 |
|
92 |
1.1 2.2 |
|
96 |
1.1 |
|
102 |
1.1 |
|
103 |
1.1 2.2 |
|
119 |
1.1 2.2 |
|
121 |
1.1 |
|
122 |
1.1 |
|
125 |
1.1 |
|
126 |
1.1 |
|
127 |
1.1 |
|
128 |
1.1 |
|
129 |
1.1 |
|
130 |
1.1 2.2 |
|
131 |
1.1 |
|
133 |
1.1 |
|
138 |
1.1 |