using eprintServer.Data; using eprintServer.Entities; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace eprintServer.Services; public class TranslationService { private readonly DataContext _context; private readonly List MandatoryTags = new List { "en", "ar" }; public TranslationService(DataContext context) { _context = context; } public async Task> GetAllAvailableLanguagesAsync() { return await _context.Languages.OrderBy(l => l.Id).ToListAsync(); } public async Task GetTranslationSettingAsync() { var setting = await _context.TranslationSettings.FindAsync(1L); if (setting == null) { setting = new TranslationSetting { Id = 1, ActiveLanguageTags = MandatoryTags }; _context.TranslationSettings.Add(setting); await _context.SaveChangesAsync(); } if (setting.ActiveLanguageTags != null && setting.ActiveLanguageTags.Any()) { var activeTags = setting.ActiveLanguageTags; setting.ActiveLanguages = await _context.Languages .Where(l => activeTags.Contains(l.Tag)) .ToListAsync(); } return setting; } public async Task UpdateActiveLanguagesAsync(List selectedTags) { var setting = await GetTranslationSettingAsync(); var validDatabaseTags = await _context.Languages .Select(l => l.Tag) .ToListAsync(); var confirmedActiveTags = selectedTags .Where(tag => validDatabaseTags.Contains(tag)) .Distinct() .ToList(); var finalActiveTags = confirmedActiveTags .Union(MandatoryTags.Where(m => validDatabaseTags.Contains(m))) .ToList(); setting.ActiveLanguageTags = finalActiveTags; _context.TranslationSettings.Update(setting); await _context.SaveChangesAsync(); return setting; } }