feat(document): remove conversation repository queries
Delete findConversation and findSinglePersonCorrespondence (no remaining callers after the service methods were removed) and their integration test section. Drops the now-unused LocalDate import. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -15,7 +15,6 @@ import org.springframework.data.jpa.repository.Query;
|
|||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -81,32 +80,6 @@ public interface DocumentRepository extends JpaRepository<Document, UUID>, JpaSp
|
|||||||
|
|
||||||
Optional<Document> findFirstByMetadataCompleteFalseAndIdNot(UUID id, Sort sort);
|
Optional<Document> findFirstByMetadataCompleteFalseAndIdNot(UUID id, Sort sort);
|
||||||
|
|
||||||
@EntityGraph("Document.full")
|
|
||||||
@Query("SELECT DISTINCT d FROM Document d " +
|
|
||||||
"JOIN d.receivers r " +
|
|
||||||
"WHERE " +
|
|
||||||
"((d.sender.id = :person1 AND r.id = :person2) " +
|
|
||||||
" OR " +
|
|
||||||
" (d.sender.id = :person2 AND r.id = :person1)) " +
|
|
||||||
"AND d.documentDate BETWEEN :from AND :to")
|
|
||||||
List<Document> findConversation(
|
|
||||||
@Param("person1") UUID person1,
|
|
||||||
@Param("person2") UUID person2,
|
|
||||||
@Param("from") LocalDate from,
|
|
||||||
@Param("to") LocalDate to,
|
|
||||||
Sort sort);
|
|
||||||
|
|
||||||
@EntityGraph("Document.full")
|
|
||||||
@Query("SELECT DISTINCT d FROM Document d " +
|
|
||||||
"LEFT JOIN d.receivers r " +
|
|
||||||
"WHERE (d.sender.id = :personId OR r.id = :personId) " +
|
|
||||||
"AND d.documentDate BETWEEN :from AND :to")
|
|
||||||
List<Document> findSinglePersonCorrespondence(
|
|
||||||
@Param("personId") UUID personId,
|
|
||||||
@Param("from") LocalDate from,
|
|
||||||
@Param("to") LocalDate to,
|
|
||||||
Sort sort);
|
|
||||||
|
|
||||||
@Query(nativeQuery = true, value = """
|
@Query(nativeQuery = true, value = """
|
||||||
SELECT d.id FROM documents d
|
SELECT d.id FROM documents d
|
||||||
CROSS JOIN LATERAL (
|
CROSS JOIN LATERAL (
|
||||||
|
|||||||
@@ -262,67 +262,6 @@ class DocumentRepositoryTest {
|
|||||||
assertThat(result.getContent()).allMatch(d -> !d.isMetadataComplete());
|
assertThat(result.getContent()).allMatch(d -> !d.isMetadataComplete());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ─── findSinglePersonCorrespondence — DISTINCT / multi-receiver safety ────
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void findSinglePersonCorrespondence_returnsExactlyOneResult_whenDocumentHasThreeReceiversAndOneMatchesPersonId() {
|
|
||||||
Person sender = personRepository.save(Person.builder()
|
|
||||||
.firstName("Hans").lastName("Müller").build());
|
|
||||||
Person receiver1 = personRepository.save(Person.builder()
|
|
||||||
.firstName("Anna").lastName("Schmidt").build());
|
|
||||||
Person receiver2 = personRepository.save(Person.builder()
|
|
||||||
.firstName("Bertha").lastName("Wagner").build());
|
|
||||||
Person receiver3 = personRepository.save(Person.builder()
|
|
||||||
.firstName("Clara").lastName("Koch").build());
|
|
||||||
|
|
||||||
// Document addressed to all three receivers
|
|
||||||
Document doc = documentRepository.save(Document.builder()
|
|
||||||
.title("Rundschreiben")
|
|
||||||
.originalFilename("rundschreiben.pdf")
|
|
||||||
.status(DocumentStatus.UPLOADED)
|
|
||||||
.sender(sender)
|
|
||||||
.receivers(new HashSet<>(Set.of(receiver1, receiver2, receiver3)))
|
|
||||||
.documentDate(LocalDate.of(1950, 6, 1))
|
|
||||||
.build());
|
|
||||||
|
|
||||||
Sort sort = Sort.by(Sort.Direction.DESC, "documentDate");
|
|
||||||
LocalDate from = LocalDate.of(1900, 1, 1);
|
|
||||||
LocalDate to = LocalDate.of(2000, 1, 1);
|
|
||||||
|
|
||||||
// Query for receiver1 — the DISTINCT must collapse the 3 JOIN rows into 1 result
|
|
||||||
List<Document> results = documentRepository.findSinglePersonCorrespondence(
|
|
||||||
receiver1.getId(), from, to, sort);
|
|
||||||
|
|
||||||
assertThat(results).hasSize(1);
|
|
||||||
assertThat(results.get(0).getId()).isEqualTo(doc.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void findSinglePersonCorrespondence_includesDocumentsWherePerson_isSender() {
|
|
||||||
Person sender = personRepository.save(Person.builder()
|
|
||||||
.firstName("Hans").lastName("Müller").build());
|
|
||||||
Person receiver = personRepository.save(Person.builder()
|
|
||||||
.firstName("Anna").lastName("Schmidt").build());
|
|
||||||
|
|
||||||
documentRepository.save(Document.builder()
|
|
||||||
.title("Brief als Absender")
|
|
||||||
.originalFilename("brief_absender.pdf")
|
|
||||||
.status(DocumentStatus.UPLOADED)
|
|
||||||
.sender(sender)
|
|
||||||
.receivers(new HashSet<>(Set.of(receiver)))
|
|
||||||
.documentDate(LocalDate.of(1950, 6, 1))
|
|
||||||
.build());
|
|
||||||
|
|
||||||
Sort sort = Sort.by(Sort.Direction.DESC, "documentDate");
|
|
||||||
LocalDate from = LocalDate.of(1900, 1, 1);
|
|
||||||
LocalDate to = LocalDate.of(2000, 1, 1);
|
|
||||||
|
|
||||||
List<Document> results = documentRepository.findSinglePersonCorrespondence(
|
|
||||||
sender.getId(), from, to, sort);
|
|
||||||
|
|
||||||
assertThat(results).hasSize(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ─── findSegmentationQueue ────────────────────────────────────────────────
|
// ─── findSegmentationQueue ────────────────────────────────────────────────
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user