private async Task ImportWord(DbTranslatedWord word, Language language) { if (await TryUseExisting(word, language)) { return; } if (await TryAddTranslation(word, language)) { return; } word.Validate(); var newWord = new DbWord { Cefr = word.Cefr, PartOfSpeech = word.PartOfSpeech, PictureId = word.PictureId, Translations = new Dictionary <string, DbTranslation> { { language, word.Translation ! } } }; var importedWord = await _words.Add(newWord); word.Id = importedWord.Id; }
private async Task <bool> TryAddTranslation(DbTranslatedWord word, Language language) { var existing = await _words.Get(word.Id); if (existing != null && !existing.Translations !.ContainsKey(language)) { existing.Translations.Add(language, word.Translation !); await _words.Replace(existing); return(true); } return(false); }
private async Task <bool> TryUseExisting(DbTranslatedWord word, Language language) { var existing = await _wordTranslator.Translate(word.Id, language); if (existing != null) { word.Cefr = existing.Word.Cefr; word.PartOfSpeech = existing.Word.PartOfSpeech; word.PictureId = existing.Word.PictureId; word.Translation = new DbTranslation { Native = existing.Native, Spoken = existing.Spoken, AudioId = existing.AudioId }; return(true); } return(false); }