예제 #1
0
        public async Task <int> AddOrUpdateLink(LinkmirDbContext context)
        {
            int toReturn = 0;

            _link = new LinkmirLinkDbItem(Link);

            if (_link.IsValid())
            {
                var link = await context.Links.FindAsync(_link.ShortLink);

                if (link == null)
                {
                    link = _link;
                    context.Links.Add(link);
                }
                else
                {
                    link.SubmissionCount++;
                }

                await context.SaveChangesAsync();

                ShortLink = link.ShortLink;
                toReturn  = link.SubmissionCount;
            }
            return(toReturn);
        }
예제 #2
0
파일: Startup.cs 프로젝트: rhkean/linkmir
        private void AddTestData(LinkmirDbContext context)
        {
            var entryOne = new LinkmirLinkDbItem("https://www.google.com");

            context.Links.Add(entryOne);

            var entryTwo = new LinkmirLinkDbItem("https://images.google.com");

            context.Links.Add(entryTwo);

            var entryThree = new LinkmirLinkDbItem("https://open.spotify.com");

            context.Links.Add(entryThree);

            context.SaveChanges();
        }
예제 #3
0
        public static async Task <QueryDTO> QueryLinks(LinkmirDbContext context, QueryDTO query)
        {
            var toReturn = query;

            // a link cannot have a blank domain, so assume user meant "*"
            if (string.IsNullOrWhiteSpace(query.Domain))
            {
                query.Domain = "*";
            }

            var links = context.Links.AsQueryable();

            // if query.Domain == "*", then all domains are valid, so skip this filter
            if (query.Domain != "*")
            {
                links = links.Where(l => l.Domain == query.Domain);
            }

            // if query.Subdomain != "*", filter the subset by query value
            if (query.SubDomain != "*")
            {
                links = links.Where(l => l.Subdomain == query.SubDomain);
            }

            toReturn.Links = await links.Select(l => new LinkStatsDTO
            {
                Link            = l.Link,
                ShortLink       = l.ShortLink,
                Domain          = l.Domain,
                Subdomain       = l.Subdomain,
                SubmissionCount = l.SubmissionCount,
                AccessCount     = l.AccessCount
            }).ToListAsync();

            toReturn.MatchingLinksCount = await links.CountAsync();

            toReturn.TotalAccessCount = await links.SumAsync(l => l.AccessCount);

            toReturn.TotalSubmissionCount = await links.SumAsync(l => l.SubmissionCount);

            return(toReturn);
        }
예제 #4
0
        public static async Task <LinkStatsDTO> GetLinkStats(LinkmirDbContext context, string shortlink)
        {
            var link = await context.Links.FindAsync(shortlink);

            if (link != null)
            {
                link.AccessCount++;

                await context.SaveChangesAsync();
            }

            var toReturn = new LinkStatsDTO
            {
                Link            = link.Link,
                ShortLink       = link.ShortLink,
                Domain          = link.Domain,
                Subdomain       = link.Subdomain,
                SubmissionCount = link.SubmissionCount,
                AccessCount     = link.AccessCount
            };

            return(toReturn);
        }
예제 #5
0
파일: Startup.cs 프로젝트: rhkean/linkmir
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, LinkmirDbContext context)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();

                AddTestData(context);
            }

            // app.UseDefaultFiles();
            // app.UseStaticFiles();

            // app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
예제 #6
0
 public LinkmirLinksController(LinkmirDbContext context)
 {
     _context = context;
 }