From 0dcc18776295855419b587024f61080b68656b50 Mon Sep 17 00:00:00 2001 From: Mathieu DEHARBE Date: Thu, 10 Oct 2024 11:27:02 +0200 Subject: [PATCH] optimize database requests Signed-off-by: Mathieu DEHARBE --- .../repositories/ModificationRepository.java | 6 ++++ .../NetworkModificationRepository.java | 30 +++++++++---------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java index 2ccbe0a55..f3f3a95ce 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java @@ -30,6 +30,12 @@ public interface ModificationRepository extends JpaRepository findMetadataIn(List uuids); + /** + * @return base data of the network modifications (those from the main table, not those specific to each modification) + */ + @Query(value = "SELECT new ModificationEntity(m.id, m.type, m.date, m.stashed, m.activated, m.messageType, m.messageValues) FROM ModificationEntity m WHERE m.id IN (?1)") + List findBaseDataByIdIn(List uuids); + @Query(value = "SELECT m FROM ModificationEntity m WHERE m.id IN (?1) ORDER BY m.modificationsOrder") List findAllByIdIn(List uuids); diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index c0349135e..33d3f2aea 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -316,15 +316,6 @@ public ModificationInfos getModificationInfo(UUID modificationUuid) { return getModificationInfos(optionalModificationEntity.get()); } - @Transactional(readOnly = true) - public ModificationInfos getMetadata(UUID modificationUuid) { - Optional optionalModificationEntity = modificationRepository.findById(modificationUuid); - if (!optionalModificationEntity.isPresent()) { - throw new NetworkModificationException(MODIFICATION_NOT_FOUND, modificationUuid.toString()); - } - return ModificationInfos.fromEntity(optionalModificationEntity.get()); - } - @Transactional // To have the 2 delete in the same transaction (atomic) public void deleteModificationGroup(UUID groupUuid, boolean errorOnGroupNotFound) { try { @@ -398,18 +389,27 @@ public List getModificationsInfos(@NonNull List uuids) } /** - * @param onlyMetadata if true, only returns the basic data common to all the modificaions + * @param onlyMetadata if true, only returns the basic data common to all the modifications * @return the data from all the network modification contained in the composite modification sent as parameters */ @Transactional(readOnly = true) public List getCompositeModificationsContentInfos(@NonNull List uuids, boolean onlyMetadata) { List entities = new ArrayList<>(); uuids.forEach(uuid -> { - List foundEntities = modificationRepository.findModificationIdsByCompositeModificationId(uuid); - List orderedModifications = foundEntities - .stream() - .map(onlyMetadata ? this::getMetadata : this::getModificationInfo) - .toList(); + List networkModificationsUuids = modificationRepository.findModificationIdsByCompositeModificationId(uuid); + List orderedModifications; + if (onlyMetadata) { + List networkModifications = modificationRepository.findBaseDataByIdIn(networkModificationsUuids); + orderedModifications = networkModifications + .stream() + .map(this::getModificationInfos) + .toList(); + } else { + orderedModifications = networkModificationsUuids + .stream() + .map(this::getModificationInfo) + .toList(); + } entities.addAll(orderedModifications); } );