diff --git a/I18N Commander/Processor/TranslationProcessor.cs b/I18N Commander/Processor/TranslationProcessor.cs new file mode 100644 index 0000000..42e19e9 --- /dev/null +++ b/I18N Commander/Processor/TranslationProcessor.cs @@ -0,0 +1,52 @@ +using DataModel.Database; +using DataModel.Database.Common; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; + +namespace Processor; + +public static class TranslationProcessor +{ + public static async Task> GetTranslations(TextElement textElement) + { + await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); + var missedTranslations = new List(); + var cultureInfos = await AppSettings.GetCultureInfos(); + foreach (var cultureInfo in cultureInfos) + { + if(!await db.Translations.AnyAsync(n => n.TextElement == textElement && n.Culture == cultureInfo.Code)) + missedTranslations.Add(new Translation + { + Culture = cultureInfo.Code, + Text = string.Empty, + }); + } + + if(missedTranslations.Count > 0) + { + textElement.Translations.AddRange(missedTranslations); + db.TextElements.Update(textElement); + await db.SaveChangesAsync(); + } + + return await db.Translations.Where(n => n.TextElement == textElement).ToListAsync(); + } + + public static async Task> SaveChangedTranslation(int translationId, string text) + { + await using var db = ProcessorMeta.ServiceProvider.GetRequiredService(); + var dbTranslation = await db.Translations.FirstAsync(n => n.Id == translationId); + dbTranslation.Text = text; + + try + { + // Save the changes: + await db.SaveChangesAsync(); + return new ProcessorResult(dbTranslation); + } + catch (DbUpdateException updateException) + { + return updateException.ToProcessorResult(); + } + } +} \ No newline at end of file