🚧 Skrevet bedre søkefunksjon som putter mindre press på database
Co-authored-by: Sindre Kjelsrud <sindre.kjelsrud@nav.no> Co-authored-by: Markus A. R. Johansen <markus.aleksander.rakil.johansen@nav.no>
This commit is contained in:
parent
8134cfc239
commit
d0164c2688
6 changed files with 49 additions and 92 deletions
|
@ -6,6 +6,7 @@ import no.nav.helse.sprik.db.FeilmeldingTable.dato
|
||||||
import no.nav.helse.sprik.db.FeilmeldingTable.tittel
|
import no.nav.helse.sprik.db.FeilmeldingTable.tittel
|
||||||
import no.nav.helse.sprik.modell.Feilmelding
|
import no.nav.helse.sprik.modell.Feilmelding
|
||||||
import org.jetbrains.exposed.sql.*
|
import org.jetbrains.exposed.sql.*
|
||||||
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.like
|
||||||
import org.jetbrains.exposed.sql.transactions.transaction
|
import org.jetbrains.exposed.sql.transactions.transaction
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
|
@ -31,4 +32,18 @@ class FeilmeldingRepository {
|
||||||
fun hentAlleFeilmeldinger(): List<Feilmelding> = transaction {
|
fun hentAlleFeilmeldinger(): List<Feilmelding> = transaction {
|
||||||
FeilmeldingTable.selectAll().map(::radTilFeilmelding)
|
FeilmeldingTable.selectAll().map(::radTilFeilmelding)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun hentSokteFeilmeldinger(sokeord: String): List<Feilmelding> = transaction {
|
||||||
|
/* val query = FeilmeldingTable.selectAll()
|
||||||
|
tittel?.let {
|
||||||
|
query.andWhere { FeilmeldingTable.tittel like sokeord }
|
||||||
|
}
|
||||||
|
beskrivelse?.let {
|
||||||
|
query.andWhere { FeilmeldingTable.beskrivelse like sokeord }
|
||||||
|
} */
|
||||||
|
val sok = "%${sokeord}%"
|
||||||
|
|
||||||
|
FeilmeldingTable.select((FeilmeldingTable.tittel like sok) or (FeilmeldingTable.beskrivelse like sok)).map(::radTilFeilmelding)
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
package no.nav.helse.sprik.modell
|
|
||||||
|
|
||||||
import no.nav.helse.sprik.db.FeilmeldingRepository
|
|
||||||
import java.util.*
|
|
||||||
import kotlin.collections.ArrayList
|
|
||||||
|
|
||||||
class Sokemotor {
|
|
||||||
private val feilmeldingRepository = FeilmeldingRepository()
|
|
||||||
|
|
||||||
fun sok(s: String): List<Feilmelding> {
|
|
||||||
|
|
||||||
val feilmeldinger = feilmeldingRepository.hentAlleFeilmeldinger()
|
|
||||||
val resultat = ArrayList<Feilmelding>()
|
|
||||||
|
|
||||||
val processed = s.lowercase()
|
|
||||||
|
|
||||||
for (i in feilmeldinger) {
|
|
||||||
if (i.tittel.lowercase().contains(processed) or i.beskrivelse.lowercase().contains(processed) or processed.equals("")) {
|
|
||||||
println(i.toString() + " matcher" + processed)
|
|
||||||
resultat.add(i)
|
|
||||||
}else{
|
|
||||||
println(i.toString() + " matcher ikke")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return resultat.toList()
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -11,11 +11,8 @@ import io.ktor.server.engine.*
|
||||||
import io.ktor.server.http.content.*
|
import io.ktor.server.http.content.*
|
||||||
import io.ktor.server.plugins.cors.routing.*
|
import io.ktor.server.plugins.cors.routing.*
|
||||||
import io.ktor.server.request.*
|
import io.ktor.server.request.*
|
||||||
import no.nav.helse.sprik.Test
|
|
||||||
import no.nav.helse.sprik.db.FeilmeldingRepository
|
import no.nav.helse.sprik.db.FeilmeldingRepository
|
||||||
import no.nav.helse.sprik.modell.Feilmelding
|
import no.nav.helse.sprik.modell.Feilmelding
|
||||||
import no.nav.helse.sprik.modell.Sokemotor
|
|
||||||
import java.time.LocalDateTime
|
|
||||||
|
|
||||||
fun configureRouting(): ApplicationEngine = embeddedServer(CIO, applicationEngineEnvironment {
|
fun configureRouting(): ApplicationEngine = embeddedServer(CIO, applicationEngineEnvironment {
|
||||||
//Repositories for handlinger mot database:
|
//Repositories for handlinger mot database:
|
||||||
|
@ -59,9 +56,9 @@ fun configureRouting(): ApplicationEngine = embeddedServer(CIO, applicationEngin
|
||||||
val testMelding = feilmeldingRepository.hentAlleFeilmeldinger()
|
val testMelding = feilmeldingRepository.hentAlleFeilmeldinger()
|
||||||
call.respond(status = HttpStatusCode.Created, message = testMelding)
|
call.respond(status = HttpStatusCode.Created, message = testMelding)
|
||||||
}
|
}
|
||||||
post("/api/hentsok"){
|
get("/api/hentsok/{sokestreng}"){
|
||||||
val sokestreng = call.receive<String>()
|
val sokestreng = call.receive<String>()
|
||||||
call.respond(status = HttpStatusCode.Created, message = sokestreng + ": " + sokemotor.sok(sokestreng))
|
call.respond(status = HttpStatusCode.Created, message = sokestreng)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,10 +23,13 @@ class FeilmeldingTest {
|
||||||
private val database = Database(dbconfig()).configureFlyway()
|
private val database = Database(dbconfig()).configureFlyway()
|
||||||
private val feilmeldingRepository = FeilmeldingRepository()
|
private val feilmeldingRepository = FeilmeldingRepository()
|
||||||
private val feilmelding = Feilmelding("Test", "Testesen", LocalDateTime.of(2023,1,1,8,0))
|
private val feilmelding = Feilmelding("Test", "Testesen", LocalDateTime.of(2023,1,1,8,0))
|
||||||
|
private val feilmelding2 = Feilmelding("Tittel", "Beskrivelse", LocalDateTime.of(2023,2,1,8,0))
|
||||||
|
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
fun setup() {
|
fun setup() {
|
||||||
ExposedDatabase.connect(database.dataSource)
|
ExposedDatabase.connect(database.dataSource)
|
||||||
|
feilmeldingRepository.lagre(feilmelding)
|
||||||
|
|
||||||
}
|
}
|
||||||
@AfterEach
|
@AfterEach
|
||||||
fun wipe() {
|
fun wipe() {
|
||||||
|
@ -36,7 +39,6 @@ class FeilmeldingTest {
|
||||||
}
|
}
|
||||||
@Test
|
@Test
|
||||||
fun `Sett opp testdatabasen riktig`(){
|
fun `Sett opp testdatabasen riktig`(){
|
||||||
feilmeldingRepository.lagre(feilmelding)
|
|
||||||
transaction {
|
transaction {
|
||||||
assertEquals(1, FeilmeldingTable.selectAll().map {
|
assertEquals(1, FeilmeldingTable.selectAll().map {
|
||||||
it
|
it
|
||||||
|
@ -46,7 +48,6 @@ class FeilmeldingTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Lagrer feilmelding i databasen`() {
|
fun `Lagrer feilmelding i databasen`() {
|
||||||
feilmeldingRepository.lagre(feilmelding)
|
|
||||||
transaction {
|
transaction {
|
||||||
val actual = FeilmeldingTable.selectAll().single()
|
val actual = FeilmeldingTable.selectAll().single()
|
||||||
assertEquals("Test", actual[FeilmeldingTable.tittel])
|
assertEquals("Test", actual[FeilmeldingTable.tittel])
|
||||||
|
@ -57,14 +58,35 @@ class FeilmeldingTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Henter alle feilmeldinger i databasen`() {
|
fun `Henter alle feilmeldinger i databasen`() {
|
||||||
feilmeldingRepository.lagre(feilmelding)
|
|
||||||
transaction {
|
transaction {
|
||||||
val res: List<Feilmelding> = feilmeldingRepository.hentAlleFeilmeldinger()
|
val resultat: List<Feilmelding> = feilmeldingRepository.hentAlleFeilmeldinger()
|
||||||
val actual = FeilmeldingTable.selectAll()
|
val actual = FeilmeldingTable.selectAll()
|
||||||
assertEquals(actual.map { it }.size, res.size)
|
assertEquals(actual.map { it }.size, resultat.size)
|
||||||
assertEquals("Test", res[0].tittel)
|
assertEquals("Test", resultat[0].tittel)
|
||||||
assertEquals("Testesen", res[0].beskrivelse)
|
assertEquals("Testesen", resultat[0].beskrivelse)
|
||||||
assertEquals(LocalDateTime.of(2023, 1, 1, 8, 0), res[0].dato)
|
assertEquals(LocalDateTime.of(2023, 1, 1, 8, 0), resultat[0].dato)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `Henter feilmeldinger som matcher søk`() {
|
||||||
|
val sokeresultat: List<Feilmelding> = feilmeldingRepository.hentSokteFeilmeldinger("Test")
|
||||||
|
assertEquals(1, sokeresultat.size)
|
||||||
|
assertEquals("Test", sokeresultat[0].tittel)
|
||||||
|
assertEquals("Testesen", sokeresultat[0].beskrivelse)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `Henter feilmeldinger som har søkestreng som substreng`() {
|
||||||
|
val sokeresultat: List<Feilmelding> = feilmeldingRepository.hentSokteFeilmeldinger("Teste")
|
||||||
|
assertEquals(1, sokeresultat.size)
|
||||||
|
assertEquals("Test", sokeresultat[0].tittel)
|
||||||
|
assertEquals("Testesen", sokeresultat[0].beskrivelse)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `Finner ingen feilmeldinger som matcher søk`() {
|
||||||
|
val sokeresultat: List<Feilmelding> = feilmeldingRepository.hentSokteFeilmeldinger("abrakadabra")
|
||||||
|
assertEquals(0, sokeresultat.size)
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,49 +0,0 @@
|
||||||
package no.nav.helse.sprik
|
|
||||||
|
|
||||||
import no.nav.helse.sprik.db.Database
|
|
||||||
import no.nav.helse.sprik.db.FeilmeldingRepository
|
|
||||||
import no.nav.helse.sprik.modell.Feilmelding
|
|
||||||
import no.nav.helse.sprik.modell.Sokemotor
|
|
||||||
import org.junit.jupiter.api.BeforeAll
|
|
||||||
import org.junit.jupiter.api.Test
|
|
||||||
import org.junit.jupiter.api.TestInstance
|
|
||||||
import java.time.LocalDateTime
|
|
||||||
import kotlin.test.assertEquals
|
|
||||||
import org.jetbrains.exposed.sql.Database as ExposedDatabase
|
|
||||||
|
|
||||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
|
||||||
class SokTest {
|
|
||||||
private val database = Database(dbconfig()).configureFlyway()
|
|
||||||
private val sokemotor = Sokemotor()
|
|
||||||
private val feilmeldingRepository = FeilmeldingRepository()
|
|
||||||
private val feilmelding = Feilmelding("Test", "Testesen", LocalDateTime.of(2023,1,1,8,0))
|
|
||||||
private val feilmelding2 = Feilmelding("Tittel", "Beskrivelse", LocalDateTime.of(2023,2,1,8,0))
|
|
||||||
|
|
||||||
@BeforeAll
|
|
||||||
fun setup() {
|
|
||||||
ExposedDatabase.connect(database.dataSource)
|
|
||||||
feilmeldingRepository.lagre(feilmelding)
|
|
||||||
feilmeldingRepository.lagre(feilmelding2)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `Søk etter nøkkelord i titler`() {
|
|
||||||
val sokeresultat = sokemotor.sok("Test")
|
|
||||||
assertEquals(1, sokeresultat.size)
|
|
||||||
assertEquals(sokeresultat[0].tittel, "Test")
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `Søk etter nøkkelord i beskrivelser`() {
|
|
||||||
val sokeresultat = sokemotor.sok("Beskrivelse")
|
|
||||||
assertEquals(1, sokeresultat.size)
|
|
||||||
assertEquals(sokeresultat[0].beskrivelse, "Beskrivelse")
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Test
|
|
||||||
fun `Søk etter kategorier`() {
|
|
||||||
TODO()
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
|
@ -2,5 +2,5 @@
|
||||||
* Konstanter vi bruker i diverse filer i applikasjonen
|
* Konstanter vi bruker i diverse filer i applikasjonen
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export const backendURL = "http://localhost:8080"
|
//export const backendURL = "http://localhost:8080"
|
||||||
//export const backendURL = "https://helse-sprik.intern.dev.nav.no"
|
export const backendURL = "https://helse-sprik.intern.dev.nav.no"
|
Reference in a new issue