diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/DmpReferenceEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/DmpReferenceEntity.java index ded6a3c48..7dc8894ca 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/DmpReferenceEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/DmpReferenceEntity.java @@ -1,9 +1,8 @@ package eu.eudat.data; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import eu.eudat.commons.enums.IsActive; +import eu.eudat.data.converters.enums.IsActiveConverter; +import jakarta.persistence.*; import java.time.Instant; import java.util.UUID; @@ -27,6 +26,7 @@ public class DmpReferenceEntity { @Column(name = "data") private String data; + public static final String _data = "data"; @Column(name = "created_at", nullable = false) private Instant createdAt; @@ -36,7 +36,10 @@ public class DmpReferenceEntity { private Instant updatedAt; public static final String _updatedAt = "updatedAt"; - public static final String _data = "data"; + @Column(name = "is_active", nullable = false) + @Convert(converter = IsActiveConverter.class) + private IsActive isActive; + public static final String _isActive = "isActive"; public UUID getId() { return id; @@ -85,4 +88,12 @@ public class DmpReferenceEntity { public void setUpdatedAt(Instant updatedAt) { this.updatedAt = updatedAt; } + + public IsActive getIsActive() { + return isActive; + } + + public void setIsActive(IsActive isActive) { + this.isActive = isActive; + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/deleter/DmpReferenceDeleter.java b/dmp-backend/core/src/main/java/eu/eudat/model/deleter/DmpReferenceDeleter.java index 5953ed6e3..89e3c2b69 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/deleter/DmpReferenceDeleter.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/deleter/DmpReferenceDeleter.java @@ -1,5 +1,6 @@ package eu.eudat.model.deleter; +import eu.eudat.commons.enums.IsActive; import eu.eudat.data.DmpReferenceEntity; import eu.eudat.query.DmpReferenceQuery; import gr.cite.tools.data.deleter.Deleter; @@ -15,6 +16,7 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import javax.management.InvalidApplicationException; +import java.time.Instant; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -64,6 +66,8 @@ public class DmpReferenceDeleter implements Deleter { for (DmpReferenceEntity item : data) { logger.trace("deleting item {}", item.getId()); logger.trace("updating item"); + item.setUpdatedAt(Instant.now()); + item.setIsActive(IsActive.Inactive); this.entityManager.merge(item); logger.trace("updated item"); } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java index 1ac3e701e..879a78eb3 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java @@ -19,6 +19,7 @@ import eu.eudat.model.Dmp; import eu.eudat.model.Reference; import eu.eudat.model.builder.DmpBuilder; import eu.eudat.model.deleter.DmpDeleter; +import eu.eudat.model.deleter.DmpReferenceDeleter; import eu.eudat.model.deleter.ReferenceDeleter; import eu.eudat.model.persist.DmpPersist; import eu.eudat.model.persist.ReferencePersist; @@ -215,6 +216,8 @@ public class DmpServiceImpl implements DmpService { List updatedReferencesIds = models.stream().map(ReferencePersist::getId).filter(this.conventionService::isValidGuid).distinct().toList(); List toDelete = existingReferences.stream().filter(x -> !updatedReferencesIds.contains(x.getId())).toList(); + List dmpReferenceRecordsToDelete = this.queryFactory.query(DmpReferenceQuery.class).referenceIds(toDelete.stream().map(ReferenceEntity::getId).toList()).collect(); + this.deleterFactory.deleter(DmpReferenceDeleter.class).delete(dmpReferenceRecordsToDelete); this.deleterFactory.deleter(ReferenceDeleter.class).delete(toDelete); Map existingReferencesLookup = existingReferences.stream().collect(Collectors.toMap(ReferenceEntity::getId, x -> x)); @@ -236,6 +239,15 @@ public class DmpServiceImpl implements DmpService { data.setId(UUID.randomUUID()); data.setIsActive(IsActive.Active); data.setCreatedAt(Instant.now()); + + DmpReferenceEntity dmpReference = new DmpReferenceEntity(); + dmpReference.setReferenceId(data.getId()); + dmpReference.setDmpId(dmpId); + dmpReference.setCreatedAt(Instant.now()); + dmpReference.setUpdatedAt(Instant.now()); + dmpReference.setIsActive(IsActive.Active); + //TODO: Add data persistence here + this.entityManager.persist(dmpReference); } data.setDefinition(this.xmlHandlingService.toXmlSafe(this.buildDefinitionEntity(model.getDefinition())));