public async Task <UserAlertSummaryDto> CreateUserAlertSummary(UserAlert repoAlert)
        {
            var bestDealProduct = await this._productRepository.GetAsync(repoAlert.BestCurrentDeal.ProductId);

            var bestDealUrl     = new Uri(bestDealProduct.Uri);
            var bestDealHandler = this._handlerFactory.CreateHandler(bestDealUrl);

            var userAlertSummary = new UserAlertSummaryDto
            {
                Id              = repoAlert.Id,
                Title           = repoAlert.Title,
                ImageUrl        = repoAlert.ImageUrl,
                IsActive        = repoAlert.IsActive,
                BestCurrentDeal = new DealDto
                {
                    Price       = repoAlert.BestCurrentDeal.Price,
                    ModifiedAt  = repoAlert.BestCurrentDeal.ModifiedAt,
                    OriginalUrl = bestDealProduct.Uri,
                    ProductUrl  = bestDealHandler.HandleManipulateUrl(bestDealUrl).AbsoluteUri
                }
            };

            return(userAlertSummary);
        }
        public virtual async Task <IActionResult> UpdateAlertSummary(string userId, [FromBody] UserAlertSummaryDto alert)
        {
            try
            {
                var repoUserAlert = await this._alertRepository.GetAsync(userId, alert.Id);

                repoUserAlert.IsActive = alert.IsActive;
                repoUserAlert.Title    = alert.Title;

                repoUserAlert = await this._alertRepository.UpdateAsync(userId, repoUserAlert);

                var userAlert = await this._userAlertFactory.CreateUserAlertSummary(repoUserAlert);

                return(this.Ok(userAlert));
            }
            catch (KeyNotFoundException)
            {
                return(this.NotFound("The specified source is not yet supported."));
            }
            catch (ParseException e)
            {
                return(this.BadRequest(e.Message));
            }
        }