コード例 #1
0
ファイル: UrlManager.cs プロジェクト: Splinked/UrlShortner
        public Task <Stat> Click(string segment, string referer, string ip)
        {
            return(Task.Run(() =>
            {
                using (var ctx = new UrlShortnerContext())
                {
                    ShortUrl url = ctx.ShortUrls.Where(u => u.Segment == segment).FirstOrDefault();
                    if (url == null)
                    {
                        throw new UrlShortnerNotFoundException();
                    }

                    url.NumOfClicks = url.NumOfClicks + 1;

                    Stat stat = new Stat()
                    {
                        ClickDate = DateTime.Now,
                        Ip = ip,
                        Referer = referer,
                        ShortUrl = url
                    };

                    ctx.Stats.Add(stat);

                    ctx.SaveChanges();

                    return stat;
                }
            }));
        }
コード例 #2
0
ファイル: UrlManager.cs プロジェクト: Splinked/UrlShortner
        public Task <ShortUrl> ShortenUrl(string longUrl, string ip, string segment = "")
        {
            return(Task.Run(() =>
            {
                using (var ctx = new UrlShortnerContext())
                {
                    ShortUrl url;

                    url = ctx.ShortUrls.Where(u => u.LongUrl == longUrl).FirstOrDefault();
                    if (url != null)
                    {
                        return url;
                    }

                    if (!string.IsNullOrEmpty(segment))
                    {
                        if (ctx.ShortUrls.Where(u => u.Segment == segment).Any())
                        {
                            throw new UrlShortnerConflictException();
                        }
                    }
                    else
                    {
                        segment = this.NewSegment();
                    }

                    if (string.IsNullOrEmpty(segment))
                    {
                        throw new ArgumentException("Segment is empty");
                    }

                    url = new ShortUrl()
                    {
                        Added = DateTime.Now,
                        Ip = ip,
                        LongUrl = longUrl,
                        NumOfClicks = 0,
                        Segment = segment
                    };

                    ctx.ShortUrls.Add(url);

                    ctx.SaveChanges();

                    return url;
                }
            }));
        }
コード例 #3
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, UrlShortnerContext dataContext)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
            dataContext.Database.Migrate();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
コード例 #4
0
ファイル: UrlManager.cs プロジェクト: Splinked/UrlShortner
        private string NewSegment()
        {
            using (var ctx = new UrlShortnerContext())
            {
                int i = 0;
                while (true)
                {
                    string segment = Guid.NewGuid().ToString().Substring(0, 6);
                    if (!ctx.ShortUrls.Where(u => u.Segment == segment).Any())
                    {
                        return(segment);
                    }

                    if (i > 30)
                    {
                        break;
                    }

                    i++;
                }

                return(string.Empty);
            }
        }
コード例 #5
0
ファイル: UrlController.cs プロジェクト: Ryumkin/UrlShortener
 public UrlController(UrlShortnerContext dbContext)
 {
     _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
 }
コード例 #6
0
 public RedirectController(UrlShortnerContext context)
 {
     _context = context;
 }
コード例 #7
0
 public UrlDataRepository(UrlShortnerContext context)
 {
     _context = context;
 }