Eric
05/04/2023, 12:39 PMCoroutineCrudRepository
and just a simple @RestController
. I'm trying to make sure I'm handling transactions properly. Using @Transactional
isn't supported. I'm injecting a TransactionalOperator
to my controller and using it like this:
@PostMapping("/")
suspend fun create(@Valid @RequestBody info: Info): ResponseEntity<Model> =
doInTransaction { repo.save(convert(info)).created() }
@GetMapping("/{id}")
suspend fun read(@PathVariable id: Id): ResponseEntity<Model> = doInTransaction { repo.findById(id).okOrNotFound() }
@GetMapping
suspend fun readAll(): ResponseEntity<List<Model>> = doInTransaction { repo.findAll().toList().ok() }
private suspend fun <T> doInTransaction(block: suspend () -> T): T =
transactionalOperator.executeAndAwait { block() }
Is using executeAndAwait
like this correct?wrongwrong
05/05/2023, 3:44 AMimport kotlinx.coroutines.reactor.awaitSingle
import kotlinx.coroutines.reactor.mono
transactionalOperator
.transactional(mono(block = block))
.awaitSingle()