Skip to content

Commit a904030

Browse files
committed
feat: enhance compliance control evaluation with search functionality
1 parent 6102281 commit a904030

5 files changed

Lines changed: 29 additions & 22 deletions

File tree

backend/src/main/java/com/park/utmstack/config/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ public final class Constants {
164164
public static final List<String> API_ENDPOINT_IGNORE = Collections.emptyList();
165165

166166
// Application version file
167-
public static final String APP_VERSION_FILE = "/updates/version.json";
167+
public static final String APP_VERSION_FILE = "/Users/elena/Documents/Work/UTM Stack/version.json"; //TODO: ELENA
168168

169169
public static final String ADMIN_EMAIL = "admin@localhost";
170170

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.park.utmstack.domain.compliance.UtmComplianceControlConfig;
44
import org.springframework.data.domain.Page;
55
import org.springframework.data.domain.Pageable;
6+
import org.springframework.data.jpa.domain.Specification;
67
import org.springframework.data.jpa.repository.JpaRepository;
78
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
89
import org.springframework.data.jpa.repository.Query;
@@ -33,12 +34,13 @@ public interface UtmComplianceControlConfigRepository extends JpaRepository<UtmC
3334
List<UtmComplianceControlConfig> findWithQueriesByIdIn(
3435
@Param("ids") List<Long> ids);
3536

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);
37+
static Specification<UtmComplianceControlConfig> bySection(Long sectionId) {
38+
return (root, query, cb) ->
39+
cb.equal(root.get("standardSectionId"), sectionId);
40+
}
41+
42+
static Specification<UtmComplianceControlConfig> nameContains(String search) {
43+
return (root, query, cb) ->
44+
cb.like(cb.lower(root.get("controlName")), "%" + search.toLowerCase() + "%");
45+
}
4446
}

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.springframework.data.domain.Page;
1212
import org.springframework.data.domain.PageImpl;
1313
import org.springframework.data.domain.Pageable;
14+
import org.springframework.data.jpa.domain.Specification;
1415
import org.springframework.stereotype.Service;
1516

1617
import javax.transaction.Transactional;
@@ -118,22 +119,25 @@ private void validateControlConfig(UtmComplianceControlConfigDto dto) {
118119
}
119120
}
120121

121-
public Page<UtmComplianceControlConfig> findBySection(Long sectionId, Pageable pageable) {
122+
public Page<UtmComplianceControlConfig> findBySection(Long sectionId, String search, Pageable pageable) {
122123

123-
Page<Long> pageIds = repository.findIdsBySectionId(sectionId, pageable);
124+
Specification<UtmComplianceControlConfig> spec = Specification.where(UtmComplianceControlConfigRepository.bySection(sectionId));
124125

125-
if (pageIds.isEmpty()) {
126+
if (search != null && !search.isBlank()) {
127+
spec = spec.and(UtmComplianceControlConfigRepository.nameContains(search));
128+
}
129+
130+
Page<UtmComplianceControlConfig> page = repository.findAll(spec, pageable);
131+
132+
List<Long> ids = page.map(UtmComplianceControlConfig::getId).getContent();
133+
134+
if (ids.isEmpty()) {
126135
return Page.empty(pageable);
127136
}
128137

129-
List<UtmComplianceControlConfig> content =
130-
repository.findWithQueriesByIdIn(pageIds.getContent());
138+
List<UtmComplianceControlConfig> content = repository.findWithQueriesByIdIn(ids);
131139

132-
return new PageImpl<>(
133-
content,
134-
pageable,
135-
pageIds.getTotalElements()
136-
);
140+
return new PageImpl<>(content, pageable, page.getTotalElements());
137141
}
138142

139143
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ public UtmComplianceControlEvaluationLatestService(UtmComplianceControlConfigSer
2626
}
2727

2828
public Page<UtmComplianceControlLatestEvaluationDto> getControlsWithLastEvaluation(
29-
Long sectionId, Pageable pageable) {
29+
Long sectionId, String search, Pageable pageable) {
3030

31-
Page<UtmComplianceControlConfig> controls = configService.findBySection(sectionId, pageable);
31+
Page<UtmComplianceControlConfig> controls = configService.findBySection(sectionId, search, pageable);
3232

3333
return controls.map(control -> {
3434
UtmComplianceControlConfigDto controlDto = controlMapper.toDto(control);

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ public UtmComplianceControlLatestEvaluationResource(UtmComplianceControlEvaluati
2323
@GetMapping("/get-by-section")
2424
public ResponseEntity<List<UtmComplianceControlLatestEvaluationDto>> getControlsLatestEvaluationBySection(
2525
@RequestParam Long sectionId,
26+
@RequestParam(required = false) String search,
2627
Pageable pageable) {
2728

28-
var controls = latestEvaluationService.getControlsWithLastEvaluation(sectionId, pageable);
29+
var controls = latestEvaluationService.getControlsWithLastEvaluation(sectionId, search, pageable);
2930
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(controls, "/control-config/get-by-section");
3031
return ResponseEntity.ok().headers(headers).body(controls.getContent());
3132
}

0 commit comments

Comments
 (0)