IntegrationEventWriter.java

package com.wilzwert.myjobs.infrastructure.event;

import com.wilzwert.myjobs.core.domain.shared.event.integration.IntegrationEvent;
import com.wilzwert.myjobs.infrastructure.persistence.mongo.entity.EventStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.item.Chunk;
import org.springframework.batch.item.ItemWriter;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class IntegrationEventWriter implements ItemWriter<IntegrationEvent> {

    private final IntegrationEventDataManager eventDataManager;

    IntegrationEventWriter(IntegrationEventDataManager eventDataManager) {
        this.eventDataManager = eventDataManager;
    }

    @Override
    public void write(Chunk<? extends IntegrationEvent> items) {
        log.info("Marking {} integration events as dispatched", items.getItems().size());
        eventDataManager.markAllAs(items.getItems(), EventStatus.DISPATCHED);
        log.info("Integration events marked as dispatched");
    }
}