From eb949c158f13563c48bd14148935c8de62a05313 Mon Sep 17 00:00:00 2001 From: azizbekxm Date: Tue, 19 Dec 2023 17:55:30 +0500 Subject: [PATCH] [MODCON-127] - Implement ECS tenant soft deletion functionality --- .../TenantEntityToTenantConverter.java | 1 + .../consortia/repository/TenantRepository.java | 4 ++-- .../repository/UserTenantRepository.java | 4 ++++ .../service/impl/TenantServiceImpl.java | 17 +++++++---------- .../service/impl/UserTenantServiceImpl.java | 6 ++---- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/folio/consortia/domain/converter/TenantEntityToTenantConverter.java b/src/main/java/org/folio/consortia/domain/converter/TenantEntityToTenantConverter.java index a1f6dc1e..8bc238ae 100644 --- a/src/main/java/org/folio/consortia/domain/converter/TenantEntityToTenantConverter.java +++ b/src/main/java/org/folio/consortia/domain/converter/TenantEntityToTenantConverter.java @@ -15,6 +15,7 @@ public Tenant convert(TenantEntity source) { tenant.setCode(source.getCode()); tenant.setName(source.getName()); tenant.setIsCentral(source.getIsCentral()); + tenant.setIsDeleted(source.getIsDeleted()); return tenant; } } diff --git a/src/main/java/org/folio/consortia/repository/TenantRepository.java b/src/main/java/org/folio/consortia/repository/TenantRepository.java index ffac7bd1..44d1becc 100644 --- a/src/main/java/org/folio/consortia/repository/TenantRepository.java +++ b/src/main/java/org/folio/consortia/repository/TenantRepository.java @@ -14,10 +14,10 @@ @Repository public interface TenantRepository extends JpaRepository { - @Query("SELECT t FROM TenantEntity t WHERE t.consortiumId = ?1 and t.isDeleted = false") + @Query("SELECT t FROM TenantEntity t WHERE t.consortiumId = ?1 and (t.isDeleted IS NULL OR t.isDeleted = FALSE)") Page findByConsortiumId(UUID consortiumId, Pageable pageable); - @Query("SELECT t FROM TenantEntity t WHERE t.consortiumId = ?1 and t.isDeleted = false") + @Query("SELECT t FROM TenantEntity t WHERE t.consortiumId = ?1 and (t.isDeleted IS NULL OR t.isDeleted = FALSE)") List findByConsortiumId(UUID consortiumId); @Query("SELECT t FROM TenantEntity t WHERE t.isCentral = true") diff --git a/src/main/java/org/folio/consortia/repository/UserTenantRepository.java b/src/main/java/org/folio/consortia/repository/UserTenantRepository.java index bfb75257..81751a68 100644 --- a/src/main/java/org/folio/consortia/repository/UserTenantRepository.java +++ b/src/main/java/org/folio/consortia/repository/UserTenantRepository.java @@ -14,6 +14,10 @@ @Repository public interface UserTenantRepository extends JpaRepository { + + @Query("SELECT ut FROM UserTenantEntity ut WHERE ut.tenant.isDeleted IS NULL OR ut.tenant.isDeleted = FALSE") + Page getAll(Pageable pageable); + Page findByUserId(UUID userId, Pageable pageable); @Query("SELECT ut FROM UserTenantEntity ut WHERE ut.username= ?1 AND ut.tenant.id= ?2") diff --git a/src/main/java/org/folio/consortia/service/impl/TenantServiceImpl.java b/src/main/java/org/folio/consortia/service/impl/TenantServiceImpl.java index df0ff5c0..4b57c51f 100644 --- a/src/main/java/org/folio/consortia/service/impl/TenantServiceImpl.java +++ b/src/main/java/org/folio/consortia/service/impl/TenantServiceImpl.java @@ -56,8 +56,7 @@ public class TenantServiceImpl implements TenantService { private static final String SHADOW_ADMIN_PERMISSION_FILE_PATH = "permissions/admin-user-permissions.csv"; private static final String SHADOW_SYSTEM_USER_PERMISSION_FILE_PATH = "permissions/system-user-permissions.csv"; private static final String TENANTS_IDS_NOT_MATCHED_ERROR_MSG = "Request body tenantId and path param tenantId should be identical"; - private static final String TENANT_HAS_ACTIVE_USER_ASSOCIATIONS_ERROR_MSG = "Cannot delete tenant with ID {tenantId} because it has an association with a user. " - + "Please remove the user association before attempting to delete the tenant."; + private static final String DUMMY_USERNAME = "dummy_user"; @Value("${folio.system-user.username}") private String systemUserUsername; @@ -91,8 +90,7 @@ public TenantCollection get(UUID consortiumId, Integer offset, Integer limit) { public TenantCollection getAll(UUID consortiumId) { TenantCollection result = new TenantCollection(); List list = tenantRepository.findByConsortiumId(consortiumId) - .stream() - .map(o -> converter.convert(o, Tenant.class)).toList(); + .stream().map(o -> converter.convert(o, Tenant.class)).toList(); result.setTenants(list); result.setTotalRecords(list.size()); return result; @@ -198,9 +196,6 @@ public void delete(UUID consortiumId, String tenantId) { if (tenant.isEmpty()) { throw new ResourceNotFoundException("id", tenantId); } - if (userTenantRepository.existsByTenantId(tenantId)) { - throw new IllegalArgumentException(TENANT_HAS_ACTIVE_USER_ASSOCIATIONS_ERROR_MSG); - } if (tenant.get().getIsCentral()) { throw new IllegalArgumentException(String.format("central tenant %s cannot be deleted", tenantId)); } @@ -211,9 +206,9 @@ public void delete(UUID consortiumId, String tenantId) { cleanupService.clearPublicationTables(); tenantRepository.save(softDeletedTenant); - try (var ignored = new FolioExecutionContextSetter(contextHelper.getSystemUserFolioExecutionContext(tenantId))) { - userTenantsClient.deleteUserTenants(); - } +// try (var ignored = new FolioExecutionContextSetter(contextHelper.getSystemUserFolioExecutionContext(tenantId))) { +// userTenantsClient.deleteUserTenants(); +// } } private Tenant saveTenant(UUID consortiumId, Tenant tenantDto, SetupStatusEnum setupStatus) { @@ -314,6 +309,7 @@ private TenantEntity toTenantEntity(UUID consortiumId, Tenant tenantDto) { entity.setCode(tenantDto.getCode()); entity.setIsCentral(tenantDto.getIsCentral()); entity.setConsortiumId(consortiumId); + entity.setIsDeleted(tenantDto.getIsDeleted()); return entity; } @@ -325,6 +321,7 @@ private TenantDetailsEntity toTenantDetailsEntity(UUID consortiumId, Tenant tena entity.setIsCentral(tenantDto.getIsCentral()); entity.setConsortiumId(consortiumId); entity.setSetupStatus(setupStatus); + entity.setIsDeleted(tenantDto.getIsDeleted()); return entity; } diff --git a/src/main/java/org/folio/consortia/service/impl/UserTenantServiceImpl.java b/src/main/java/org/folio/consortia/service/impl/UserTenantServiceImpl.java index 9db279a3..89b69b21 100644 --- a/src/main/java/org/folio/consortia/service/impl/UserTenantServiceImpl.java +++ b/src/main/java/org/folio/consortia/service/impl/UserTenantServiceImpl.java @@ -68,10 +68,8 @@ public class UserTenantServiceImpl implements UserTenantService { public UserTenantCollection get(UUID consortiumId, Integer offset, Integer limit) { consortiumService.checkConsortiumExistsOrThrow(consortiumId); var result = new UserTenantCollection(); - Page userTenantPage = userTenantRepository.findAll(PageRequest.of(offset, limit)); - result.setUserTenants(userTenantPage.stream() - .filter(ut -> !ut.getTenant().getIsDeleted()) - .map(o -> converter.convert(o, UserTenant.class)).toList()); + Page userTenantPage = userTenantRepository.getAll(PageRequest.of(offset, limit)); + result.setUserTenants(userTenantPage.map(o -> converter.convert(o, UserTenant.class)).getContent()); result.setTotalRecords((int) userTenantPage.getTotalElements()); return result; }