package jnpf.dmsService.search; import jnpf.dmsMapper.DmsDocumentMapper; import jnpf.dmsMapper.DmsSearchIndexSourceMapper; import jnpf.dmsService.search.meili.DmsMeilisearchClient; import jnpf.dmsService.search.meili.DmsSearchIndexDocument; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.util.UUID; @Service @RequiredArgsConstructor public class DmsSearchIndexWriter { private final DmsDocumentMapper documents; private final DmsSearchIndexSourceMapper sources; private final DmsMeilisearchClient client; /** Serialize final submission with expiry so late extraction cannot resurrect a deleted index entry. */ @Transactional(rollbackFor = Exception.class) public void publish(DmsSearchIndexDocument document) throws IOException { UUID documentId = UUID.fromString(document.getDocumentId()); UUID versionId = UUID.fromString(document.getFileVersionId()); if (documents.selectByTenantAndIdForUpdate(document.getTenantId(), documentId) == null) return; if (sources.selectSource(document.getTenantId(), documentId, versionId) == null) return; client.upsert(document); } }