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); }
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(); }
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); }
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); }
// 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(); }); }
public LinkmirLinksController(LinkmirDbContext context) { _context = context; }