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;
            }
        }
示例#2
0
        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 }));
        }