Skip to content

Commit 675cae2

Browse files
feat(tasks): Delete all inactive tenants found during TENANT_DELETION task iteration
1 parent 18c73c4 commit 675cae2

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

dossierfacile-task-scheduler/src/main/java/fr/dossierfacile/scheduler/tasks/tenantwarning/TenantDeletionTask.java

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,23 @@
44
import lombok.RequiredArgsConstructor;
55
import lombok.extern.slf4j.Slf4j;
66
import org.springframework.beans.factory.annotation.Value;
7+
import org.springframework.data.domain.Page;
78
import org.springframework.data.domain.PageRequest;
89
import org.springframework.scheduling.annotation.Scheduled;
910
import org.springframework.stereotype.Service;
1011

1112
import java.time.LocalDateTime;
12-
import java.util.List;
1313

1414
import static fr.dossierfacile.scheduler.tasks.TaskName.TENANT_DELETION;
15+
import static java.time.LocalDateTime.*;
1516

1617
@Slf4j
1718
@Service
1819
@RequiredArgsConstructor
1920
public class TenantDeletionTask {
2021

22+
private static final int PAGE_SIZE = 1000;
23+
2124
@Value("${months_for_deletion_of_archived_tenants:12}")
2225
private Integer monthsForDeletionOfTenants;
2326
private final TenantRepository tenantRepository;
@@ -26,16 +29,27 @@ public class TenantDeletionTask {
2629
@Scheduled(cron = "${cron.account-deletion}")
2730
private void deleteOldAccounts() {
2831
LoggingContext.startTask(TENANT_DELETION);
29-
List<Long> tenantIdsToDelete = getTenantsToDelete();
30-
tenantIdsToDelete.forEach(this::deleteTenant);
31-
log.info("Deleted {} inactive old tenants", tenantIdsToDelete.size());
32+
33+
LocalDateTime limitDate = now().minusMonths(monthsForDeletionOfTenants);
34+
deleteTenantsNotActiveSince(limitDate);
35+
3236
LoggingContext.endTask();
3337
}
3438

35-
private List<Long> getTenantsToDelete() {
36-
LocalDateTime limitDate = LocalDateTime.now().minusMonths(monthsForDeletionOfTenants);
37-
PageRequest pageRequest = PageRequest.of(0, 5000);
38-
return tenantRepository.findByLastUpdateDate(limitDate, pageRequest);
39+
private void deleteTenantsNotActiveSince(LocalDateTime limitDate) {
40+
Page<Long> toDelete = tenantRepository.findByLastUpdateDate(limitDate, PageRequest.of(0, PAGE_SIZE));
41+
log.info("Found {} inactive tenants to delete ({} months old)", toDelete.getTotalElements(), monthsForDeletionOfTenants);
42+
43+
deleteAllTenants(toDelete);
44+
45+
while (toDelete.hasNext()) {
46+
toDelete = tenantRepository.findByLastUpdateDate(limitDate, toDelete.nextPageable());
47+
deleteAllTenants(toDelete);
48+
}
49+
}
50+
51+
private void deleteAllTenants(Page<Long> tenantIds) {
52+
tenantIds.forEach(this::deleteTenant);
3953
}
4054

4155
private void deleteTenant(Long tenantId) {

dossierfacile-task-scheduler/src/main/java/fr/dossierfacile/scheduler/tasks/tenantwarning/TenantRepository.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@
99
import org.springframework.stereotype.Repository;
1010

1111
import java.time.LocalDateTime;
12-
import java.util.List;
1312

1413
@Repository
1514
interface TenantRepository extends JpaRepository<Tenant, Long> {
1615

1716
@Query("SELECT t.id FROM Tenant t WHERE t.lastUpdateDate < :before")
18-
List<Long> findByLastUpdateDate(@Param("before") LocalDateTime before, Pageable pageable);
17+
Page<Long> findByLastUpdateDate(@Param("before") LocalDateTime before, Pageable pageable);
1918

2019
@Query(value = """
2120
select t from Tenant t

0 commit comments

Comments
 (0)