From 568a2c6831ad8d2d0364dde83c8d872bfed65a8b Mon Sep 17 00:00:00 2001 From: Hubert Van De Walle Date: Thu, 5 Nov 2020 14:55:54 +0100 Subject: [PATCH] Move search parsing to domain layer --- simplenotes-app/build.gradle.kts | 1 - .../kotlin/be/simplenotes/app/api/ApiNoteController.kt | 4 +--- .../be/simplenotes/app/controllers/NoteController.kt | 4 +--- .../kotlin/be/simplenotes/domain/usecases/NoteService.kt | 4 ++-- .../domain/usecases/search}/SearchTermsParser.kt | 4 ++-- .../domain/usecases/search}/SearchTermsParserKtTest.kt | 9 +++++---- 6 files changed, 11 insertions(+), 15 deletions(-) rename {simplenotes-app/src/main/kotlin/be/simplenotes/app/utils => simplenotes-domain/src/main/kotlin/be/simplenotes/domain/usecases/search}/SearchTermsParser.kt (91%) rename {simplenotes-app/src/test/kotlin/be/simplenotes/app/utils => simplenotes-domain/src/test/kotlin/be/simplenotes/domain/usecases/search}/SearchTermsParserKtTest.kt (88%) diff --git a/simplenotes-app/build.gradle.kts b/simplenotes-app/build.gradle.kts index c7229d0..33f0fa1 100644 --- a/simplenotes-app/build.gradle.kts +++ b/simplenotes-app/build.gradle.kts @@ -10,7 +10,6 @@ plugins { } dependencies { - implementation(project(":simplenotes-search")) implementation(project(":simplenotes-domain")) implementation(project(":simplenotes-types")) implementation(project(":simplenotes-config")) diff --git a/simplenotes-app/src/main/kotlin/be/simplenotes/app/api/ApiNoteController.kt b/simplenotes-app/src/main/kotlin/be/simplenotes/app/api/ApiNoteController.kt index 4c226bc..1bfb695 100644 --- a/simplenotes-app/src/main/kotlin/be/simplenotes/app/api/ApiNoteController.kt +++ b/simplenotes-app/src/main/kotlin/be/simplenotes/app/api/ApiNoteController.kt @@ -1,7 +1,6 @@ package be.simplenotes.app.api import be.simplenotes.app.extensions.auto -import be.simplenotes.app.utils.parseSearchTerms import be.simplenotes.domain.usecases.NoteService import be.simplenotes.types.LoggedInUser import be.simplenotes.types.PersistedNote @@ -58,8 +57,7 @@ class ApiNoteController( fun search(request: Request, loggedInUser: LoggedInUser): Response { val query = searchContentLens(request) - val terms = parseSearchTerms(query) - val notes = noteService.search(loggedInUser.userId, terms) + val notes = noteService.search(loggedInUser.userId, query) return persistedNotesMetadataLens(notes, Response(OK)) } diff --git a/simplenotes-app/src/main/kotlin/be/simplenotes/app/controllers/NoteController.kt b/simplenotes-app/src/main/kotlin/be/simplenotes/app/controllers/NoteController.kt index 09a7d0b..f0b4286 100644 --- a/simplenotes-app/src/main/kotlin/be/simplenotes/app/controllers/NoteController.kt +++ b/simplenotes-app/src/main/kotlin/be/simplenotes/app/controllers/NoteController.kt @@ -2,7 +2,6 @@ package be.simplenotes.app.controllers import be.simplenotes.app.extensions.html import be.simplenotes.app.extensions.redirect -import be.simplenotes.app.utils.parseSearchTerms import be.simplenotes.domain.usecases.NoteService import be.simplenotes.domain.usecases.markdown.InvalidMeta import be.simplenotes.domain.usecases.markdown.MissingMeta @@ -69,8 +68,7 @@ class NoteController( fun search(request: Request, loggedInUser: LoggedInUser): Response { val query = request.form("search") ?: "" - val terms = parseSearchTerms(query) - val notes = noteService.search(loggedInUser.userId, terms) + val notes = noteService.search(loggedInUser.userId, query) val deletedCount = noteService.countDeleted(loggedInUser.userId) return Response(OK).html(view.search(loggedInUser, notes, query, deletedCount)) } diff --git a/simplenotes-domain/src/main/kotlin/be/simplenotes/domain/usecases/NoteService.kt b/simplenotes-domain/src/main/kotlin/be/simplenotes/domain/usecases/NoteService.kt index 9448732..c49d298 100644 --- a/simplenotes-domain/src/main/kotlin/be/simplenotes/domain/usecases/NoteService.kt +++ b/simplenotes-domain/src/main/kotlin/be/simplenotes/domain/usecases/NoteService.kt @@ -4,11 +4,11 @@ import arrow.core.computations.either import be.simplenotes.domain.security.HtmlSanitizer import be.simplenotes.domain.usecases.markdown.MarkdownConverter import be.simplenotes.domain.usecases.markdown.MarkdownParsingError +import be.simplenotes.domain.usecases.search.parseSearchTerms import be.simplenotes.persistance.repositories.NoteRepository import be.simplenotes.persistance.repositories.UserRepository import be.simplenotes.persistance.transactions.TransactionService import be.simplenotes.search.NoteSearcher -import be.simplenotes.search.SearchTerms import be.simplenotes.types.LoggedInUser import be.simplenotes.types.Note import be.simplenotes.types.PersistedNote @@ -102,7 +102,7 @@ class NoteService( } } - fun search(userId: Int, searchTerms: SearchTerms) = searcher.search(userId, searchTerms) + fun search(userId: Int, searchInput: String) = searcher.search(userId, parseSearchTerms(searchInput)) @PreDestroy fun dropAllIndexes() = searcher.dropAll() diff --git a/simplenotes-app/src/main/kotlin/be/simplenotes/app/utils/SearchTermsParser.kt b/simplenotes-domain/src/main/kotlin/be/simplenotes/domain/usecases/search/SearchTermsParser.kt similarity index 91% rename from simplenotes-app/src/main/kotlin/be/simplenotes/app/utils/SearchTermsParser.kt rename to simplenotes-domain/src/main/kotlin/be/simplenotes/domain/usecases/search/SearchTermsParser.kt index 3e2a0aa..9d0cc95 100644 --- a/simplenotes-app/src/main/kotlin/be/simplenotes/app/utils/SearchTermsParser.kt +++ b/simplenotes-domain/src/main/kotlin/be/simplenotes/domain/usecases/search/SearchTermsParser.kt @@ -1,4 +1,4 @@ -package be.simplenotes.app.utils +package be.simplenotes.domain.usecases.search import be.simplenotes.search.SearchTerms @@ -16,7 +16,7 @@ private val outerTagRe = outerRegex("tag") private val contentRe = innerRegex("content") private val outerContentRe = outerRegex("content") -fun parseSearchTerms(input: String): SearchTerms { +internal fun parseSearchTerms(input: String): SearchTerms { var c: String = input fun extract(innerRegex: Regex, outerRegex: Regex): String? { diff --git a/simplenotes-app/src/test/kotlin/be/simplenotes/app/utils/SearchTermsParserKtTest.kt b/simplenotes-domain/src/test/kotlin/be/simplenotes/domain/usecases/search/SearchTermsParserKtTest.kt similarity index 88% rename from simplenotes-app/src/test/kotlin/be/simplenotes/app/utils/SearchTermsParserKtTest.kt rename to simplenotes-domain/src/test/kotlin/be/simplenotes/domain/usecases/search/SearchTermsParserKtTest.kt index b739900..7d4509f 100644 --- a/simplenotes-app/src/test/kotlin/be/simplenotes/app/utils/SearchTermsParserKtTest.kt +++ b/simplenotes-domain/src/test/kotlin/be/simplenotes/domain/usecases/search/SearchTermsParserKtTest.kt @@ -1,7 +1,8 @@ -package be.simplenotes.app.utils +package be.simplenotes.domain.usecases.search import be.simplenotes.search.SearchTerms -import org.assertj.core.api.Assertions.assertThat +import com.natpryce.hamkrest.assertion.assertThat +import com.natpryce.hamkrest.equalTo import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.MethodSource import java.util.stream.Stream @@ -13,7 +14,7 @@ internal class SearchTermsParserKtTest { title: String? = null, tag: String? = null, content: String? = null, - all: String? = null + all: String? = null, ): Pair = input to SearchTerms(title, tag, content, all) @Suppress("Unused") @@ -39,6 +40,6 @@ internal class SearchTermsParserKtTest { @ParameterizedTest @MethodSource("results") fun `valid search parser`(case: Pair) { - assertThat(parseSearchTerms(case.first)).isEqualTo(case.second) + assertThat(parseSearchTerms(case.first), equalTo(case.second)) } }