Ejemplo n.º 1
0
        public async Task <TruncatedUrl> Update(TruncatedUrl url)
        {
            this.tuRepository.Update(url);
            await this.SaveAsync();

            return(url);
        }
Ejemplo n.º 2
0
        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);
                }
            }));
        }
Ejemplo n.º 3
0
        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);
            }));
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        public async Task <ActionResult> Redirect(string truncatedUrl)
        {
            TruncatedUrl url = await this.truncatedUrlServiceProvider.TruncatedUrlService.Jump(truncatedUrl);

            return(this.RedirectPermanent(url.OriginalUrl));
        }