public async Task <IWriterResult> CreateAnswer(string userId, CreateMarketAnswerModel model) { try { var currentUser = new Guid(userId); using (var context = ExchangeDataContextFactory.CreateContext()) { var user = await context.Users.FirstOrDefaultNoLockAsync(x => x.Id == currentUser); if (user == null) { return(new WriterResult(false, "Unauthorized")); } var question = await context.MarketItemQuestion .Where(x => x.Id == model.QuestionId && x.MarketItem.UserId == currentUser) .FirstOrDefaultNoLockAsync().ConfigureAwait(false); if (question == null) { return(new WriterResult(false, $"Question #{model.QuestionId} not found.")); } question.Answer = model.Answer; await context.SaveChangesAsync().ConfigureAwait(false); model.QuestionUserId = question.UserId; return(new WriterResult(true)); } } catch (Exception) { throw; } }
public async Task <ActionResult> SubmitAnswer(SubmitMarketItemAnswerModel model) { if (!ModelState.IsValid) { return(RedirectToAction("MarketItem", new { marketItemId = model.MarketItemId })); } var request = new CreateMarketAnswerModel { Answer = model.Answer, QuestionId = model.QuestionId }; var result = await MarketplaceWriter.CreateAnswer(User.Identity.GetUserId(), request); if (!result.Success) { return(ViewMessage(new ViewMessageModel(ViewMessageType.Danger, Resources.Market.itemActionErrorMessageTitle, Resources.Market.itemAnswerPostErrorMessage))); } var user = await UserManager.FindByIdAsync(request.QuestionUserId.ToString()); if (user != null) { var callbackUrl = Url.Action("MarketItem", "MarketPlace", new { marketItemId = model.MarketItemId }, protocol: Request.Url.Scheme); await SendEmailAsync(EmailTemplateType.MarketPlaceNewAnswer, model.MarketItemId, user.Email, user.Id, User.Identity.Name, model.Question, model.Answer, callbackUrl); } ModelState.AddModelError(Resources.Market.itemActionSuccessMessageTitle, Resources.Market.itemAnswerPostSuccessMessage); return(RedirectToAction("MarketItem", new { marketItemId = model.MarketItemId })); }