🚧 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.modell.Feilmelding | ||||
| import org.jetbrains.exposed.sql.* | ||||
| import org.jetbrains.exposed.sql.SqlExpressionBuilder.like | ||||
| import org.jetbrains.exposed.sql.transactions.transaction | ||||
| import java.time.LocalDateTime | ||||
| 
 | ||||
|  | @ -31,4 +32,18 @@ class FeilmeldingRepository { | |||
|     fun hentAlleFeilmeldinger(): List<Feilmelding> = transaction { | ||||
|         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.plugins.cors.routing.* | ||||
| import io.ktor.server.request.* | ||||
| import no.nav.helse.sprik.Test | ||||
| import no.nav.helse.sprik.db.FeilmeldingRepository | ||||
| import no.nav.helse.sprik.modell.Feilmelding | ||||
| import no.nav.helse.sprik.modell.Sokemotor | ||||
| import java.time.LocalDateTime | ||||
| 
 | ||||
| fun configureRouting(): ApplicationEngine = embeddedServer(CIO, applicationEngineEnvironment { | ||||
|     //Repositories for handlinger mot database: | ||||
|  | @ -59,9 +56,9 @@ fun configureRouting(): ApplicationEngine = embeddedServer(CIO, applicationEngin | |||
|                 val testMelding = feilmeldingRepository.hentAlleFeilmeldinger() | ||||
|                 call.respond(status = HttpStatusCode.Created, message = testMelding) | ||||
|             } | ||||
|             post("/api/hentsok"){ | ||||
|             get("/api/hentsok/{sokestreng}"){ | ||||
|                 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 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) | ||||
| 
 | ||||
|     } | ||||
|     @AfterEach | ||||
|     fun wipe() { | ||||
|  | @ -36,7 +39,6 @@ class FeilmeldingTest { | |||
|     } | ||||
|     @Test | ||||
|     fun `Sett opp testdatabasen riktig`(){ | ||||
|         feilmeldingRepository.lagre(feilmelding) | ||||
|         transaction { | ||||
|             assertEquals(1, FeilmeldingTable.selectAll().map { | ||||
|                 it | ||||
|  | @ -46,7 +48,6 @@ class FeilmeldingTest { | |||
| 
 | ||||
|     @Test | ||||
|     fun `Lagrer feilmelding i databasen`() { | ||||
|         feilmeldingRepository.lagre(feilmelding) | ||||
|         transaction { | ||||
|             val actual = FeilmeldingTable.selectAll().single() | ||||
|             assertEquals("Test", actual[FeilmeldingTable.tittel]) | ||||
|  | @ -57,14 +58,35 @@ class FeilmeldingTest { | |||
| 
 | ||||
|     @Test | ||||
|     fun `Henter alle feilmeldinger i databasen`() { | ||||
|         feilmeldingRepository.lagre(feilmelding) | ||||
|         transaction { | ||||
|             val res: List<Feilmelding> = feilmeldingRepository.hentAlleFeilmeldinger() | ||||
|             val resultat: List<Feilmelding> = feilmeldingRepository.hentAlleFeilmeldinger() | ||||
|             val actual = FeilmeldingTable.selectAll() | ||||
|             assertEquals(actual.map { it }.size, res.size) | ||||
|             assertEquals("Test", res[0].tittel) | ||||
|             assertEquals("Testesen", res[0].beskrivelse) | ||||
|             assertEquals(LocalDateTime.of(2023, 1, 1, 8, 0), res[0].dato) | ||||
|             assertEquals(actual.map { it }.size, resultat.size) | ||||
|             assertEquals("Test", resultat[0].tittel) | ||||
|             assertEquals("Testesen", resultat[0].beskrivelse) | ||||
|             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() | ||||
|     } | ||||
|     */ | ||||
| } | ||||
		Reference in a new issue
	
	 Amalie Mansåker
						Amalie Mansåker