RED-2583 conflict with deleted dossierTemplate name

- change entity attribute from boolean delete to OffsetDateTime softDeleteTime
- remove unique constraint for name of dossier template
- add a unique constraint on table on columns: name and softDeleteTime
This commit is contained in:
devplant 2021-11-03 11:53:55 +02:00
parent eb3de1342b
commit 0305694baa
4 changed files with 13 additions and 17 deletions

View File

@ -21,13 +21,13 @@ import java.util.Set;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Table(name = "dossier_template") @Table(name = "dossier_template", uniqueConstraints={@UniqueConstraint(columnNames = {"name", "soft_delete_time"})})
public class DossierTemplateEntity { public class DossierTemplateEntity {
@Id @Id
private String id; private String id;
@Column(unique = true) @Column(name = "name")
private String name; private String name;
@Column(length = 4000) @Column(length = 4000)
@ -51,8 +51,8 @@ public class DossierTemplateEntity {
@Column @Column
private OffsetDateTime validTo; private OffsetDateTime validTo;
@Column @Column(name = "soft_delete_time")
private boolean deleted; private OffsetDateTime softDeleteTime;
@ElementCollection @ElementCollection
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)

View File

@ -57,7 +57,7 @@ public class DossierTemplatePersistenceService {
} }
public DossierTemplateEntity getDossierTemplate(String dossierTemplateId) { public DossierTemplateEntity getDossierTemplate(String dossierTemplateId) {
return dossierTemplateRepository.findByIdAndDeleted(dossierTemplateId, false).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId))); return dossierTemplateRepository.findByIdAndNotDeleted(dossierTemplateId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_TEMPLATE_NOT_FOUND_MESSAGE, dossierTemplateId)));
} }
@Transactional @Transactional
@ -68,7 +68,7 @@ public class DossierTemplatePersistenceService {
dossierTemplate.setModifiedBy(deletingUserId); dossierTemplate.setModifiedBy(deletingUserId);
dossierTemplate.setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplate.setDateModified(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
dossierTemplate.setDeleted(true); dossierTemplate.setSoftDeleteTime(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
} else { } else {
throw new BadRequestException("Cannot delete dossier template with active dossiers!"); throw new BadRequestException("Cannot delete dossier template with active dossiers!");
} }

View File

@ -9,8 +9,9 @@ import java.util.Optional;
public interface DossierTemplateRepository extends JpaRepository<DossierTemplateEntity, String> { public interface DossierTemplateRepository extends JpaRepository<DossierTemplateEntity, String> {
@Query("select d from DossierTemplateEntity d where d.deleted = false or d.deleted is null") @Query("select d from DossierTemplateEntity d where d.softDeleteTime is null")
List<DossierTemplateEntity> findAllWhereDeletedIsFalse(); List<DossierTemplateEntity> findAllWhereDeletedIsFalse();
Optional<DossierTemplateEntity> findByIdAndDeleted(String dossierTemplateId, boolean isDeleted); @Query("select d from DossierTemplateEntity d where d.id = :dossierTemplateId and d.softDeleteTime is null")
Optional<DossierTemplateEntity> findByIdAndNotDeleted(String dossierTemplateId);
} }

View File

@ -24,12 +24,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
try {
dossierTemplateTesterAndProvider.provideTestTemplate();
} catch (FeignException e) {
assertThat(e.status()).isEqualTo(409);
}
var allTemplates = dossierTemplateClient.getAllDossierTemplates(); var allTemplates = dossierTemplateClient.getAllDossierTemplates();
assertThat(allTemplates.size()).isEqualTo(1); assertThat(allTemplates.size()).isEqualTo(1);
assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate); assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate);
@ -49,11 +43,12 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedTemplate).isEqualTo(updated); assertThat(loadedTemplate).isEqualTo(updated);
dossierTemplateClient.getAllDossierTemplates().forEach(template -> { dossierTemplateClient.getAllDossierTemplates().forEach(template -> dossierTemplateClient.deleteDossierTemplate(template.getId(), "1"));
dossierTemplateClient.deleteDossierTemplate(template.getId(), "1");
});
assertThat(dossierTemplateClient.getAllDossierTemplates().isEmpty()).isTrue(); assertThat(dossierTemplateClient.getAllDossierTemplates().isEmpty()).isTrue();
updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru);
assertThat(updated.getName()).isEqualTo("Template 1 Update");
} }
} }