public async Task <TruncatedUrl> Update(TruncatedUrl url) { this.tuRepository.Update(url); await this.SaveAsync(); return(url); }
public Task <TruncatedUrl> TruncateUrl(string baseUrl, string originalUrl) { return(Task.Run( () => { TruncatedUrl truncatedUrl = this.Get(t => t.WithSameOriginal(originalUrl)); if (truncatedUrl != null) { return Task.FromResult(truncatedUrl); } else { //a quick randomize of url string randomSeed = RandomizeExtensions.GenerateRandomString(shortUrlSize); Uri shorUri = new Uri(new Uri(baseUrl), randomSeed); truncatedUrl = new TruncatedUrl { CreationTime = DateTime.Now, OriginalUrl = originalUrl, Jumps = 0, ShortUrl = shorUri.ToString() }; return this.Add(truncatedUrl); } })); }
public Task <TruncatedUrl> Jump(string shortUrl) { return(Task.Run( () => { TruncatedUrl truncatedUrl = this.Get(t => t.WithSameShortUrl(shortUrl)); if (truncatedUrl == null) { throw new Exception("Requested url is not found"); } truncatedUrl.Jumps++; return this.Update(truncatedUrl); })); }
public async Task <IHttpActionResult> Post([FromBody] string url) { if (string.IsNullOrEmpty(url)) { throw new ArgumentException("URL cannot be empty"); } Uri uriResult; bool created = Uri.TryCreate(url, UriKind.Absolute, out uriResult); if (!created) { throw new ArgumentException("Invalid URL format"); } string baseUrl = $"{HttpContext.Current.Request.Url.Scheme}://{HttpContext.Current.Request.Url.Authority}"; TruncatedUrl resultUrl = await this.truncatedUrlServiceProvider.TruncatedUrlService.TruncateUrl(baseUrl, url); return(this.Ok(resultUrl.ShortUrl)); }
public async Task <ActionResult> Redirect(string truncatedUrl) { TruncatedUrl url = await this.truncatedUrlServiceProvider.TruncatedUrlService.Jump(truncatedUrl); return(this.RedirectPermanent(url.OriginalUrl)); }