Ejemplo n.º 1
0
        public IList <Translation> GetTranslationsById(IEnumerable <int> ids, bool reverse)
        {
            var idsList = ids.ToList();
            var data    = TranslationsRepository.GetAll().Where(x => idsList.Contains(x.Id));

            return(reverse
                ? ReverseTranslations(data).ToList()
                : data.ToList());
        }
        public int InsertOrUpdate(DictionaryDTO dictionaryVo)
        {
            using (var transaction = Context.Database.BeginTransaction())
            {
                try
                {
                    var dictionary = Mapper.Map <Dictionary>(dictionaryVo);

                    if (dictionary.Id > 0)
                    {
                        Context.Entry(dictionary).State = EntityState.Modified;
                        DictionariesRepository.Update(dictionary);
                    }
                    else
                    {
                        dictionary.Date = DateTime.Now;
                        dictionary.ParentDictionaryId = null;
                        DictionariesRepository.Insert(dictionary);
                    }
                    DictionariesRepository.Save();

                    dictionaryVo.TranslationList.ToList().ForEach(x => x.DictionaryId = dictionary.Id);

                    var translations        = dictionaryVo.TranslationList.Select(x => x.Id).ToList();
                    var currentTranslations = TranslationsRepository
                                              .GetAll()
                                              .Where(x => x.DictionaryId == dictionary.Id)
                                              .ToList();
                    var ids      = currentTranslations.Select(x => x.Id).ToList();
                    var toDelete = currentTranslations.Where(x => !translations.Contains(x.Id)).ToList();
                    var toAdd    = dictionaryVo.TranslationList?.Where(x => !ids.Contains(x.Id)).ToList() ?? new List <Translation>();
                    var toUpdate = dictionaryVo.TranslationList?.Where(x => ids.Contains(x.Id)).ToList() ?? new List <Translation>();

                    foreach (var trans in toDelete)
                    {
                        GameSessionTranslationsRepository.DeleteByTranslationId(trans.Id);
                        TranslationsRepository.Delete(trans);
                    }

                    foreach (var trans in toUpdate)
                    {
                        TranslationsRepository.Update(trans);
                    }

                    foreach (var trans in toAdd)
                    {
                        TranslationsRepository.Insert(trans);
                    }

                    TranslationsRepository.Save();

                    transaction.Commit();
                    return(dictionary.Id);
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    return(-1);
                }
            }
        }