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))); }
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); }