/// <summary>
        /// запись в бд новой сжатой ссылки
        /// </summary>
        public void Handle(CompressUrlCommand command)
        {
            CompressedUrl newUrl = new CompressedUrl()
            {
                ClickCount   = 0,
                CreationDate = DateTime.Now,
                //для простоты в качетве "короткого" id ссылки решил взять всё тот же гуид (для простоты)
                Id        = Guid.NewGuid().ToString("D"),
                SourceUrl = command.SourceUrl,
                UserId    = command.UserId
            };

            _context.Urls.Add(newUrl);
            _context.SaveChanges();
        }
Ejemplo n.º 2
0
        public string CompressUrl(string url)
        {
            try
            {
                string userId = _userService.GetCurrentUserId();

                url = WebUtility.UrlDecode(url);

                //если переданная ссылка невалидная и/или имеет схему, отличную от https или http,
                //выбрасываем исключение
                Uri  uriResult;
                bool result = Uri.TryCreate(url, UriKind.Absolute, out uriResult) &&
                              (uriResult.Scheme == "http" || uriResult.Scheme == "https");

                if (!result)
                {
                    throw new InvalidUrlException($"Invalid url {url}");
                }

                //создаем команду на "создание" новой сжатой ссылки
                CompressUrlCommand command = new CompressUrlCommand()
                {
                    SourceUrl = uriResult.ToString(),
                    UserId    = userId
                };
                //выполняем команду
                _compressorCommandHandler.Handle(command);

                //делаем запрос на последнюю созданную ссылку и возвращаем её
                var query = _compressorQuery.Urls.Where(u => u.UserId == userId).OrderByDescending(u => u.CreationDate).FirstOrDefault();
                return(JsonConvert.SerializeObject(query));
            }
            //обработка исключения при неверной ссылке
            catch (InvalidUrlException ex)
            {
                Response.StatusCode = 500;
                return(JsonConvert.SerializeObject(new ErrorDto()
                {
                    Code = ex.GetType().Name, Message = ex.Message
                }));
            }
        }