Skip to content

Commit 475bd96

Browse files
committed
feat: enhance compliance control evaluation with pagination support
1 parent a3d3d20 commit 475bd96

4 files changed

Lines changed: 58 additions & 22 deletions

File tree

backend/src/main/java/com/park/utmstack/repository/compliance/UtmComplianceControlConfigRepository.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.park.utmstack.repository.compliance;
22

33
import com.park.utmstack.domain.compliance.UtmComplianceControlConfig;
4+
import org.springframework.data.domain.Page;
5+
import org.springframework.data.domain.Pageable;
46
import org.springframework.data.jpa.repository.JpaRepository;
57
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
68
import org.springframework.data.jpa.repository.Query;
@@ -22,11 +24,21 @@ public interface UtmComplianceControlConfigRepository extends JpaRepository<UtmC
2224
Optional<UtmComplianceControlConfig> findByIdWithQueries(@Param("id") Long id);
2325

2426
@Query("""
25-
SELECT DISTINCT c FROM UtmComplianceControlConfig c
27+
SELECT DISTINCT c
28+
FROM UtmComplianceControlConfig c
2629
LEFT JOIN FETCH c.section s
2730
LEFT JOIN FETCH c.queriesConfigs q
28-
WHERE c.standardSectionId = :sectionId
31+
WHERE c.id IN :ids
2932
""")
30-
List<UtmComplianceControlConfig> findBySectionIdWithQueries(@Param("sectionId") Long sectionId);
33+
List<UtmComplianceControlConfig> findWithQueriesByIdIn(
34+
@Param("ids") List<Long> ids);
3135

36+
@Query("""
37+
SELECT c.id
38+
FROM UtmComplianceControlConfig c
39+
WHERE c.standardSectionId = :sectionId
40+
""")
41+
Page<Long> findIdsBySectionId(
42+
@Param("sectionId") Long sectionId,
43+
Pageable pageable);
3244
}

backend/src/main/java/com/park/utmstack/service/compliance/config/UtmComplianceControlConfigService.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import com.park.utmstack.service.mapper.compliance.UtmComplianceControlConfigMapper;
99
import com.park.utmstack.service.mapper.compliance.UtmComplianceQueryConfigMapper;
1010
import com.park.utmstack.web.rest.errors.BadRequestAlertException;
11+
import org.springframework.data.domain.Page;
12+
import org.springframework.data.domain.PageImpl;
13+
import org.springframework.data.domain.Pageable;
1114
import org.springframework.stereotype.Service;
1215

1316
import javax.transaction.Transactional;
@@ -115,11 +118,22 @@ private void validateControlConfig(UtmComplianceControlConfigDto dto) {
115118
}
116119
}
117120

118-
public List<UtmComplianceControlConfigDto> getControlsBySection(Long sectionId) {
119-
var entities = repository.findBySectionIdWithQueries(sectionId);
120-
return entities.stream()
121-
.map(mapper::toDto)
122-
.collect(Collectors.toList());
121+
public Page<UtmComplianceControlConfig> findBySection(Long sectionId, Pageable pageable) {
122+
123+
Page<Long> pageIds = repository.findIdsBySectionId(sectionId, pageable);
124+
125+
if (pageIds.isEmpty()) {
126+
return Page.empty(pageable);
127+
}
128+
129+
List<UtmComplianceControlConfig> content =
130+
repository.findWithQueriesByIdIn(pageIds.getContent());
131+
132+
return new PageImpl<>(
133+
content,
134+
pageable,
135+
pageIds.getTotalElements()
136+
);
123137
}
124138

125139
}

backend/src/main/java/com/park/utmstack/service/compliance/config/UtmComplianceControlEvaluationLatestService.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,40 @@
11
package com.park.utmstack.service.compliance.config;
22

