Files
FictionArchive/FictionArchive.Service.TranslationService/Services/TranslationEngineService.cs

40 lines
1.7 KiB
C#

using FictionArchive.Common.Enums;
using FictionArchive.Service.TranslationService.Models;
using FictionArchive.Service.TranslationService.Models.Database;
using FictionArchive.Service.TranslationService.Models.Enums;
using FictionArchive.Service.TranslationService.Services.Database;
using FictionArchive.Service.TranslationService.Services.TranslationEngines;
namespace FictionArchive.Service.TranslationService.Services;
public class TranslationEngineService
{
private readonly IEnumerable<ITranslationEngine> _translationEngines;
private readonly TranslationServiceDbContext _dbContext;
public TranslationEngineService(IEnumerable<ITranslationEngine> translationEngines, TranslationServiceDbContext dbContext)
{
_translationEngines = translationEngines;
_dbContext = dbContext;
}
public async Task<TranslationResult> Translate(Language from, Language to, string text, string translationEngineKey)
{
var engine = _translationEngines.FirstOrDefault(engine => engine.Descriptor.Key == translationEngineKey);
var translation = await engine.GetTranslation(text, from, to);
_dbContext.TranslationRequests.Add(new TranslationRequest()
{
OriginalText = text,
BilledCharacterCount = translation.BilledCharacterCount, // FILL ME
From = from,
To = to,
Status = translation != null ? TranslationRequestStatus.Success : TranslationRequestStatus.Failed,
TranslatedText = translation.TranslatedText,
TranslationEngineKey = translationEngineKey
});
await _dbContext.SaveChangesAsync();
return translation;
}
}