- folder-action.ts: 18处 console.log -> log.error - auth-action.ts: 4处 console.error -> log.error - dictionary-action/service.ts: 3处 -> log.error - translator-action/service.ts: 3处 -> log.error - bigmodel/translator/orchestrator.ts: console -> log.debug/info/error - bigmodel/tts.ts: console -> log.error/warn - bigmodel/dictionary/*.ts: console -> log.error/debug/info 客户端代码(browser、page.tsx)保留 console.error
73 lines
2.7 KiB
TypeScript
73 lines
2.7 KiB
TypeScript
import { executeTranslation } from "@/lib/bigmodel/translator/orchestrator";
|
|
import { repoCreateTranslationHistory, repoSelectLatestTranslation } from "./translator-repository";
|
|
import { ServiceInputTranslateText, ServiceOutputTranslateText } from "./translator-service-dto";
|
|
import { createLogger } from "@/lib/logger";
|
|
|
|
const log = createLogger("translator-service");
|
|
|
|
export const serviceTranslateText = async (
|
|
dto: ServiceInputTranslateText
|
|
): Promise<ServiceOutputTranslateText> => {
|
|
const { sourceText, targetLanguage, forceRetranslate, needIpa, userId } = dto;
|
|
|
|
// Check for existing translation
|
|
const lastTranslation = await repoSelectLatestTranslation({
|
|
sourceText,
|
|
targetLanguage,
|
|
});
|
|
|
|
if (forceRetranslate || !lastTranslation) {
|
|
// Call AI for translation
|
|
const response = await executeTranslation(
|
|
sourceText,
|
|
targetLanguage,
|
|
needIpa
|
|
);
|
|
|
|
// Save translation history asynchronously (don't block response)
|
|
repoCreateTranslationHistory({
|
|
userId,
|
|
sourceText,
|
|
sourceLanguage: response.sourceLanguage,
|
|
targetLanguage: response.targetLanguage,
|
|
translatedText: response.translatedText,
|
|
sourceIpa: needIpa ? response.sourceIpa : undefined,
|
|
targetIpa: needIpa ? response.targetIpa : undefined,
|
|
}).catch((error) => {
|
|
log.error("Failed to save translation data", { error });
|
|
});
|
|
|
|
return {
|
|
sourceText: response.sourceText,
|
|
translatedText: response.translatedText,
|
|
sourceLanguage: response.sourceLanguage,
|
|
targetLanguage: response.targetLanguage,
|
|
sourceIpa: response.sourceIpa || "",
|
|
targetIpa: response.targetIpa || "",
|
|
};
|
|
} else {
|
|
// Return cached translation
|
|
// Still save a history record for analytics
|
|
repoCreateTranslationHistory({
|
|
userId,
|
|
sourceText,
|
|
sourceLanguage: lastTranslation.sourceLanguage,
|
|
targetLanguage: lastTranslation.targetLanguage,
|
|
translatedText: lastTranslation.translatedText,
|
|
sourceIpa: lastTranslation.sourceIpa || undefined,
|
|
targetIpa: lastTranslation.targetIpa || undefined,
|
|
}).catch((error) => {
|
|
log.error("Failed to save translation data", { error });
|
|
});
|
|
|
|
return {
|
|
sourceText,
|
|
translatedText: lastTranslation.translatedText,
|
|
sourceLanguage: lastTranslation.sourceLanguage,
|
|
targetLanguage: lastTranslation.targetLanguage,
|
|
sourceIpa: lastTranslation.sourceIpa || "",
|
|
targetIpa: lastTranslation.targetIpa || "",
|
|
};
|
|
}
|
|
};
|