From 3f099d187c9d32ba18f3d8697442085186ef97e4 Mon Sep 17 00:00:00 2001 From: Bonny Lin <111042029+Bonny07@users.noreply.github.com> Date: Sun, 31 May 2026 19:47:09 +0900 Subject: [PATCH] fix(service): return 500 instead of crashing on translation error (#224) The /translate, /v1/translate and /v2/translate handlers called log.Fatalf when TranslateByDeepLX returned an error. log.Fatalf calls os.Exit, so a single failed translation would tear down the whole server process. Return a 500 JSON response and keep serving instead. --- service/service.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/service/service.go b/service/service.go index 60a5062..e45b088 100644 --- a/service/service.go +++ b/service/service.go @@ -127,7 +127,11 @@ func Router(cfg *Config) *gin.Engine { result, err := translate.TranslateByDeepLX(sourceLang, targetLang, translateText, tagHandling, proxyURL, "") if err != nil { - log.Fatalf("Translation failed: %s", err) + c.JSON(http.StatusInternalServerError, gin.H{ + "code": http.StatusInternalServerError, + "message": "Translation failed: " + err.Error(), + }) + return } if result.Code == http.StatusOK { @@ -191,7 +195,11 @@ func Router(cfg *Config) *gin.Engine { result, err := translate.TranslateByDeepLX(sourceLang, targetLang, translateText, tagHandling, proxyURL, dlSession) if err != nil { - log.Fatalf("Translation failed: %s", err) + c.JSON(http.StatusInternalServerError, gin.H{ + "code": http.StatusInternalServerError, + "message": "Translation failed: " + err.Error(), + }) + return } if result.Code == http.StatusOK { @@ -243,7 +251,11 @@ func Router(cfg *Config) *gin.Engine { result, err := translate.TranslateByDeepLX("", targetLang, translateText, "", proxyURL, "") if err != nil { - log.Fatalf("Translation failed: %s", err) + c.JSON(http.StatusInternalServerError, gin.H{ + "code": http.StatusInternalServerError, + "message": "Translation failed: " + err.Error(), + }) + return } if result.Code == http.StatusOK {