Skip to content

Commit 3a27ff1

Browse files
committed
feat: add compliance control and query configuration tables with related DTOs and mappers
1 parent f36a597 commit 3a27ff1

6 files changed

Lines changed: 133 additions & 108 deletions

File tree

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,7 @@ public class UtmComplianceQueryConfig implements Serializable {
4949
)
5050
private UtmIndexPattern indexPattern;
5151

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-
)
52+
@ManyToOne(fetch = FetchType.LAZY)
53+
@JoinColumn(name = "control_config_id", nullable = false)
5954
private UtmComplianceControlConfig controlConfig;
6055
}

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

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package com.park.utmstack.service.compliance.config;
22

33
import com.park.utmstack.domain.compliance.UtmComplianceControlConfig;
4+
import com.park.utmstack.domain.compliance.UtmComplianceQueryConfig;
45
import com.park.utmstack.repository.compliance.UtmComplianceControlConfigRepository;
56
import com.park.utmstack.service.dto.compliance.UtmComplianceControlConfigDto;
67
import com.park.utmstack.service.mapper.compliance.UtmComplianceControlConfigMapper;
78
import com.park.utmstack.service.mapper.compliance.UtmComplianceQueryConfigMapper;
89
import org.springframework.stereotype.Service;
910

1011
import javax.transaction.Transactional;
11-
import java.util.ArrayList;
1212
import java.util.List;
13+
import java.util.Map;
14+
import java.util.stream.Collectors;
1315

