Skip to content

Commit

Permalink
Uses emit example
Browse files Browse the repository at this point in the history
  • Loading branch information
jesperancinha committed Jan 26, 2024
1 parent b6c7092 commit f093487
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 55 deletions.
16 changes: 12 additions & 4 deletions car-parts-reactive/generated-requests.http
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
###
GET http://localhost:8080/break

###
GET http://localhost:8080/keys

###
GET http://localhost:8080/parts

<> 2024-01-15T074950.200.json
<> 2024-01-15T074933.200.json
###
GET http://localhost:8080/parts/list

###
GET http://localhost:8080/break
GET http://localhost:8080/parts/suspend

###
GET http://localhost:8080/keys
GET http://localhost:8080/parts/correct


Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
package org.jesperancinha.carpartsreactive

import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.job
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories
import org.springframework.data.repository.kotlin.CoroutineCrudRepository
import org.springframework.web.bind.annotation.*
import kotlin.coroutines.coroutineContext

@SpringBootApplication
@EnableR2dbcRepositories
Expand All @@ -19,50 +13,6 @@ fun main(args: Array<String>) {
runApplication<CarPartsReactiveApplication>(*args)
}

@RestController
@RequestMapping
class CarController(
val carPartRepository: CarPartRepository
) {

@GetMapping("/parts")
suspend fun getParts(): List<String> {
println(coroutineContext)
return listOf("breaks", "keys", "lights")
}

@GetMapping("/break")
suspend fun getBreak(): String {
println("Current Coroutine Context -> $coroutineContext")
println("Current Coroutine Context -> ${coroutineContext.job}")
println("Main Coroutine Context -> ${currentCoroutineContext()}")
println("Main Coroutine Context -> ${currentCoroutineContext().job}")
println("Current Thread -> ${Thread.currentThread()}")
return "break"
}

@GetMapping("/keys")
fun getKeys(): String {
return "keys"
}

@GetMapping("/parts/correct")
fun getPartsCorrect(): Flow<String> {
return listOf("breaks", "keys", "lights").asFlow()
}

@GetMapping("/parts/{id}")
suspend fun getPartsCorrect(
@PathVariable("id") id:String
): CarPart? = carPartRepository.findById(id)

@PostMapping("/parts")
suspend fun createPart(@RequestBody carPart: CarPart) {
println(coroutineContext)
println(carPartRepository)
}
}

data class CarPart(
val id: String,
val name: String
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package org.jesperancinha.carpartsreactive.rest

import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.job
import org.jesperancinha.carpartsreactive.CarPart
import org.jesperancinha.carpartsreactive.CarPartRepository
import org.springframework.http.MediaType
import org.springframework.web.bind.annotation.*
import kotlin.coroutines.coroutineContext

@RestController
@RequestMapping
class CarController(
val carPartRepository: CarPartRepository
) {

@GetMapping("/parts/list", "/parts")
suspend fun getParts(): List<String> {
println(coroutineContext)
return listOf("breaks", "keys", "lights")
}

@GetMapping("/parts/suspend", produces = [MediaType.APPLICATION_JSON_VALUE])
suspend fun getPartsUsingFlow(): Flow<String> {
println(coroutineContext)
return flow {
println(coroutineContext)
emit("breaks")
emit("keys")
emit("lights")
}
}

@GetMapping("/parts/correct", produces = [MediaType.APPLICATION_JSON_VALUE])
fun getPartsUsingFlowWithoutSuspend(): Flow<String> {
return flow {
println(coroutineContext)
emit("breaks")
emit("keys")
emit("lights")
}
}

@GetMapping("/break")
suspend fun getBreak(): String {
println("Current Coroutine Context -> $coroutineContext")
println("Current Coroutine Context -> ${coroutineContext.job}")
println("Main Coroutine Context -> ${currentCoroutineContext()}")
println("Main Coroutine Context -> ${currentCoroutineContext().job}")
println("Current Thread -> ${Thread.currentThread()}")
return "break"
}

@GetMapping("/keys")
fun getKeys(): String {
return "keys"
}


@GetMapping("/parts/{id}")
suspend fun getPartsCorrect(
@PathVariable("id") id: String
): CarPart? = carPartRepository.findById(id)

@PostMapping("/parts")
suspend fun createPart(@RequestBody carPart: CarPart) {
println(coroutineContext)
println(carPartRepository)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.mockk
import kotlinx.coroutines.test.runTest
import org.jesperancinha.carpartsreactive.rest.CarController
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.platform.commons.logging.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.context.annotation.Bean
Expand Down

0 comments on commit f093487

Please sign in to comment.