Skip to content

Commit 7f7d0ea

Browse files
committed
Merge remote-tracking branch 'origin/backlog/compliance-evaluation' into backlog/compliance-evaluation
# Conflicts: # backend/src/main/resources/config/liquibase/master.xml
2 parents ab0d4c3 + f8d98c7 commit 7f7d0ea

16 files changed

Lines changed: 489 additions & 0 deletions
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.park.utmstack.domain.compliance;
2+
3+
import com.park.utmstack.domain.compliance.enums.ComplianceStrategy;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
import org.hibernate.annotations.GenericGenerator;
7+
8+
import javax.persistence.*;
9+
import java.io.Serializable;
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
13+
@Getter
14+
@Setter
15+
@Entity
16+
@Table(name = "utm_compliance_control_config")
17+
public class UtmComplianceControlConfig implements Serializable {
18+
19+
private static final long serialVersionUID = 1L;
20+
21+
@Id
22+
@GenericGenerator(name = "CustomIdentityGenerator",
23+
strategy = "com.park.utmstack.util.CustomIdentityGenerator")
24+
@GeneratedValue(generator = "CustomIdentityGenerator")
25+
private Long id;
26+
27+
@Column(name = "standard_section_id")
28+
private Long standardSectionId;
29+
30+
@ManyToOne
31+
@JoinColumn(name = "standard_section_id",
32+
insertable = false,
33+
updatable = false
34+
)
35+
private UtmComplianceStandardSection section;
36+
37+
@Column(name = "control_name",
38+
length = 50
39+
)
40+
private String controlName;
41+
42+
@Column(name = "control_solution")
43+
private String controlSolution;
44+
45+
@Column(name = "control_remediation")
46+
private String controlRemediation;
47+
48+
@Enumerated(EnumType.STRING)
49+
@Column(name = "control_strategy")
50+
private ComplianceStrategy controlStrategy;
51+
52+
@OneToMany(
53+
mappedBy = "controlConfig",
54+
cascade = CascadeType.ALL,
55+
orphanRemoval = true
56+
)
57+
private List<UtmComplianceQueryConfig> queriesConfigs = new ArrayList<>();
58+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.park.utmstack.domain.compliance;
2+
3+
import com.park.utmstack.domain.compliance.enums.EvaluationRule;
4+
import com.park.utmstack.domain.index_pattern.UtmIndexPattern;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
import org.hibernate.annotations.GenericGenerator;
8+
9+
import javax.persistence.*;
10+
import java.io.Serializable;
11+
12+
@Getter
13+
@Setter
14+
@Entity
15+
@Table(name = "utm_compliance_query_config")
16+
public class UtmComplianceQueryConfig implements Serializable {
17+
18+
private static final long serialVersionUID = 1L;
19+
20+
@Id
21+
@GenericGenerator(
22+
name = "CustomIdentityGenerator",
23+
strategy = "com.park.utmstack.util.CustomIdentityGenerator"
24+
)
25+
@GeneratedValue(generator = "CustomIdentityGenerator")
26+
private Long id;
27+
28+
@Column(name = "query_description",
29+
columnDefinition = "TEXT"
30+
)
31+
private String queryDescription;
32+
33+
@Column(name = "sql_query",
34+
columnDefinition = "TEXT"
35+
)
36+
private String sqlQuery;
37+
38+
@Enumerated(EnumType.STRING)
39+
@Column(name = "evaluation_rule")
40+
private EvaluationRule evaluationRule;
41+
42+
@Column(name = "index_pattern_id")
43+
private Long indexPatternId;
44+
45+
@ManyToOne
46+
@JoinColumn(name = "index_pattern_id",
47+
insertable = false,
48+
updatable = false
49+
)
50+
private UtmIndexPattern indexPattern;
51+
52+
@Column(name = "control_config_id")
53+
private Long controlConfigId;
54+
55+
@ManyToOne @JoinColumn(name = "control_config_id",
56+
insertable = false,
57+
updatable = false
58+
)
59+
private UtmComplianceControlConfig controlConfig;
60+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.park.utmstack.domain.compliance.enums;
2+
3+
public enum ComplianceStrategy {
4+
ALL,
5+
ANY,
6+
MAJORITY
7+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.park.utmstack.domain.compliance.enums;
2+
3+
public enum EvaluationRule {
4+
NO_HITS_ALLOWED,
5+
MIN_HITS_REQUIRED,
6+
THRESHOLD_MAX,
7+
MATCH_FIELD_VALUE
8+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.park.utmstack.repository.compliance;
2+
3+
import com.park.utmstack.domain.compliance.UtmComplianceControlConfig;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
import java.util.List;
8+
9+
@Repository
10+
public interface UtmComplianceControlConfigRepository extends JpaRepository<UtmComplianceControlConfig, Long> {
11+
12+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.park.utmstack.repository.compliance;
2+
3+
import com.park.utmstack.domain.compliance.UtmComplianceQueryConfig;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
import java.util.List;
8+
9+
@Repository
10+
public interface UtmComplianceQueryConfigRepository extends JpaRepository<UtmComplianceQueryConfig, Long> {
11+
12+
List<UtmComplianceQueryConfig> findByControlConfigId(Long controlConfigId);
13+
}
14+
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.park.utmstack.service.compliance.config;
2+
3+
import com.park.utmstack.domain.compliance.UtmComplianceControlConfig;
4+
import com.park.utmstack.repository.compliance.UtmComplianceControlConfigRepository;
5+
import com.park.utmstack.service.dto.compliance.UtmComplianceControlConfigDto;
6+
import com.park.utmstack.service.mapper.compliance.UtmComplianceControlConfigMapper;
7+
import com.park.utmstack.service.mapper.compliance.UtmComplianceQueryConfigMapper;
8+
import org.springframework.stereotype.Service;
9+
10+
import javax.transaction.Transactional;
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
14+
@Service
15+
public class UtmComplianceControlConfigService {
16+
17+
private final UtmComplianceControlConfigRepository repository;
18+
private final UtmComplianceControlConfigMapper mapper;
19+
private final UtmComplianceQueryConfigMapper queryMapper;
20+
21+
public UtmComplianceControlConfigService(UtmComplianceControlConfigRepository repository,
22+
UtmComplianceControlConfigMapper mapper,
23+
UtmComplianceQueryConfigMapper queryMapper) {
24+
this.repository = repository;
25+
this.mapper = mapper;
26+
this.queryMapper = queryMapper;
27+
}
28+
29+
@Transactional
30+
public UtmComplianceControlConfigDto create(UtmComplianceControlConfigDto dto) {
31+
UtmComplianceControlConfig entity = mapper.toEntity(dto);
32+
entity.setQueriesConfigs(new ArrayList<>());
33+
34+
entity = repository.save(entity);
35+
36+
for (var qdto : dto.getQueriesConfigs()) {
37+
var q = queryMapper.toEntity(qdto);
38+
q.setControlConfigId(entity.getId());
39+
entity.getQueriesConfigs().add(q);
40+
}
41+
42+
entity = repository.save(entity);
43+
44+
return mapper.toDto(entity);
45+
}
46+
47+
48+
@Transactional
49+
public UtmComplianceControlConfigDto update(Long id, UtmComplianceControlConfigDto dto) {
50+
51+
UtmComplianceControlConfig entity = repository.findById(id)
52+
.orElseThrow(() -> new RuntimeException("Control not found"));
53+
54+
mapper.updateEntity(entity, dto);
55+
entity.getQueriesConfigs().clear();
56+
57+
for (var qdto : dto.getQueriesConfigs()) {
58+
var q = queryMapper.toEntity(qdto);
59+
q.setControlConfigId(id);
60+
entity.getQueriesConfigs().add(q);
61+
}
62+
63+
entity = repository.save(entity);
64+
65+
return mapper.toDto(entity);
66+
}
67+
68+
public void delete(Long id) {
69+
repository.deleteById(id);
70+
}
71+
72+
public UtmComplianceControlConfig findById(Long id) {
73+
return repository.findById(id).orElse(null);
74+
}
75+
76+
public List<UtmComplianceControlConfig> findAll() {
77+
return repository.findAll();
78+
}
79+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.park.utmstack.service.compliance.config;
2+
3+
import com.park.utmstack.domain.compliance.UtmComplianceQueryConfig;
4+
import com.park.utmstack.repository.compliance.UtmComplianceQueryConfigRepository;
5+
import org.springframework.stereotype.Service;
6+
7+
import java.util.List;
8+
9+
@Service
10+
public class UtmComplianceQueryConfigService {
11+
12+
private final UtmComplianceQueryConfigRepository repository;
13+
14+
public UtmComplianceQueryConfigService(UtmComplianceQueryConfigRepository repository) {
15+
this.repository = repository;
16+
}
17+
18+
public UtmComplianceQueryConfig create(UtmComplianceQueryConfig config) {
19+
return repository.save(config);
20+
}
21+
22+
public void delete(Long id) {
23+
repository.deleteById(id);
24+
}
25+
26+
public List<UtmComplianceQueryConfig> findByControlConfigId(Long controlId) {
27+
return repository.findByControlConfigId((controlId));
28+
}
29+
30+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.park.utmstack.service.dto.compliance;
2+
3+
import com.park.utmstack.domain.compliance.enums.ComplianceStrategy;
4+
import lombok.Data;
5+
6+
import java.util.List;
7+
8+
@Data
9+
public class UtmComplianceControlConfigDto {
10+
private Long id;
11+
private Long standardSectionId;
12+
private String controlName;
13+
private String controlSolution;
14+
private String controlRemediation;
15+
private ComplianceStrategy controlStrategy;
16+
private List<UtmComplianceQueryConfigDto> queriesConfigs;
17+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.park.utmstack.service.dto.compliance;
2+
3+
import com.park.utmstack.domain.compliance.enums.EvaluationRule;
4+
import lombok.Data;
5+
6+
@Data
7+
public class UtmComplianceQueryConfigDto {
8+
private Long id;
9+
private String queryDescription;
10+
private String sqlQuery;
11+
private EvaluationRule evaluationRule;
12+
private Long indexPatternId;
13+
private Long controlConfigId;
14+
}

0 commit comments

Comments
 (0)