content: package com.food.order.system.payment.application.service.outbox.scheduler;
  
  
  import com.food.order.system.outbox.OutboxScheduler;
  import com.food.order.system.outbox.OutboxStatus;
  import com.food.order.system.payment.application.service.outbox.model.OrderOutboxMessage;
  import lombok.RequiredArgsConstructor;
  import lombok.extern.slf4j.Slf4j;
  import org.springframework.scheduling.annotation.Scheduled;
  import org.springframework.stereotype.Component;
  import org.springframework.transaction.annotation.Transactional;
  
  import java.util.List;
  import java.util.Optional;
  
  @Slf4j
  @Component
  @RequiredArgsConstructor
  public class OrderOutboxCleanerScheduler implements OutboxScheduler {
  
      private final OrderOutboxHelper orderOutboxHelper;
  
      @Override
      @Transactional
      @Scheduled(cron = "@midnight")
      public void processOutboxMessage() {
          Optional<List<OrderOutboxMessage>> outboxMessagesResponse =
                  orderOutboxHelper.getOrderOutboxMessageByOutboxStatus(OutboxStatus.COMPLETED);
          if (outboxMessagesResponse.isPresent() && outboxMessagesResponse.get().size() > 0) {
              List<OrderOutboxMessage> outboxMessages = outboxMessagesResponse.get();
              log.info("Received {} OrderOutboxMessage for clean-up!", outboxMessages.size());
              orderOutboxHelper.deleteOrderOutboxMessageByOutboxStatus(OutboxStatus.COMPLETED);
              log.info("Deleted {} OrderOutboxMessage!", outboxMessages.size());
          }
      }
  }
  