Skip to content

Commit a8c7397

Browse files
authored
feat: OCR parsing 로깅을 추가한다 (#35)
1 parent 513b897 commit a8c7397

File tree

1 file changed

+32
-19
lines changed

1 file changed

+32
-19
lines changed

Diff for: src/main/kotlin/me/misik/api/app/CreateReviewFacade.kt

+32-19
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,32 @@ import kotlinx.coroutines.CoroutineScope
55
import kotlinx.coroutines.flow.filterNot
66
import kotlinx.coroutines.launch
77
import me.misik.api.api.response.ParsedOcrResponse
8+
import me.misik.api.core.Chatbot
9+
import me.misik.api.core.GracefulShutdownDispatcher
10+
import me.misik.api.core.OcrParser
811
import me.misik.api.domain.CreateReviewCache
9-
import me.misik.api.domain.request.CreateReviewRequest
10-
import me.misik.api.domain.request.OcrTextRequest
1112
import me.misik.api.domain.Review
1213
import me.misik.api.domain.ReviewService
1314
import me.misik.api.domain.prompt.PromptService
14-
import me.misik.api.core.Chatbot
15-
import me.misik.api.core.OcrParser
16-
import me.misik.api.core.GracefulShutdownDispatcher
15+
import me.misik.api.domain.request.CreateReviewRequest
16+
import me.misik.api.domain.request.OcrTextRequest
1717
import org.slf4j.LoggerFactory
1818
import org.springframework.stereotype.Service
1919

2020

2121
@Service
2222
class CreateReviewFacade(
23-
private val chatbot:Chatbot,
23+
private val chatbot: Chatbot,
2424
private val ocrParser: OcrParser,
25-
private val reviewService:ReviewService,
25+
private val reviewService: ReviewService,
2626
private val promptService: PromptService,
2727
private val createReviewCache: CreateReviewCache,
2828
private val objectMapper: ObjectMapper,
2929
) {
3030

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

33-
fun createReviewInBackground(deviceId:String, createReviewRequest: CreateReviewRequest) : Long {
33+
fun createReviewInBackground(deviceId: String, createReviewRequest: CreateReviewRequest): Long {
3434
val prompt = promptService.getByStyle(createReviewRequest.reviewStyle)
3535
val review = reviewService.createReview(deviceId, prompt.command, createReviewRequest)
3636

@@ -54,7 +54,7 @@ class CreateReviewFacade(
5454
}
5555
}.invokeOnCompletion {
5656
if (it == null) {
57-
createReviewCache.get(review.id)?.let {
57+
createReviewCache.get(review.id).let {
5858
reviewService.updateAndCompleteReview(it.id, it.text)
5959
}
6060
createReviewCache.remove(review.id)
@@ -65,23 +65,36 @@ class CreateReviewFacade(
6565
createReviewCache.remove(review.id)
6666
throw it
6767
}
68-
logger.warn("Failed to create review. retrying... retryCount: \"${retryCount + 1}\"", it)
68+
logger.warn(
69+
"Failed to create review. retrying... retryCount: \"${retryCount + 1}\"",
70+
it
71+
)
6972
createReviewWithRetry(review, retryCount + 1)
7073
}
7174
}
7275

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

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

80-
if (parsedOcr.parsed.isEmpty()) {
81-
throw IllegalArgumentException("Parsed OCR content is empty")
82-
}
82+
val responseContent = response.result?.message?.content ?: ""
83+
logger.info("ocr responseContent $responseContent")
84+
85+
val parsedOcr = objectMapper.readValue(responseContent, ParsedOcrResponse::class.java)
86+
?: throw IllegalStateException("Invalid OCR text format")
8387

84-
return parsedOcr
88+
require(parsedOcr.parsed.isEmpty().not()) { "Parsed OCR content is empty" }
89+
90+
parsedOcr
91+
}.getOrElse {
92+
logger.error("OCR Parsing fail", it)
93+
if (retryCount < MAX_RETRY_COUNT) {
94+
return@getOrElse parseOcrWithRetry(ocrText, retryCount + 1)
95+
}
96+
throw it
97+
}
8598
}
8699

87100
private companion object {

0 commit comments

Comments
 (0)