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