ChatDeliveryStateService.java

package com.ecommerce.chat.infrastructure.realtime;

import com.ecommerce.chat.infrastructure.persistence.mapper.ChatMessageMapper;
import com.ecommerce.chat.infrastructure.persistence.mapper.MessageReceiptMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.Instant;

@Service
public class ChatDeliveryStateService {

    private final MessageReceiptMapper receiptMapper;
    private final ChatMessageMapper messageMapper;

    public ChatDeliveryStateService(
            MessageReceiptMapper receiptMapper,
            ChatMessageMapper messageMapper) {
        this.receiptMapper = receiptMapper;
        this.messageMapper = messageMapper;
    }

    @Transactional
    public void markDelivered(Long messageId, Long recipientId) {
        Instant now = receiptMapper.currentTime();
        receiptMapper.markDelivered(messageId, recipientId, now);
        messageMapper.markDelivered(messageId, now);
    }
}