Пример #1
0
        public override async Task <GetIdiomInfoReply> AddIdiom(AddIdiomRequest request, ServerCallContext context)
        {
            var idiom = new Database.Models.Idiom
            {
                Text       = request.Text,
                Meaning    = request.Meaning,
                Usage      = request.Usage,
                LanguageId = request.LanguageId,
                UserId     = int.Parse(context.GetHttpContext().User.Identity.Name)
            };
            var result = await _idioms.AddIdiom(idiom, request.Links.ToList());

            if (!result)
            {
                throw new RpcException(new Status(StatusCode.AlreadyExists, "Idiom with this text already exist"));
            }
            return(await _idioms.GetIdiomInfo(idiom.IdiomId, int.Parse(context.GetHttpContext().User.Identity.Name)));
        }
Пример #2
0
        public async Task <bool> AddIdiom(Database.Models.Idiom idiom, List <IdiomLinkRequest> links)
        {
            if (!await _db.Idioms.AnyAsync(x => x.Text == idiom.Text))
            {
                idiom.DateAdded = DateTime.UtcNow;
                _db.Idioms.Add(idiom);
                await _db.SaveChangesAsync();

                _db.Links.AddRange(_db.Idioms
                                   .Where(x => links.Select(y => y.IdiomId).Contains(x.IdiomId))
                                   .Select(x => new Link
                {
                    RootId     = idiom.IdiomId,
                    RelatedId  = x.IdiomId,
                    LinkTypeId = x.LanguageId == idiom.LanguageId ? (int)LinkTypes.Similar : (int)LinkTypes.Translation
                }));
                await _db.SaveChangesAsync();

                return(true);
            }
            return(false);
        }