예제 #1
0
        private async Task ImportExpression(DbTranslatedExpression expression, Language language)
        {
            if (await TryUseExisting(expression, language))
            {
                return;
            }

            if (await TryAddTranslation(expression, language))
            {
                return;
            }

            await Task.WhenAll(expression.Words.Select(word => ImportWord(word, language)));

            expression.Validate();

            var wordIds       = expression.Words.Select(word => word.Id).ToArray();
            var newExpression = new DbExpression {
                Cefr         = expression.Cefr,
                ExprType     = expression.ExprType,
                Translations = new Dictionary <string, DbWords> {
                    { language, new DbWords {
                          WordIds = wordIds
                      } }
                }
            };

            var importedExpression = await _expressions.Add(newExpression);

            expression.ExpressionId = importedExpression.Id;
        }
예제 #2
0
        private async Task <bool> TryUseExisting(DbTranslatedExpression expression, Language language)
        {
            var existing = await _exprTranslator.Translate(expression.ExpressionId, language);

            if (existing != null)
            {
                expression.Cefr     = existing.Expression.Cefr;
                expression.ExprType = existing.Expression.ExprType;
                expression.Words    = existing.Words.Select(
                    word => new DbTranslatedWord
                {
                    Id           = word.Word.Id,
                    Cefr         = word.Word.Cefr,
                    PartOfSpeech = word.Word.PartOfSpeech,
                    PictureId    = word.Word.PictureId,
                    Translation  = new DbTranslation
                    {
                        Native  = word.Native,
                        Spoken  = word.Spoken,
                        AudioId = word.AudioId
                    }
                }).ToArray();
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #3
0
        private async Task <bool> TryAddTranslation(DbTranslatedExpression expression, Language language)
        {
            var existing = await _expressions.Get(expression.ExpressionId);

            if (existing != null && !existing.Translations !.ContainsKey(language))
            {
                var wordsIds = expression.Words.Select(x => x.Id).ToArray();
                existing.Translations.Add(language, new DbWords {
                    WordIds = wordsIds
                });
                await _expressions.Replace(existing);

                return(true);
            }

            return(false);
        }