From 52b40218c1b909bd86eb100ef1df42996b0ef4f4 Mon Sep 17 00:00:00 2001 From: Malek Mohamed Noureldean Elkssas Date: Mon, 19 May 2025 19:18:36 +0300 Subject: [PATCH 1/2] feat: add the cron jobs to remove the orders monthly --- .../analytics/AnalyticsApplication.java | 2 ++ .../repositories/OrderRepository.java | 12 +++++++ .../scheduling/CleanupScheduler.java | 32 +++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 src/main/java/com/Podzilla/analytics/scheduling/CleanupScheduler.java diff --git a/src/main/java/com/Podzilla/analytics/AnalyticsApplication.java b/src/main/java/com/Podzilla/analytics/AnalyticsApplication.java index 683b0d5..cd1ea7d 100644 --- a/src/main/java/com/Podzilla/analytics/AnalyticsApplication.java +++ b/src/main/java/com/Podzilla/analytics/AnalyticsApplication.java @@ -3,9 +3,11 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @ComponentScan(basePackages = { "com.podzilla", "com.Podzilla" }) +@EnableScheduling public class AnalyticsApplication { public static void main(final String[] args) { diff --git a/src/main/java/com/Podzilla/analytics/repositories/OrderRepository.java b/src/main/java/com/Podzilla/analytics/repositories/OrderRepository.java index 6fabe47..18a1cba 100644 --- a/src/main/java/com/Podzilla/analytics/repositories/OrderRepository.java +++ b/src/main/java/com/Podzilla/analytics/repositories/OrderRepository.java @@ -6,6 +6,8 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.transaction.annotation.Transactional; import com.Podzilla.analytics.api.projections.fulfillment.FulfillmentTimeProjection; import com.Podzilla.analytics.api.projections.order.OrderFailureRateProjection; @@ -164,4 +166,14 @@ List findRevenueSummaryByPeriod( List findRevenueByCategory( @Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate); + + @Modifying + @Transactional + @Query("DELETE FROM OrderItem oi WHERE oi.order.id IN (SELECT o.id FROM Order o WHERE o.orderPlacedTimestamp < :cutoff)") + void deleteOrderItemsOlderThan(@Param("cutoff") LocalDateTime cutoff); + + @Modifying + @Transactional + @Query("DELETE FROM Order o WHERE o.orderPlacedTimestamp < :cutoff") + void deleteOrdersOlderThan(@Param("cutoff") LocalDateTime cutoff); } diff --git a/src/main/java/com/Podzilla/analytics/scheduling/CleanupScheduler.java b/src/main/java/com/Podzilla/analytics/scheduling/CleanupScheduler.java new file mode 100644 index 0000000..c5f3486 --- /dev/null +++ b/src/main/java/com/Podzilla/analytics/scheduling/CleanupScheduler.java @@ -0,0 +1,32 @@ +package com.Podzilla.analytics.scheduling; + +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import com.Podzilla.analytics.repositories.OrderRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; + +@Component +public class CleanupScheduler { + + private final OrderRepository orderRepository; + + @Autowired + public CleanupScheduler(OrderRepository orderRepository) { + this.orderRepository = orderRepository; + } + + // // Runs at 2:00 AM on the first day of every month + @Scheduled(cron = "0 0 2 1 * ?") + @Transactional + public void monthlyCleanup() { + System.out.println("Starting monthly cleanup"); + LocalDateTime cutoff = LocalDateTime.now().minusMonths(1); + // Delete order items first + orderRepository.deleteOrderItemsOlderThan(cutoff); + // Then delete orders + orderRepository.deleteOrdersOlderThan(cutoff); + System.out.println("Monthly cleanup completed"); + } +} \ No newline at end of file From 0473e13a84f70a4c5728be697eb47377eefe06ef Mon Sep 17 00:00:00 2001 From: Malek Mohamed Noureldean Elkssas Date: Mon, 19 May 2025 19:18:58 +0300 Subject: [PATCH 2/2] feat: add the cron jobs to remove the orders monthly --- .../com/Podzilla/analytics/repositories/OrderRepository.java | 4 +++- .../com/Podzilla/analytics/scheduling/CleanupScheduler.java | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/Podzilla/analytics/repositories/OrderRepository.java b/src/main/java/com/Podzilla/analytics/repositories/OrderRepository.java index 18a1cba..7fcb5b5 100644 --- a/src/main/java/com/Podzilla/analytics/repositories/OrderRepository.java +++ b/src/main/java/com/Podzilla/analytics/repositories/OrderRepository.java @@ -169,7 +169,9 @@ List findRevenueByCategory( @Modifying @Transactional - @Query("DELETE FROM OrderItem oi WHERE oi.order.id IN (SELECT o.id FROM Order o WHERE o.orderPlacedTimestamp < :cutoff)") + @Query("DELETE FROM OrderItem oi " + + "WHERE oi.order.id IN (SELECT o.id FROM Order o " + + "WHERE o.orderPlacedTimestamp < :cutoff)") void deleteOrderItemsOlderThan(@Param("cutoff") LocalDateTime cutoff); @Modifying diff --git a/src/main/java/com/Podzilla/analytics/scheduling/CleanupScheduler.java b/src/main/java/com/Podzilla/analytics/scheduling/CleanupScheduler.java index c5f3486..d72f4b6 100644 --- a/src/main/java/com/Podzilla/analytics/scheduling/CleanupScheduler.java +++ b/src/main/java/com/Podzilla/analytics/scheduling/CleanupScheduler.java @@ -13,7 +13,7 @@ public class CleanupScheduler { private final OrderRepository orderRepository; @Autowired - public CleanupScheduler(OrderRepository orderRepository) { + public CleanupScheduler(final OrderRepository orderRepository) { this.orderRepository = orderRepository; } @@ -29,4 +29,4 @@ public void monthlyCleanup() { orderRepository.deleteOrdersOlderThan(cutoff); System.out.println("Monthly cleanup completed"); } -} \ No newline at end of file +}