Skip to content

Commit da2cece

Browse files
committed
[#464] implement extended soft-delete functionality
1 parent 83e9175 commit da2cece

File tree

7 files changed

+86
-16
lines changed

7 files changed

+86
-16
lines changed

repository-postgresql/src/main/java/org/lfenergy/compas/scl/data/repository/postgresql/CompasSclDataPostgreSQLRepository.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -308,13 +308,22 @@ insert into scl_label(scl_id, major_version, minor_version, patch_version, label
308308

309309
@Override
310310
@Transactional(REQUIRED)
311-
public void delete(SclFileType type, UUID id) {
312-
var sql = """
311+
public void delete(SclFileType type, UUID id, boolean softDelete) {
312+
String sql;
313+
if (softDelete) {
314+
sql = """
313315
UPDATE scl_file
314-
SET scl_file.is_deleted = false
316+
SET scl_file.is_deleted = true
317+
where scl_file.id = ?
318+
and scl_file.type = ?
319+
""";
320+
} else {
321+
sql = """
322+
delete from scl_file
315323
where scl_file.id = ?
316324
and scl_file.type = ?
317325
""";
326+
}
318327

319328
try (var connection = dataSource.getConnection();
320329
var stmt = connection.prepareStatement(sql)) {
@@ -328,16 +337,28 @@ public void delete(SclFileType type, UUID id) {
328337

329338
@Override
330339
@Transactional(REQUIRED)
331-
public void delete(SclFileType type, UUID id, Version version) {
332-
var sql = """
340+
public void delete(SclFileType type, UUID id, Version version, boolean softDelete) {
341+
String sql;
342+
if (softDelete) {
343+
sql = """
333344
UPDATE scl_file
334-
SET scl_file.is_deleted = false
345+
SET scl_file.is_deleted = true
335346
where scl_file.id = ?
336347
and scl_file.type = ?
337348
and scl_file.major_version = ?
338349
and scl_file.minor_version = ?
339350
and scl_file.patch_version = ?
340351
""";
352+
} else {
353+
sql = """
354+
delete from scl_file
355+
where scl_file.id = ?
356+
and scl_file.type = ?
357+
and scl_file.major_version = ?
358+
and scl_file.minor_version = ?
359+
and scl_file.patch_version = ?
360+
""";
361+
}
341362

342363
try (var connection = dataSource.getConnection();
343364
var stmt = connection.prepareStatement(sql)) {

repository/src/main/java/org/lfenergy/compas/scl/data/repository/CompasSclDataRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public interface CompasSclDataRepository {
9191
* @param type The type of SCL where to find the SCL File
9292
* @param id The ID of the SCL File to delete.
9393
*/
94-
void delete(SclFileType type, UUID id);
94+
void delete(SclFileType type, UUID id, boolean softDelete);
9595

9696
/**
9797
* Delete passed versions for a specific SCL File using its ID.
@@ -100,5 +100,5 @@ public interface CompasSclDataRepository {
100100
* @param id The ID of the SCL File to delete.
101101
* @param version The version of that SCL File to delete.
102102
*/
103-
void delete(SclFileType type, UUID id, Version version);
103+
void delete(SclFileType type, UUID id, Version version, boolean softDelete);
104104
}

service/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ SPDX-License-Identifier: Apache-2.0
4949
<artifactId>log4j-core</artifactId>
5050
<scope>provided</scope>
5151
</dependency>
52+
<dependency>
53+
<groupId>org.eclipse.microprofile.config</groupId>
54+
<artifactId>microprofile-config-api</artifactId>
55+
</dependency>
5256

5357
<!-- Test Dependencies -->
5458
<dependency>

service/src/main/java/org/lfenergy/compas/scl/data/service/CompasSclDataService.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,15 @@ public class CompasSclDataService {
4343
private final CompasSclDataRepository repository;
4444
private final ElementConverter converter;
4545
private final SclElementProcessor sclElementProcessor;
46+
private final FeatureFlagsConfiguration featureFlagsConfiguration;
4647

4748
@Inject
4849
public CompasSclDataService(CompasSclDataRepository repository, ElementConverter converter,
49-
SclElementProcessor sclElementProcessor) {
50+
SclElementProcessor sclElementProcessor, FeatureFlagsConfiguration featureFlagsConfiguration) {
5051
this.repository = repository;
5152
this.converter = converter;
5253
this.sclElementProcessor = sclElementProcessor;
54+
this.featureFlagsConfiguration = featureFlagsConfiguration;
5355
}
5456

5557
/**
@@ -215,7 +217,7 @@ public String update(SclFileType type, UUID id, ChangeSetType changeSetType, Str
215217
*/
216218
@Transactional(REQUIRED)
217219
public void delete(SclFileType type, UUID id) {
218-
repository.delete(type, id);
220+
repository.delete(type, id, featureFlagsConfiguration.isSoftDeleteEnabled());
219221
}
220222

221223
/**
@@ -227,7 +229,7 @@ public void delete(SclFileType type, UUID id) {
227229
*/
228230
@Transactional(REQUIRED)
229231
public void delete(SclFileType type, UUID id, Version version) {
230-
repository.delete(type, id, version);
232+
repository.delete(type, id, version, featureFlagsConfiguration.isSoftDeleteEnabled());
231233
}
232234

233235
/**
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.lfenergy.compas.scl.data.service;
2+
3+
import jakarta.enterprise.context.ApplicationScoped;
4+
import org.eclipse.microprofile.config.inject.ConfigProperty;
5+
6+
@ApplicationScoped
7+
public class FeatureFlagsConfiguration {
8+
9+
@ConfigProperty(name = "compas.scl-data-service.features.soft-delete-enabled", defaultValue = "false")
10+
boolean softDeleteEnabled;
11+
12+
public boolean isSoftDeleteEnabled() {
13+
return softDeleteEnabled;
14+
}
15+
}

service/src/test/java/org/lfenergy/compas/scl/data/service/CompasSclDataServiceTest.java

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,11 @@ class CompasSclDataServiceTest {
4848

4949
private final ElementConverter converter = new ElementConverter();
5050
private final SclElementProcessor processor = new SclElementProcessor();
51+
private final FeatureFlagsConfiguration featureFlagsConfiguration = new FeatureFlagsConfiguration();
5152

5253
@BeforeEach
5354
void beforeEach() {
54-
compasSclDataService = new CompasSclDataService(compasSclDataRepository, converter, processor);
55+
compasSclDataService = new CompasSclDataService(compasSclDataRepository, converter, processor, featureFlagsConfiguration);
5556
}
5657

5758
@Test
@@ -304,23 +305,50 @@ void update_WhenCalledWithXMLStringWithoutSCL_ThenCompasExceptionThrown() {
304305
void delete_WhenCalledWithoutVersion_ThenRepositoryIsCalled() {
305306
var uuid = UUID.randomUUID();
306307

307-
doNothing().when(compasSclDataRepository).delete(SCL_TYPE, uuid);
308+
doNothing().when(compasSclDataRepository).delete(SCL_TYPE, uuid, Boolean.FALSE);
308309

310+
featureFlagsConfiguration.softDeleteEnabled = Boolean.FALSE;
309311
compasSclDataService.delete(SCL_TYPE, uuid);
310312

311-
verify(compasSclDataRepository).delete(SCL_TYPE, uuid);
313+
verify(compasSclDataRepository).delete(SCL_TYPE, uuid, Boolean.FALSE);
312314
}
313315

314316
@Test
315317
void delete_WhenCalledWithVersion_ThenRepositoryIsCalled() {
316318
var uuid = UUID.randomUUID();
317319
var version = new Version(1, 0, 0);
318320

319-
doNothing().when(compasSclDataRepository).delete(SCL_TYPE, uuid, version);
321+
doNothing().when(compasSclDataRepository).delete(SCL_TYPE, uuid, version, Boolean.FALSE);
320322

323+
featureFlagsConfiguration.softDeleteEnabled = Boolean.FALSE;
321324
compasSclDataService.delete(SCL_TYPE, uuid, version);
322325

323-
verify(compasSclDataRepository).delete(SCL_TYPE, uuid, version);
326+
verify(compasSclDataRepository).delete(SCL_TYPE, uuid, version, Boolean.FALSE);
327+
}
328+
329+
@Test
330+
void deleteWithSoftDelete_WhenCalledWithoutVersion_ThenRepositoryIsCalled() {
331+
var uuid = UUID.randomUUID();
332+
333+
doNothing().when(compasSclDataRepository).delete(SCL_TYPE, uuid, Boolean.TRUE);
334+
335+
featureFlagsConfiguration.softDeleteEnabled = Boolean.TRUE;
336+
compasSclDataService.delete(SCL_TYPE, uuid);
337+
338+
verify(compasSclDataRepository).delete(SCL_TYPE, uuid, Boolean.TRUE);
339+
}
340+
341+
@Test
342+
void deleteWithSoftDelete_WhenCalledWithVersion_ThenRepositoryIsCalled() {
343+
var uuid = UUID.randomUUID();
344+
var version = new Version(1, 0, 0);
345+
346+
doNothing().when(compasSclDataRepository).delete(SCL_TYPE, uuid, version, Boolean.TRUE);
347+
348+
featureFlagsConfiguration.softDeleteEnabled = Boolean.TRUE;
349+
compasSclDataService.delete(SCL_TYPE, uuid, version);
350+
351+
verify(compasSclDataRepository).delete(SCL_TYPE, uuid, version, Boolean.TRUE);
324352
}
325353

326354
@Test

0 commit comments

Comments
 (0)