Skip to content

Commit

Permalink
release: 0.0.7 (#37)
Browse files Browse the repository at this point in the history
* feat: Swagger를 추가한다 (#33)

* feat: Swagger를 추가한다

* feat: Swagger path를 설정한다

* feat: 충돌 해소

* feat: springdoc 버전 업그레이드

* feat: OCR parsing 로깅을 추가한다 (#35)

---------

Co-authored-by: inpink <[email protected]>
  • Loading branch information
devxb and inpink authored Feb 9, 2025
2 parents 7e397b6 + a8c7397 commit b18547b
Showing 1 changed file with 32 additions and 19 deletions.
51 changes: 32 additions & 19 deletions src/main/kotlin/me/misik/api/app/CreateReviewFacade.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,32 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.filterNot
import kotlinx.coroutines.launch
import me.misik.api.api.response.ParsedOcrResponse
import me.misik.api.core.Chatbot
import me.misik.api.core.GracefulShutdownDispatcher
import me.misik.api.core.OcrParser
import me.misik.api.domain.CreateReviewCache
import me.misik.api.domain.request.CreateReviewRequest
import me.misik.api.domain.request.OcrTextRequest
import me.misik.api.domain.Review
import me.misik.api.domain.ReviewService
import me.misik.api.domain.prompt.PromptService
import me.misik.api.core.Chatbot
import me.misik.api.core.OcrParser
import me.misik.api.core.GracefulShutdownDispatcher
import me.misik.api.domain.request.CreateReviewRequest
import me.misik.api.domain.request.OcrTextRequest
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service


@Service
class CreateReviewFacade(
private val chatbot:Chatbot,
private val chatbot: Chatbot,
private val ocrParser: OcrParser,
private val reviewService:ReviewService,
private val reviewService: ReviewService,
private val promptService: PromptService,
private val createReviewCache: CreateReviewCache,
private val objectMapper: ObjectMapper,
) {

private val logger = LoggerFactory.getLogger(this::class.simpleName)

fun createReviewInBackground(deviceId:String, createReviewRequest: CreateReviewRequest) : Long {
fun createReviewInBackground(deviceId: String, createReviewRequest: CreateReviewRequest): Long {
val prompt = promptService.getByStyle(createReviewRequest.reviewStyle)
val review = reviewService.createReview(deviceId, prompt.command, createReviewRequest)

Expand All @@ -54,7 +54,7 @@ class CreateReviewFacade(
}
}.invokeOnCompletion {
if (it == null) {
createReviewCache.get(review.id)?.let {
createReviewCache.get(review.id).let {
reviewService.updateAndCompleteReview(it.id, it.text)
}
createReviewCache.remove(review.id)
Expand All @@ -65,23 +65,36 @@ class CreateReviewFacade(
createReviewCache.remove(review.id)
throw it
}
logger.warn("Failed to create review. retrying... retryCount: \"${retryCount + 1}\"", it)
logger.warn(
"Failed to create review. retrying... retryCount: \"${retryCount + 1}\"",
it
)
createReviewWithRetry(review, retryCount + 1)
}
}

fun parseOcrText(ocrText: OcrTextRequest): ParsedOcrResponse {
val response = ocrParser.createParsedOcr(OcrParser.Request.from(ocrText.text))
val responseContent = response.result?.message?.content ?: ""
fun parseOcrText(ocrText: OcrTextRequest): ParsedOcrResponse = parseOcrWithRetry(ocrText, 0)

val parsedOcr = objectMapper.readValue(responseContent, ParsedOcrResponse::class.java)
?: throw IllegalStateException("Invalid OCR text format")
private fun parseOcrWithRetry(ocrText: OcrTextRequest, retryCount: Int): ParsedOcrResponse {
return runCatching {
val response = ocrParser.createParsedOcr(OcrParser.Request.from(ocrText.text))

if (parsedOcr.parsed.isEmpty()) {
throw IllegalArgumentException("Parsed OCR content is empty")
}
val responseContent = response.result?.message?.content ?: ""
logger.info("ocr responseContent $responseContent")

val parsedOcr = objectMapper.readValue(responseContent, ParsedOcrResponse::class.java)
?: throw IllegalStateException("Invalid OCR text format")

return parsedOcr
require(parsedOcr.parsed.isEmpty().not()) { "Parsed OCR content is empty" }

parsedOcr
}.getOrElse {
logger.error("OCR Parsing fail", it)
if (retryCount < MAX_RETRY_COUNT) {
return@getOrElse parseOcrWithRetry(ocrText, retryCount + 1)
}
throw it
}
}

private companion object {
Expand Down

0 comments on commit b18547b

Please sign in to comment.