From 08c804ccb54b5bec69b3785699ec173b9081018d Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Wed, 19 Aug 2020 19:02:15 +0200 Subject: [PATCH] Fix circular dependency --- app/pom.xml | 5 ++++ .../main/kotlin/controllers/NoteController.kt | 2 +- .../main/kotlin/utils/SearchTermsParser.kt | 2 +- .../kotlin/utils/SearchTermsParserKtTest.kt | 2 +- domain/pom.xml | 5 ---- .../src/main/kotlin/usecases/NoteService.kt | 4 +-- .../kotlin/usecases/search/SearchUseCase.kt | 17 +++++++++++++ .../{NoteSearcher.kt => NoteSearcherImpl.kt} | 25 ++++++++----------- search/src/main/kotlin/SeachModule.kt | 3 ++- ...earcherTest.kt => NoteSearcherImplTest.kt} | 5 ++-- 10 files changed, 42 insertions(+), 28 deletions(-) create mode 100644 domain/src/main/kotlin/usecases/search/SearchUseCase.kt rename search/src/main/kotlin/{NoteSearcher.kt => NoteSearcherImpl.kt} (80%) rename search/src/test/kotlin/{NoteSearcherTest.kt => NoteSearcherImplTest.kt} (97%) diff --git a/app/pom.xml b/app/pom.xml index c578cec..062d664 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -14,6 +14,11 @@ persistance 1.0-SNAPSHOT + + be.simplenotes + search + 1.0-SNAPSHOT + be.simplenotes domain diff --git a/app/src/main/kotlin/controllers/NoteController.kt b/app/src/main/kotlin/controllers/NoteController.kt index ce6d465..8d9abc0 100644 --- a/app/src/main/kotlin/controllers/NoteController.kt +++ b/app/src/main/kotlin/controllers/NoteController.kt @@ -9,7 +9,7 @@ import be.simplenotes.domain.usecases.NoteService import be.simplenotes.domain.usecases.markdown.InvalidMeta import be.simplenotes.domain.usecases.markdown.MissingMeta import be.simplenotes.domain.usecases.markdown.ValidationError -import be.simplenotes.search.SearchTerms +import be.simplenotes.domain.usecases.search.SearchTerms import org.http4k.core.Method import org.http4k.core.Request import org.http4k.core.Response diff --git a/app/src/main/kotlin/utils/SearchTermsParser.kt b/app/src/main/kotlin/utils/SearchTermsParser.kt index 0062844..f7dc499 100644 --- a/app/src/main/kotlin/utils/SearchTermsParser.kt +++ b/app/src/main/kotlin/utils/SearchTermsParser.kt @@ -1,6 +1,6 @@ package be.simplenotes.app.utils -import be.simplenotes.search.SearchTerms +import be.simplenotes.domain.usecases.search.SearchTerms private val titleRe = """title:['"](?.*?)['"]""".toRegex() private val outerTitleRe = """(?<title>title:['"].*?['"])""".toRegex() diff --git a/app/src/test/kotlin/utils/SearchTermsParserKtTest.kt b/app/src/test/kotlin/utils/SearchTermsParserKtTest.kt index 39f996a..a98334d 100644 --- a/app/src/test/kotlin/utils/SearchTermsParserKtTest.kt +++ b/app/src/test/kotlin/utils/SearchTermsParserKtTest.kt @@ -1,6 +1,6 @@ package be.simplenotes.app.utils -import be.simplenotes.search.SearchTerms +import be.simplenotes.domain.usecases.search.SearchTerms import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.MethodSource diff --git a/domain/pom.xml b/domain/pom.xml index 08682fe..82f582d 100644 --- a/domain/pom.xml +++ b/domain/pom.xml @@ -14,11 +14,6 @@ <artifactId>shared</artifactId> <version>1.0-SNAPSHOT</version> </dependency> - <dependency> - <groupId>be.simplenotes</groupId> - <artifactId>search</artifactId> - <version>1.0-SNAPSHOT</version> - </dependency> <dependency> <groupId>be.simplenotes</groupId> <artifactId>shared</artifactId> diff --git a/domain/src/main/kotlin/usecases/NoteService.kt b/domain/src/main/kotlin/usecases/NoteService.kt index f03fa37..ef672f0 100644 --- a/domain/src/main/kotlin/usecases/NoteService.kt +++ b/domain/src/main/kotlin/usecases/NoteService.kt @@ -10,8 +10,8 @@ import be.simplenotes.domain.usecases.markdown.MarkdownConverter import be.simplenotes.domain.usecases.markdown.MarkdownParsingError import be.simplenotes.domain.usecases.repositories.NoteRepository import be.simplenotes.domain.usecases.repositories.UserRepository -import be.simplenotes.search.NoteSearcher -import be.simplenotes.search.SearchTerms +import be.simplenotes.domain.usecases.search.NoteSearcher +import be.simplenotes.domain.usecases.search.SearchTerms import java.util.* class NoteService( diff --git a/domain/src/main/kotlin/usecases/search/SearchUseCase.kt b/domain/src/main/kotlin/usecases/search/SearchUseCase.kt new file mode 100644 index 0000000..d2d406c --- /dev/null +++ b/domain/src/main/kotlin/usecases/search/SearchUseCase.kt @@ -0,0 +1,17 @@ +package be.simplenotes.domain.usecases.search + +import be.simplenotes.domain.model.PersistedNote +import be.simplenotes.domain.model.PersistedNoteMetadata +import java.util.* + +data class SearchTerms(val title: String?, val tag: String?, val content: String?) + +interface NoteSearcher { + fun indexNote(userId: Int, note: PersistedNote) + fun indexNotes(userId: Int, notes: List<PersistedNote>) + fun deleteIndex(userId: Int, uuid: UUID) + fun updateIndex(userId: Int, note: PersistedNote) + fun search(userId: Int, terms: SearchTerms): List<PersistedNoteMetadata> + fun dropIndex(userId: Int) + fun dropAll() +} diff --git a/search/src/main/kotlin/NoteSearcher.kt b/search/src/main/kotlin/NoteSearcherImpl.kt similarity index 80% rename from search/src/main/kotlin/NoteSearcher.kt rename to search/src/main/kotlin/NoteSearcherImpl.kt index 27d59f4..98f9237 100644 --- a/search/src/main/kotlin/NoteSearcher.kt +++ b/search/src/main/kotlin/NoteSearcherImpl.kt @@ -2,6 +2,8 @@ package be.simplenotes.search import be.simplenotes.domain.model.PersistedNote import be.simplenotes.domain.model.PersistedNoteMetadata +import be.simplenotes.domain.usecases.search.NoteSearcher +import be.simplenotes.domain.usecases.search.SearchTerms import be.simplenotes.search.utils.rmdir import org.apache.lucene.analysis.standard.StandardAnalyzer import org.apache.lucene.index.* @@ -10,17 +12,10 @@ import org.apache.lucene.store.Directory import org.apache.lucene.store.FSDirectory import org.slf4j.LoggerFactory import java.io.File -import java.io.IOException -import java.nio.file.FileVisitResult -import java.nio.file.Files import java.nio.file.Path -import java.nio.file.SimpleFileVisitor -import java.nio.file.attribute.BasicFileAttributes import java.util.* -data class SearchTerms(val title: String?, val tag: String?, val content: String?) - -class NoteSearcher(basePath: Path = Path.of("/tmp", "lucene")) { +class NoteSearcherImpl(basePath: Path = Path.of("/tmp", "lucene")) : NoteSearcher { private val baseFile = basePath.toFile() private val logger = LoggerFactory.getLogger(javaClass) @@ -38,7 +33,7 @@ class NoteSearcher(basePath: Path = Path.of("/tmp", "lucene")) { } // endregion - fun indexNote(userId: Int, note: PersistedNote) { + override fun indexNote(userId: Int, note: PersistedNote) { logger.debug("Indexing note ${note.uuid} for user $userId") val dir = getDirectory(userId) @@ -53,7 +48,7 @@ class NoteSearcher(basePath: Path = Path.of("/tmp", "lucene")) { } } - fun indexNotes(userId: Int, notes: List<PersistedNote>) { + override fun indexNotes(userId: Int, notes: List<PersistedNote>) { logger.debug("Indexing notes for user $userId") val dir = getDirectory(userId) @@ -68,7 +63,7 @@ class NoteSearcher(basePath: Path = Path.of("/tmp", "lucene")) { } } - fun deleteIndex(userId: Int, uuid: UUID) { + override fun deleteIndex(userId: Int, uuid: UUID) { logger.debug("Deleting index $uuid for user $userId") val dir = getDirectory(userId) @@ -82,13 +77,13 @@ class NoteSearcher(basePath: Path = Path.of("/tmp", "lucene")) { } } - fun updateIndex(userId: Int, note: PersistedNote) { + override fun updateIndex(userId: Int, note: PersistedNote) { logger.debug("Updating note ${note.uuid} for user $userId") deleteIndex(userId, note.uuid) indexNote(userId, note) } - fun search(userId: Int, terms: SearchTerms): List<PersistedNoteMetadata> { + override fun search(userId: Int, terms: SearchTerms): List<PersistedNoteMetadata> { val searcher = getIndexSearcher(userId) val builder = BooleanQuery.Builder() @@ -115,8 +110,8 @@ class NoteSearcher(basePath: Path = Path.of("/tmp", "lucene")) { return topDocs.toResults(searcher) } - fun dropIndex(userId: Int) = rmdir(File(baseFile, userId.toString()).toPath()) + override fun dropIndex(userId: Int) = rmdir(File(baseFile, userId.toString()).toPath()) - fun dropAll() = rmdir(baseFile.toPath()) + override fun dropAll() = rmdir(baseFile.toPath()) } diff --git a/search/src/main/kotlin/SeachModule.kt b/search/src/main/kotlin/SeachModule.kt index 76d0d12..d86f399 100644 --- a/search/src/main/kotlin/SeachModule.kt +++ b/search/src/main/kotlin/SeachModule.kt @@ -1,8 +1,9 @@ package be.simplenotes.search +import be.simplenotes.domain.usecases.search.NoteSearcher import org.koin.dsl.module import java.nio.file.Path val searchModule = module { - single { NoteSearcher(Path.of(".lucene")) } + single<NoteSearcher> { NoteSearcherImpl(Path.of(".lucene")) } } diff --git a/search/src/test/kotlin/NoteSearcherTest.kt b/search/src/test/kotlin/NoteSearcherImplTest.kt similarity index 97% rename from search/src/test/kotlin/NoteSearcherTest.kt rename to search/src/test/kotlin/NoteSearcherImplTest.kt index 357f1d5..b6a5eae 100644 --- a/search/src/test/kotlin/NoteSearcherTest.kt +++ b/search/src/test/kotlin/NoteSearcherImplTest.kt @@ -3,6 +3,7 @@ package be.simplenotes.search import be.simplenotes.domain.model.NoteMetadata import be.simplenotes.domain.model.PersistedNote import be.simplenotes.domain.model.PersistedNoteMetadata +import be.simplenotes.domain.usecases.search.SearchTerms import org.assertj.core.api.Assertions.assertThat import org.intellij.lang.annotations.Language import org.junit.jupiter.api.AfterAll @@ -13,10 +14,10 @@ import java.time.LocalDateTime import java.util.* @ResourceLock("lucene") -internal class NoteSearcherTest { +internal class NoteSearcherImplTest { // region setup - private val searcher = NoteSearcher() + private val searcher = NoteSearcherImpl() private fun index( title: String,