feat(search): NL search — resolve tag names in query parsing (#743) #765

Merged
marcel merged 15 commits from feat/issue-743-nl-search-tag-resolution into main 2026-06-07 09:33:26 +02:00
2 changed files with 17 additions and 0 deletions
Showing only changes of commit 8bd8390891 - Show all commits

View File

@@ -46,6 +46,10 @@ public class TagService {
return enrichWithRelatives(matched);
}
public List<Tag> findByNameContaining(String fragment) {
return tagRepository.findByNameContainingIgnoreCase(fragment);
}
public Tag getById(UUID id) {
return tagRepository.findById(id)
.orElseThrow(() -> DomainException.notFound(ErrorCode.TAG_NOT_FOUND, "Tag not found: " + id));

View File

@@ -666,4 +666,17 @@ class TagServiceTest {
// verify findAllById was called at least twice: once for extras, once inside resolveEffectiveColors
verify(tagRepository, atLeastOnce()).findAllById(any());
}
// ─── findByNameContaining ─────────────────────────────────────────────────
@Test
void findByNameContaining_delegatesToRepository() {
Tag krieg = Tag.builder().id(UUID.randomUUID()).name("Krieg").build();
when(tagRepository.findByNameContainingIgnoreCase("krieg")).thenReturn(List.of(krieg));
List<Tag> result = tagService.findByNameContaining("krieg");
assertThat(result).containsExactly(krieg);
verify(tagRepository).findByNameContainingIgnoreCase("krieg");
}
}