3+
import com.park.utmstack.domain.compliance.UtmComplianceControlConfig;
34
import com.park.utmstack.service.dto.compliance.UtmComplianceControlConfigDto;
45
import com.park.utmstack.service.dto.compliance.UtmComplianceControlLatestEvaluationDto;
56
import com.park.utmstack.service.elasticsearch.ElasticsearchService;
7+
import com.park.utmstack.service.mapper.compliance.UtmComplianceControlConfigMapper;
68
import com.park.utmstack.service.mapper.compliance.UtmComplianceControlLatestEvaluationMapper;
9+
import org.springframework.data.domain.Page;
10+
import org.springframework.data.domain.Pageable;
711
import org.springframework.stereotype.Service;
812

9-
import java.util.List;
10-
1113
@Service
1214
public class UtmComplianceControlEvaluationLatestService {
1315

1416
private final UtmComplianceControlConfigService configService;
1517
private final ElasticsearchService elasticsearchService;
18+
private final UtmComplianceControlConfigMapper controlMapper;
1619

1720
public UtmComplianceControlEvaluationLatestService(UtmComplianceControlConfigService configService,
18-
ElasticsearchService elasticsearchService) {
21+
ElasticsearchService elasticsearchService,
22+
UtmComplianceControlConfigMapper controlMapper) {
1923
this.configService = configService;
2024
this.elasticsearchService = elasticsearchService;
25+
this.controlMapper = controlMapper;
2126
}
2227

23-
public List<UtmComplianceControlLatestEvaluationDto> getControlsWithLastEvaluation(Long sectionId) {
28+
public Page<UtmComplianceControlLatestEvaluationDto> getControlsWithLastEvaluation(
29+
Long sectionId, Pageable pageable) {
2430

25-
List<UtmComplianceControlConfigDto> controls = configService.getControlsBySection(sectionId);
31+
Page<UtmComplianceControlConfig> controls = configService.findBySection(sectionId, pageable);
2632

27-
return controls.stream()
28-
.map(control -> {
29-
var lastEval = this.elasticsearchService.getLatestControlEvaluation(control.getId());
30-
return UtmComplianceControlLatestEvaluationMapper.toDto(control, lastEval);
31-
})
32-
.toList();
33+
return controls.map(control -> {
34+
UtmComplianceControlConfigDto controlDto = controlMapper.toDto(control);
35+
var lastEval = elasticsearchService.getLatestControlEvaluation(control.getId());
36+
return UtmComplianceControlLatestEvaluationMapper.toDto(controlDto, lastEval);
37+
});
3338
}
3439
}
3540

backend/src/main/java/com/park/utmstack/web/rest/compliance/config/UtmComplianceControlLatestEvaluationResource.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import com.park.utmstack.service.compliance.config.UtmComplianceControlEvaluationLatestService;
44
import com.park.utmstack.service.dto.compliance.UtmComplianceControlLatestEvaluationDto;
5+
import com.park.utmstack.web.rest.util.PaginationUtil;
6+
import org.springframework.data.domain.Pageable;
7+
import org.springframework.http.HttpHeaders;
58
import org.springframework.http.ResponseEntity;
69
import org.springframework.web.bind.annotation.*;
710

@@ -19,10 +22,12 @@ public UtmComplianceControlLatestEvaluationResource(UtmComplianceControlEvaluati
1922

2023
@GetMapping("/get-by-section")
2124
public ResponseEntity<List<UtmComplianceControlLatestEvaluationDto>> getControlsLatestEvaluationBySection(
22-
@RequestParam Long sectionId) {
25+
@RequestParam Long sectionId,
26+
Pageable pageable) {
2327

24-
var controls = latestEvaluationService.getControlsWithLastEvaluation(sectionId);
25-
return ResponseEntity.ok(controls);
28+
var controls = latestEvaluationService.getControlsWithLastEvaluation(sectionId, pageable);
29+
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(controls, "/control-config/get-by-section");
30+
return ResponseEntity.ok().headers(headers).body(controls.getContent());
2631
}
2732
}
2833

0 commit comments

Comments
 (0)