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:['"].*?['"])""".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 @@
shared
1.0-SNAPSHOT
-
- be.simplenotes
- search
- 1.0-SNAPSHOT
-
be.simplenotes
shared
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)
+ fun deleteIndex(userId: Int, uuid: UUID)
+ fun updateIndex(userId: Int, note: PersistedNote)
+ fun search(userId: Int, terms: SearchTerms): List
+ 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) {
+ override fun indexNotes(userId: Int, notes: List) {
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 {
+ override fun search(userId: Int, terms: SearchTerms): List {
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 { 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,