Skip to content

Commit bde728f

Browse files
committed
feat: add compliance control and query configuration tables with related DTOs and mappers
1 parent c2ca1ad commit bde728f

7 files changed

Lines changed: 105 additions & 20 deletions

File tree

backend/src/main/java/com/park/utmstack/domain/compliance/UtmComplianceControlConfig.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.hibernate.annotations.GenericGenerator;
77

88
import javax.persistence.*;
9+
import javax.validation.constraints.Size;
910
import java.io.Serializable;
1011
import java.util.ArrayList;
1112
import java.util.List;
@@ -24,7 +25,9 @@ public class UtmComplianceControlConfig implements Serializable {
2425
@GeneratedValue(generator = "CustomIdentityGenerator")
2526
private Long id;
2627

27-
@Column(name = "standard_section_id")
28+
@Column(name = "standard_section_id",
29+
nullable = false
30+
)
2831
private Long standardSectionId;
2932

3033
@ManyToOne
@@ -35,18 +38,25 @@ public class UtmComplianceControlConfig implements Serializable {
3538
private UtmComplianceStandardSection section;
3639

3740
@Column(name = "control_name",
38-
length = 50
41+
nullable = false
3942
)
43+
@Size(min = 10, max = 200)
4044
private String controlName;
4145

42-
@Column(name = "control_solution")
46+
@Column(name = "control_solution",
47+
length = 2000
48+
)
4349
private String controlSolution;
4450

45-
@Column(name = "control_remediation")
51+
@Column(name = "control_remediation",
52+
length = 2000
53+
)
4654
private String controlRemediation;
4755

4856
@Enumerated(EnumType.STRING)
49-
@Column(name = "control_strategy")
57+
@Column(name = "control_strategy",
58+
nullable = false
59+
)
5060
private ComplianceStrategy controlStrategy;
5161

5262
@OneToMany(

backend/src/main/java/com/park/utmstack/domain/compliance/UtmComplianceQueryConfig.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.hibernate.annotations.GenericGenerator;
88

99
import javax.persistence.*;
10+
import javax.validation.constraints.Size;
1011
import java.io.Serializable;
1112

1213
@Getter
@@ -26,25 +27,37 @@ public class UtmComplianceQueryConfig implements Serializable {
2627
private Long id;
2728

2829
@Column(name = "query_name",
30+
nullable = false,
2931
columnDefinition = "TEXT"
3032
)
33+
@Size(min = 10, max = 200)
3134
private String queryName;
3235

3336
@Column(name = "query_description",
37+
length = 2000,
38+
nullable = false,
3439
columnDefinition = "TEXT"
3540
)
3641
private String queryDescription;
3742

3843
@Column(name = "sql_query",
44+
length = 2000,
45+
nullable = false,
3946
columnDefinition = "TEXT"
4047
)
4148
private String sqlQuery;
4249

4350
@Enumerated(EnumType.STRING)
44-
@Column(name = "evaluation_rule")
51+
@Column(name = "evaluation_rule",
52+
nullable = false
53+
)
4554
private EvaluationRule evaluationRule;
4655

47-
@Column(name = "index_pattern_id")
56+
private Integer ruleValue;
57+
58+
@Column(name = "index_pattern_id",
59+
nullable = false
60+
)
4861
private Long indexPatternId;
4962

5063
@ManyToOne

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

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import com.park.utmstack.domain.compliance.UtmComplianceControlConfig;
44
import com.park.utmstack.domain.compliance.UtmComplianceQueryConfig;
5+
import com.park.utmstack.domain.compliance.enums.EvaluationRule;
56
import com.park.utmstack.repository.compliance.UtmComplianceControlConfigRepository;
67
import com.park.utmstack.service.dto.compliance.UtmComplianceControlConfigDto;
78
import com.park.utmstack.service.mapper.compliance.UtmComplianceControlConfigMapper;
89
import com.park.utmstack.service.mapper.compliance.UtmComplianceQueryConfigMapper;
10+
import com.park.utmstack.web.rest.errors.BadRequestAlertException;
911
import org.springframework.stereotype.Service;
1012

1113
import javax.transaction.Transactional;
@@ -30,6 +32,9 @@ public UtmComplianceControlConfigService(UtmComplianceControlConfigRepository re
3032

3133
@Transactional
3234
public UtmComplianceControlConfigDto create(UtmComplianceControlConfigDto dto) {
35+
36+
validateControlConfig(dto);
37+
3338
UtmComplianceControlConfig entity = mapper.toEntity(dto);
3439

3540
for (var qdto : dto.getQueriesConfigs()) {
@@ -46,6 +51,8 @@ public UtmComplianceControlConfigDto create(UtmComplianceControlConfigDto dto) {
4651
@Transactional
4752
public UtmComplianceControlConfigDto update(Long id, UtmComplianceControlConfigDto dto) {
4853

54+
validateControlConfig(dto);
55+
4956
UtmComplianceControlConfig entity = repository.findByIdWithQueries(id)
5057
.orElseThrow(() -> new RuntimeException("Control not found"));
5158

@@ -83,8 +90,23 @@ public UtmComplianceControlConfigDto findById(Long id) {
8390
return mapper.toDto(entity);
8491
}
8592

86-
//TODO: ELENA ????
87-
public List<UtmComplianceControlConfig> findAll() {
88-
return repository.findAll();
93+
private void validateControlConfig(UtmComplianceControlConfigDto dto) {
94+
if (dto.getQueriesConfigs() == null || dto.getQueriesConfigs().isEmpty()) {
95+
throw new BadRequestAlertException(
96+
"At least one query configuration is required",
97+
"utmComplianceControlConfig",
98+
"queriesConfigsEmpty"
99+
);
100+
}
101+
102+
for (var q : dto.getQueriesConfigs()) {
103+
if (q.getEvaluationRule() != EvaluationRule.NO_HITS_ALLOWED && q.getRuleValue() == null) {
104+
throw new BadRequestAlertException(
105+
"ruleValue is required when evaluationRule is not NO_HITS_ALLOWED",
106+
"utmComplianceQueryConfig",
107+
"ruleValueMissing"
108+
);
109+
}
110+
}
89111
}
90112
}

backend/src/main/java/com/park/utmstack/service/dto/compliance/UtmComplianceControlConfigDto.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,30 @@
33
import com.park.utmstack.domain.compliance.enums.ComplianceStrategy;
44
import lombok.Data;
55

6+
import javax.validation.constraints.NotNull;
7+
import javax.validation.constraints.Size;
68
import java.util.List;
79

810
@Data
911
public class UtmComplianceControlConfigDto {
12+
1013
private Long id;
14+
15+
@NotNull
1116
private Long standardSectionId;
17+
18+
@NotNull
19+
@Size(min = 10, max = 200)
1220
private String controlName;
21+
22+
@Size(max = 2000)
1323
private String controlSolution;
24+
25+
@Size(max = 2000)
1426
private String controlRemediation;
27+
28+
@NotNull
1529
private ComplianceStrategy controlStrategy;
30+
1631
private List<UtmComplianceQueryConfigDto> queriesConfigs;
17-
}
32+
}

backend/src/main/java/com/park/utmstack/service/dto/compliance/UtmComplianceQueryConfigDto.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,34 @@
33
import com.park.utmstack.domain.compliance.enums.EvaluationRule;
44
import lombok.Data;
55

6+
import javax.validation.constraints.NotNull;
7+
import javax.validation.constraints.Size;
8+
69
@Data
710
public class UtmComplianceQueryConfigDto {
11+
812
private Long id;
13+
14+
@NotNull
15+
@Size(min = 10, max = 200)
916
private String queryName;
17+
18+
@NotNull
19+
@Size(max = 2000)
1020
private String queryDescription;
21+
22+
@NotNull
23+
@Size(max = 2000)
1124
private String sqlQuery;
25+
26+
@NotNull
1227
private EvaluationRule evaluationRule;
28+
29+
private Integer ruleValue;
30+
31+
@NotNull
1332
private Long indexPatternId;
33+
34+
@NotNull
1435
private Long controlConfigId;
1536
}

backend/src/main/resources/config/liquibase/changelog/20260112001_create_table_compliance_control_config.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212
</column>
1313

1414
<column name="standard_section_id" type="BIGINT">
15-
<constraints nullable="true"/>
15+
<constraints nullable="false"/>
1616
</column>
1717

18-
<column name="control_name" type="VARCHAR(50)">
19-
<constraints nullable="true"/>
18+
<column name="control_name" type="VARCHAR(200)">
19+
<constraints nullable="false"/>
2020
</column>
2121

2222
<column name="control_solution" type="TEXT">
@@ -28,7 +28,7 @@
2828
</column>
2929

3030
<column name="control_strategy" type="VARCHAR(50)">
31-
<constraints nullable="true"/>
31+
<constraints nullable="false"/>
3232
</column>
3333
</createTable>
3434

backend/src/main/resources/config/liquibase/changelog/20260112002_create_table_compliance_query_config.xml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,27 @@
1010
<column name="id" type="BIGSERIAL">
1111
<constraints primaryKey="true" nullable="false"/>
1212
</column>
13-
<column name="query_name" type="TEXT">
14-
<constraints nullable="true"/>
13+
<column name="query_name" type="VARCHAR(200)">
14+
<constraints nullable="false"/>
1515
</column>
1616
<column name="query_description" type="TEXT">
17-
<constraints nullable="true"/>
17+
<constraints nullable="false"/>
1818
</column>
1919

2020
<column name="sql_query" type="TEXT">
21-
<constraints nullable="true"/>
21+
<constraints nullable="false"/>
2222
</column>
2323

2424
<column name="evaluation_rule" type="VARCHAR(100)">
25+
<constraints nullable="false"/>
26+
</column>
27+
28+
<column name="rule_value" type="INTEGER">
2529
<constraints nullable="true"/>
2630
</column>
2731

2832
<column name="index_pattern_id" type="BIGINT">
29-
<constraints nullable="true"/>
33+
<constraints nullable="false"/>
3034
</column>
3135

3236
<column name="control_config_id" type="BIGINT">

0 commit comments

Comments
 (0)