Skip to content

Commit d3fd656

Browse files
committed
Remove context receivers keeping raise DSL
1 parent 72e4b55 commit d3fd656

File tree

6 files changed

+18
-31
lines changed

6 files changed

+18
-31
lines changed

search/build.gradle.kts

-4
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,6 @@ application {
1717

1818
kotlin {
1919
jvmToolchain(22)
20-
21-
compilerOptions {
22-
freeCompilerArgs = listOf("-Xcontext-receivers")
23-
}
2420
}
2521

2622
repositories {

search/src/main/kotlin/no/java/conf/plugins/Respond.kt

-9
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package no.java.conf.plugins
33
import arrow.core.Either
44
import io.ktor.http.HttpStatusCode
55
import io.ktor.server.response.respond
6-
import io.ktor.server.response.respondRedirect
76
import io.ktor.server.routing.RoutingContext
87
import no.java.conf.model.ApiError
98

@@ -16,11 +15,3 @@ suspend inline fun <reified A : Any> Either<ApiError, A>.respond(
1615
}
1716

1817
suspend fun RoutingContext.respond(error: ApiError) = call.respond(error.statusCode, error.messageMap())
19-
20-
suspend inline fun <reified A : Any> Either<ApiError, A>.respondRedirect(
21-
context: RoutingContext,
22-
url: String
23-
) = when (this) {
24-
is Either.Left -> context.respond(value)
25-
is Either.Right -> context.call.respondRedirect(url)
26-
}

search/src/main/kotlin/no/java/conf/plugins/Search.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,15 @@ fun Application.configureSearchRouting(service: SearchService) {
4848

4949
get("/videos") {
5050
either {
51-
service.allVideos()
51+
service.allVideos(this)
5252
}.respond(this)
5353
}
5454

5555
post {
5656
either {
5757
service.textSearch(
58-
runCatching<TextSearchRequest?> { call.receiveNullable<TextSearchRequest>() }.getOrNull()
58+
runCatching<TextSearchRequest?> { call.receiveNullable<TextSearchRequest>() }.getOrNull(),
59+
this
5960
)
6061
}.respond(this)
6162
}

search/src/main/kotlin/no/java/conf/service/LocalFileService.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package no.java.conf.service
22

33
import io.github.oshai.kotlinlogging.KotlinLogging
4-
import io.ktor.client.request.get
54
import kotlinx.serialization.json.Json
65
import no.java.conf.config.LocalFileConfig
76
import no.java.conf.model.sessions.Session
@@ -27,7 +26,7 @@ class LocalFileService(
2726
sessions =
2827
filenames
2928
.map {
30-
val fileContent = javaClass.getResource(it.filename).readText()
29+
val fileContent = javaClass.getResource(it.filename)?.readText() ?: "[]"
3130

3231
val decodedSessions = json.decodeFromString<SPSessions>(fileContent)
3332

search/src/main/kotlin/no/java/conf/service/SearchService.kt

+10-9
Original file line numberDiff line numberDiff line change
@@ -78,24 +78,25 @@ class SearchService(
7878
readyState = State.INDEXED
7979
}
8080

81-
context(Raise<ApiError>)
82-
suspend fun allVideos(): List<VideoSearchResponse> {
83-
ensureReady(readyState)
81+
suspend fun allVideos(raise: Raise<ApiError>): List<VideoSearchResponse> {
82+
raise.ensureReady(readyState)
8483

8584
return searcher.allVideos(INDEX_NAME)
8685
}
8786

8887
fun state(): State = readyState
8988

90-
context(Raise<ApiError>)
91-
suspend fun textSearch(searchRequest: TextSearchRequest?): SearchResponse {
92-
ensureNotNull(searchRequest) {
93-
raise(SearchMissing)
89+
suspend fun textSearch(
90+
searchRequest: TextSearchRequest?,
91+
raise: Raise<ApiError>
92+
): SearchResponse {
93+
raise.ensureNotNull(searchRequest) {
94+
raise.raise(SearchMissing)
9495
}
9596

96-
ensureReady(readyState)
97+
raise.ensureReady(readyState)
9798

98-
return searcher.textSearch(INDEX_NAME, searchRequest)
99+
return searcher.textSearch(INDEX_NAME, searchRequest, raise)
99100
}
100101
}
101102

search/src/main/kotlin/no/java/conf/service/search/ElasticSearcher.kt

+4-5
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ private val logger = KotlinLogging.logger {}
3838
class ElasticSearcher(
3939
private val client: SearchClient,
4040
) {
41-
context(Raise<ApiError>)
4241
suspend fun allVideos(indexName: String): List<VideoSearchResponse> {
4342
val docCount = client.totalDocs(indexName)
4443

@@ -51,10 +50,10 @@ class ElasticSearcher(
5150
return sessions.parseHits<VideoSearchResponse>().sortedBy { -it.year }
5251
}
5352

54-
context(Raise<ApiError>)
5553
suspend fun textSearch(
5654
indexName: String,
57-
searchRequest: TextSearchRequest
55+
searchRequest: TextSearchRequest,
56+
raise: Raise<ApiError>
5857
): SearchResponse {
5958
val docCount = client.totalDocs(indexName)
6059

@@ -69,8 +68,8 @@ class ElasticSearcher(
6968
logger.debug { this.json() }
7069
}
7170

72-
ensure(searchResult.aggregations != null) {
73-
raise(AggregationsNotFound)
71+
raise.ensure(searchResult.aggregations != null) {
72+
raise.raise(AggregationsNotFound)
7473
}
7574

7675
return SearchResponse(

0 commit comments

Comments
 (0)