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:
parent
eb3de1342b
commit
0305694baa
@ -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)
|
||||||
|
|||||||
@ -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!");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user