1416
@Service
1517
public class UtmComplianceControlConfigService {
@@ -29,13 +31,10 @@ public UtmComplianceControlConfigService(UtmComplianceControlConfigRepository re
2931
@Transactional
3032
public UtmComplianceControlConfigDto create(UtmComplianceControlConfigDto dto) {
3133
UtmComplianceControlConfig entity = mapper.toEntity(dto);
32-
entity.setQueriesConfigs(new ArrayList<>());
33-
34-
entity = repository.save(entity);
3534

3635
for (var qdto : dto.getQueriesConfigs()) {
3736
var q = queryMapper.toEntity(qdto);
38-
q.setControlConfigId(entity.getId());
37+
q.setControlConfig(entity);
3938
entity.getQueriesConfigs().add(q);
4039
}
4140

@@ -44,24 +43,32 @@ public UtmComplianceControlConfigDto create(UtmComplianceControlConfigDto dto) {
4443
return mapper.toDto(entity);
4544
}
4645

47-
4846
@Transactional
4947
public UtmComplianceControlConfigDto update(Long id, UtmComplianceControlConfigDto dto) {
5048

51-
UtmComplianceControlConfig entity = repository.findById(id)
49+
UtmComplianceControlConfig entity = repository.findByIdWithQueries(id)
5250
.orElseThrow(() -> new RuntimeException("Control not found"));
5351

5452
mapper.updateEntity(entity, dto);
53+
54+
Map<Long, UtmComplianceQueryConfig> existing = entity.getQueriesConfigs()
55+
.stream()
56+
.collect(Collectors.toMap(UtmComplianceQueryConfig::getId, q -> q));
57+
5558
entity.getQueriesConfigs().clear();
5659

5760
for (var qdto : dto.getQueriesConfigs()) {
58-
var q = queryMapper.toEntity(qdto);
59-
q.setControlConfigId(id);
60-
entity.getQueriesConfigs().add(q);
61+
if (qdto.getId() != null && existing.containsKey(qdto.getId())) {
62+
var q = existing.get(qdto.getId());
63+
queryMapper.updateEntity(q, qdto);
64+
q.setControlConfig(entity);
65+
entity.getQueriesConfigs().add(q);
66+
} else {
67+
var q = queryMapper.toEntity(qdto);
68+
q.setControlConfig(entity);
69+
entity.getQueriesConfigs().add(q);
70+
}
6171
}
62-
63-
entity = repository.save(entity);
64-
6572
return mapper.toDto(entity);
6673
}
6774

backend/src/main/java/com/park/utmstack/service/mapper/compliance/UtmComplianceControlConfigMapper.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@
99
@Mapper(componentModel = "spring", uses = UtmComplianceQueryConfigMapper.class)
1010
public interface UtmComplianceControlConfigMapper {
1111

12+
@Mapping(target = "queriesConfigs", ignore = true)
1213
UtmComplianceControlConfig toEntity(UtmComplianceControlConfigDto dto);
1314

1415
UtmComplianceControlConfigDto toDto(UtmComplianceControlConfig entity);
1516

1617
@Mapping(target = "id", ignore = true)
17-
void updateEntity(@MappingTarget UtmComplianceControlConfig entity, UtmComplianceControlConfigDto dto
18-
);
18+
@Mapping(target = "queriesConfigs", ignore = true)
19+
void updateEntity(@MappingTarget UtmComplianceControlConfig entity, UtmComplianceControlConfigDto dto);
1920
}

backend/src/main/java/com/park/utmstack/service/mapper/compliance/UtmComplianceQueryConfigMapper.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,17 @@
44
import com.park.utmstack.service.dto.compliance.UtmComplianceQueryConfigDto;
55
import org.mapstruct.Mapper;
66
import org.mapstruct.Mapping;
7+
import org.mapstruct.MappingTarget;
78

89
@Mapper(componentModel = "spring")
910
public interface UtmComplianceQueryConfigMapper {
10-
11+
@Mapping(target = "controlConfig", ignore = true)
1112
UtmComplianceQueryConfig toEntity(UtmComplianceQueryConfigDto dto);
1213

14+
@Mapping(target = "controlConfigId", source = "controlConfig.id")
1315
UtmComplianceQueryConfigDto toDto(UtmComplianceQueryConfig entity);
16+
17+
@Mapping(target = "id", ignore = true)
18+
@Mapping(target = "controlConfig", ignore = true)
19+
void updateEntity(@MappingTarget UtmComplianceQueryConfig entity, UtmComplianceQueryConfigDto dto);
1420
}

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

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,48 @@
22
<databaseChangeLog
33
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
44
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5-
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
6-
7-
<changeSet id="20260112001" author="Elena">
8-
<createTable tableName="utm_compliance_control_config">
9-
10-
<column name="id" type="BIGSERIAL">
11-
<constraints primaryKey="true" nullable="false"/>
12-
</column>
13-
14-
<column name="standard_section_id" type="BIGINT">
15-
<constraints nullable="true"/>
16-
</column>
17-
18-
<column name="control_name" type="VARCHAR(50)">
19-
<constraints nullable="true"/>
20-
</column>
21-
22-
<column name="control_solution" type="TEXT">
23-
<constraints nullable="true"/>
24-
</column>
25-
26-
<column name="control_remediation" type="TEXT">
27-
<constraints nullable="true"/>
28-
</column>
29-
30-
<column name="control_strategy" type="VARCHAR(50)">
31-
<constraints nullable="true"/>
32-
</column>
33-
34-
</createTable>
35-
36-
<addForeignKeyConstraint
37-
baseTableName="utm_compliance_control_config"
38-
baseColumnNames="standard_section_id"
39-
referencedTableName="utm_compliance_standard_section"
40-
referencedColumnNames="id"
41-
constraintName="fk_control_config_section"/>
42-
43-
<createIndex
44-
indexName="idx_control_config_section"
45-
tableName="utm_compliance_control_config">
46-
<column name="standard_section_id"/>
47-
</createIndex>
48-
49-
</changeSet>
5+
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
6+
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
7+
8+
<changeSet id="20260112001" author="Elena">
9+
<createTable tableName="utm_compliance_control_config">
10+
<column name="id" type="BIGSERIAL">
11+
<constraints primaryKey="true" nullable="false"/>
12+
</column>
13+
14+
<column name="standard_section_id" type="BIGINT">
15+
<constraints nullable="true"/>
16+
</column>
17+
18+
<column name="control_name" type="VARCHAR(50)">
19+
<constraints nullable="true"/>
20+
</column>
21+
22+
<column name="control_solution" type="TEXT">
23+
<constraints nullable="true"/>
24+
</column>
25+
26+
<column name="control_remediation" type="TEXT">
27+
<constraints nullable="true"/>
28+
</column>
29+
30+
<column name="control_strategy" type="VARCHAR(50)">
31+
<constraints nullable="true"/>
32+
</column>
33+
</createTable>
34+
35+
<addForeignKeyConstraint
36+
baseTableName="utm_compliance_control_config"
37+
baseColumnNames="standard_section_id"
38+
referencedTableName="utm_compliance_standard_section"
39+
referencedColumnNames="id"
40+
constraintName="fk_control_config_section"/>
41+
42+
<createIndex
43+
indexName="idx_control_config_section"
44+
tableName="utm_compliance_control_config">
45+
<column name="standard_section_id"/>
46+
</createIndex>
47+
48+
</changeSet>
5049
</databaseChangeLog>

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

Lines changed: 57 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,47 +2,64 @@
22
<databaseChangeLog
33
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
44
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5-
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
5+
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
6+
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
67

78
<changeSet id="20260112002" author="Elena">
8-
<createTable tableName="utm_compliance_query_config">
9-
<column name="id" type="BIGSERIAL">
10-
<constraints primaryKey="true" nullable="false"/>
11-
</column>
12-
13-
<column name="query_description" type="TEXT">
14-
<constraints nullable="true"/>
15-
</column>
16-
17-
<column name="sql_query" type="TEXT">
18-
<constraints nullable="true"/>
19-
</column>
20-
21-
<column name="evaluation_rule" type="VARCHAR(100)">
22-
<constraints nullable="true"/>
23-
</column>
24-
25-
<column name="index_pattern_id" type="BIGINT">
26-
<constraints nullable="true"/>
27-
</column>
28-
29-
<column name="control_config_id" type="BIGINT">
30-
<constraints nullable="true"/>
31-
</column>
32-
33-
</createTable>
34-
35-
<addForeignKeyConstraint
36-
baseTableName="utm_compliance_query_config"
37-
baseColumnNames="index_pattern_id"
38-
referencedTableName="utm_index_pattern"
39-
referencedColumnNames="id"
40-
constraintName="fk_query_config_index_pattern"/>
41-
42-
<createIndex
43-
indexName="idx_query_config_index_pattern"
44-
tableName="utm_compliance_query_config">
45-
<column name="index_pattern_id"/>
46-
</createIndex>
9+
<createTable tableName="utm_compliance_query_config">
10+
<column name="id" type="BIGSERIAL">
11+
<constraints primaryKey="true" nullable="false"/>
12+
</column>
13+
14+
<column name="query_description" type="TEXT">
15+
<constraints nullable="true"/>
16+
</column>
17+
18+
<column name="sql_query" type="TEXT">
19+
<constraints nullable="true"/>
20+
</column>
21+
22+
<column name="evaluation_rule" type="VARCHAR(100)">
23+
<constraints nullable="true"/>
24+
</column>
25+
26+
<column name="index_pattern_id" type="BIGINT">
27+
<constraints nullable="true"/>
28+
</column>
29+
30+
<column name="control_config_id" type="BIGINT">
31+
<constraints nullable="false"/>
32+
</column>
33+
34+
</createTable>
35+
36+
<addForeignKeyConstraint
37+
baseTableName="utm_compliance_query_config"
38+
baseColumnNames="index_pattern_id"
39+
referencedTableName="utm_index_pattern"
40+
referencedColumnNames="id"
41+
constraintName="fk_query_config_index_pattern"/>
42+
43+
<createIndex
44+
indexName="idx_query_config_index_pattern"
45+
tableName="utm_compliance_query_config">
46+
<column name="index_pattern_id"/>
47+
</createIndex>
48+
49+
<addForeignKeyConstraint
50+
baseTableName="utm_compliance_query_config"
51+
baseColumnNames="control_config_id"
52+
referencedTableName="utm_compliance_control_config"
53+
referencedColumnNames="id"
54+
constraintName="fk_query_config_control"
55+
onDelete="CASCADE"/>
56+
57+
<createIndex
58+
indexName="idx_query_config_control"
59+
tableName="utm_compliance_query_config">
60+
<column name="control_config_id"/>
61+
</createIndex>
62+
4763
</changeSet>
64+
4865
</databaseChangeLog>

0 commit comments

Comments
 (0)