From 6f1fc3c8fda40283c5c5dc7eb8bf8e1ddfd1d3a5 Mon Sep 17 00:00:00 2001 From: radl97 Date: Wed, 8 Jun 2022 10:56:13 +0200 Subject: [PATCH] Make increaseInterest transactional Moves the logic inside service layer. --- .../kirdev/schpincer/service/CircleService.kt | 24 +++++++++++++++++++ .../hu/kirdev/schpincer/web/ApiController.kt | 12 ++++------ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/hu/kirdev/schpincer/service/CircleService.kt b/src/main/kotlin/hu/kirdev/schpincer/service/CircleService.kt index 49e2903..d9aad6d 100644 --- a/src/main/kotlin/hu/kirdev/schpincer/service/CircleService.kt +++ b/src/main/kotlin/hu/kirdev/schpincer/service/CircleService.kt @@ -41,6 +41,30 @@ open class CircleService { repo.save(circleEntity) } + private fun internalIncreaseInterestAndSave(circleEntity: CircleEntity): Long { + val newInterest = circleEntity.interestCounter; + repo.save(circleEntity) + return newInterest + } + + @Transactional(readOnly = false) + open fun increaseInterest(id: Long): Long? { + val circleEntity = getOne(id) + if circleEntity == null { + return null // TODO throw error? + } + return internalIncreaseInterestAndSave(circleEntity) + } + + @Transactional(readOnly = false) + open fun increaseInterestByAlias(alias: String): Long? { + val circleEntity = findByAlias(id) + if circleEntity == null { + return null // TODO throw error? + } + return internalIncreaseInterestAndSave(circleEntity) + } + @Transactional(readOnly = true) open fun getOne(id: Long): CircleEntity? { return repo.getOne(id) diff --git a/src/main/kotlin/hu/kirdev/schpincer/web/ApiController.kt b/src/main/kotlin/hu/kirdev/schpincer/web/ApiController.kt index e64bd68..6c12dde 100644 --- a/src/main/kotlin/hu/kirdev/schpincer/web/ApiController.kt +++ b/src/main/kotlin/hu/kirdev/schpincer/web/ApiController.kt @@ -342,19 +342,17 @@ open class ApiController( @PostMapping("/provider/{circle}/increaseInterest") @ResponseBody fun circleIncreaseInterest(@PathVariable circle: String): ResponseEntity { - val circleEntity: CircleEntity? + var result: Long? if (circle.matches("^\\d+$".toRegex())) { val id = circle.toLong() - circleEntity = circles.getOne(id) + result = circles.increaseInterest(id) } else { - circleEntity = circles.findByAlias(circle) + result = circles.increaseInterestByAlias(circle) } - if (circleEntity == null) { + if result != null { return responseOf("Invalid Circle") } - val newInterest = ++circleEntity.interestCounter - circles.save(circleEntity) - return responseOf(""+newInterest) + return responseOf(""+result) } // @PostMapping("/easteregg/trashpanda/{feedback}")