@@ -115,6 +115,11 @@ public List<ModificationEntity> saveModifications(UUID groupUuid, List<Modificat
115115 @ Transactional // To have all create in the same transaction (atomic)
116116 // TODO Remove transaction when errors will no longer be sent to the front
117117 public List <ModificationEntity > saveModificationInfos (UUID groupUuid , List <ModificationInfos > modifications ) {
118+ return saveModificationInfosNonTransactional (groupUuid , modifications );
119+ }
120+
121+ private List <ModificationEntity > saveModificationInfosNonTransactional (UUID groupUuid ,
122+ List <ModificationInfos > modifications ) {
118123 List <ModificationEntity > entities = modifications .stream ().map (ModificationEntity ::fromDTO ).toList ();
119124
120125 return saveModificationsNonTransactional (groupUuid , entities );
@@ -165,6 +170,20 @@ private List<ModificationEntity> saveModificationsNonTransactional(UUID groupUui
165170 @ Transactional
166171 // TODO Remove transaction when errors will no longer be sent to the front
167172 public List <ModificationEntity > moveModifications (UUID destinationGroupUuid , UUID originGroupUuid , List <UUID > modificationsToMoveUUID , UUID referenceModificationUuid ) {
173+ return moveModificationsNonTransactional (destinationGroupUuid , originGroupUuid , modificationsToMoveUUID , referenceModificationUuid );
174+ }
175+
176+ @ Transactional
177+ public List <ModificationEntity > moveModificationsFullDto (UUID destinationGroupUuid , UUID originGroupUuid , List <UUID > modificationsToMoveUUID , UUID referenceModificationUuid ) {
178+ List <ModificationEntity > movedModifications = moveModificationsNonTransactional (destinationGroupUuid , originGroupUuid , modificationsToMoveUUID , referenceModificationUuid );
179+ // Force load subentities/collections, needed later when the transaction is closed
180+ // to avoid LazyInitialisationException. Maybe better to refactor to return the dto ?
181+ // And refactor to more efficiently load the data (avoid 1+N) ?
182+ movedModifications .forEach (ModificationEntity ::toModificationInfos );
183+ return movedModifications ;
184+ }
185+
186+ private List <ModificationEntity > moveModificationsNonTransactional (UUID destinationGroupUuid , UUID originGroupUuid , List <UUID > modificationsToMoveUUID , UUID referenceModificationUuid ) {
168187 // read origin group and modifications
169188 ModificationGroupEntity originModificationGroupEntity = getModificationGroup (originGroupUuid );
170189 List <ModificationEntity > originModificationEntities = originModificationGroupEntity .getModifications ()
@@ -443,7 +462,7 @@ public ModificationInfos getModificationInfos(ModificationEntity modificationEnt
443462 return modificationEntity .toModificationInfos ();
444463 }
445464
446- public List <ModificationEntity > getModificationsEntities (List <UUID > groupUuids , boolean onlyStashed ) {
465+ private List <ModificationEntity > getModificationsEntitiesNonTransactional (List <UUID > groupUuids , boolean onlyStashed ) {
447466 Stream <ModificationEntity > entityStream = groupUuids .stream ().flatMap (this ::getModificationEntityStream );
448467 if (onlyStashed ) {
449468 return entityStream .filter (m -> m .getStashed () == onlyStashed ).toList ();
@@ -452,6 +471,21 @@ public List<ModificationEntity> getModificationsEntities(List<UUID> groupUuids,
452471 }
453472 }
454473
474+ //TODO ? should be @Transactional(readOnly = true)
475+ public List <ModificationEntity > getModificationsEntities (List <UUID > groupUuids , boolean onlyStashed ) {
476+ return getModificationsEntitiesNonTransactional (groupUuids , onlyStashed );
477+ }
478+
479+ @ Transactional (readOnly = true )
480+ public List <ModificationEntity > getModificationsEntitiesFullDto (List <UUID > groupUuids , boolean onlyStashed ) {
481+ List <ModificationEntity > modificationsEntities = getModificationsEntitiesNonTransactional (groupUuids , onlyStashed );
482+ // Force load subentities/collections, needed later when the transaction is closed
483+ // to avoid LazyInitialisationException. Maybe better to refactor to return the dto ?
484+ // And refactor to more efficiently load the data (avoid 1+N) ?
485+ modificationsEntities .forEach (ModificationEntity ::toModificationInfos );
486+ return modificationsEntities ;
487+ }
488+
455489 @ Transactional (readOnly = true )
456490 public ModificationInfos getModificationInfo (UUID modificationUuid ) {
457491 return getModificationInfos (getModificationEntity (modificationUuid ));
@@ -525,6 +559,10 @@ public Integer getModificationsCount(@NonNull UUID groupUuid, boolean stashed) {
525559
526560 @ Transactional (readOnly = true )
527561 public List <ModificationInfos > getModificationsInfos (@ NonNull List <UUID > uuids ) {
562+ return getModificationsInfosNonTransactional (uuids );
563+ }
564+
565+ private List <ModificationInfos > getModificationsInfosNonTransactional (List <UUID > uuids ) {
528566 // Spring-data findAllById doc says: the order of elements in the result is not guaranteed
529567 Map <UUID , ModificationEntity > entities = modificationRepository .findAllById (uuids )
530568 .stream ()
@@ -553,6 +591,10 @@ public List<ModificationInfos> getBasicNetworkModificationsFromComposite(@NonNul
553591
554592 @ Transactional (readOnly = true )
555593 public List <ModificationInfos > getCompositeModificationsInfos (@ NonNull List <UUID > uuids ) {
594+ return getCompositeModificationsInfosNonTransactional (uuids );
595+ }
596+
597+ private List <ModificationInfos > getCompositeModificationsInfosNonTransactional (@ NonNull List <UUID > uuids ) {
556598 List <ModificationInfos > entities = new ArrayList <>();
557599 uuids .forEach (uuid -> {
558600 List <UUID > foundEntities = modificationRepository .findModificationIdsByCompositeModificationId (uuid );
@@ -568,6 +610,10 @@ public List<ModificationInfos> getCompositeModificationsInfos(@NonNull List<UUID
568610
569611 @ Transactional (readOnly = true )
570612 public List <ModificationInfos > getActiveModificationsInfos (@ NonNull UUID groupUuid ) {
613+ return getActiveModificationsInfosNonTransactional (groupUuid );
614+ }
615+
616+ private List <ModificationInfos > getActiveModificationsInfosNonTransactional (UUID groupUuid ) {
571617 return getModificationEntityStream (groupUuid ).filter (m -> !m .getStashed ()).map (this ::getModificationInfos ).toList ();
572618 }
573619
@@ -812,4 +858,16 @@ private void deleteTabularModificationSubModifications(TabularModificationEntity
812858 throw new UnsupportedOperationException (String .format ("No sub-modifications deletion for modification type: %s" , tabularModificationType ));
813859 }
814860 }
861+
862+ @ Transactional
863+ public List <ModificationEntity > saveDuplicateModifications (@ NonNull UUID targetGroupUuid , UUID originGroupUuid , @ NonNull List <UUID > modificationsUuids ) {
864+ List <ModificationInfos > modificationInfos = originGroupUuid != null ? getActiveModificationsInfosNonTransactional (originGroupUuid ) : getModificationsInfosNonTransactional (modificationsUuids );
865+ return saveModificationInfosNonTransactional (targetGroupUuid , modificationInfos );
866+ }
867+
868+ @ Transactional
869+ public List <ModificationEntity > saveCompositeModifications (@ NonNull UUID targetGroupUuid , @ NonNull List <UUID > modificationsUuids ) {
870+ List <ModificationInfos > modificationInfos = getCompositeModificationsInfosNonTransactional (modificationsUuids );
871+ return saveModificationInfosNonTransactional (targetGroupUuid , modificationInfos );
872+ }
815873}
0 commit comments