public async Task UpdateUrlUsers(URLContext urlContext, HttpRequest request, URL url) { string userIpAddress = request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString(); User retrievedUser; //Get user object for this url and this IP address - if it doesn't exist, create it try { retrievedUser = urlContext.UrlUsersSet.Where(x => x.UrlId == url.Id).Select(x => x.User).Where(x => x.IpAddress == request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString()).Single(); } catch (InvalidOperationException) { User newUser = CreateUser(urlContext, userIpAddress, url, false); await urlContext.SaveChangesAsync(); return; } //If retrieved user exists Update it retrievedUser.LastUsedTime = DateTime.Now; retrievedUser.UseCount += 1; await urlContext.SaveChangesAsync(); }
private async Task <URL> AddURLToDatabase(string shortUrlId, string normalizedLongUrl) { var newUrl = new URL { Created = DateTime.Now, Identifier = shortUrlId, LongURL = normalizedLongUrl, ShortURL = $"shortify.link/{shortUrlId}" }; await Context.AddAsync(newUrl); await Context.SaveChangesAsync(); return(newUrl); }
public async Task AddCounter(string linkCode) { var entity = await _context.UrlVisitorsCounters.Where(l => l.LinkCode == linkCode).FirstOrDefaultAsync(); entity.CountUp(); _context.Update(entity); await _context.SaveChangesAsync(); }
public async Task RemoveURL(URLContext urlContext, string shortenedID) { URL removeURL = urlContext.UrlSet.Single(x => x.ShortenedIdentifier == shortenedID); List <int> removeUserIds = urlContext.UrlUsersSet.Where(x => x.UrlId == removeURL.Id).Select(x => x.UserId).ToList(); urlContext.UrlSet.Remove(removeURL); await urlContext.SaveChangesAsync(); await RemoveUrlUsers(urlContext, removeUserIds); //Remove every user associated with the URL }
private async Task RemoveUrlUsers(URLContext urlContext, List <int> removeUserIds) { List <User> removeUsers = new List <User>(); foreach (var i in removeUserIds) { User currentUser = urlContext.UserSet.Single(x => x.Id == i); urlContext.UserSet.Remove(currentUser); } await urlContext.SaveChangesAsync(); }
private User CreateUser(URLContext urlContext, string ipAddress, URL parentUrl, bool isAdmin) { User returnUser = new User() { IpAddress = ipAddress, DateInitialised = DateTime.Now, LastUsedTime = DateTime.Now, UseCount = 1, HasAdminPrivileges = isAdmin, CountryCode = GetCountryCode(ipAddress) }; urlContext.UserSet.AddAsync(returnUser); urlContext.SaveChangesAsync(); urlContext.UrlUsersSet.AddAsync(new UrlUsers() { UrlId = parentUrl.Id, User = returnUser }); urlContext.SaveChangesAsync(); return(returnUser); }
private async Task AppendUrlToDB(URLContext urlContext, URL urlToAdd, HttpRequest request) //Called from AddUrl method { urlToAdd.ShortenedIdentifier = GenerateUrlID(urlContext, urlToAdd); Console.WriteLine($"Adding ID: {urlToAdd.ShortenedIdentifier} for website: {urlToAdd.BaseURL} for User (IP): {urlToAdd.ExternalIP} at {DateTime.Now}"); await urlContext.UrlSet.AddAsync(urlToAdd); await urlContext.SaveChangesAsync(); if (request != null) { CreateUser(urlContext, request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString(), urlToAdd, true); } }
public string[] Create(string linkUrl) { string[] url; Regex regex; string pattern2 = @"(http:\/\/|https:\/\/)"; regex = new Regex(pattern2); if (!regex.IsMatch(linkUrl)) { linkUrl = "http://" + linkUrl + "/"; } string pattern = @"(http:\/\/|https:\/\/|www.|\b).{2,}\.\w{2,}(\/|\b)"; regex = new Regex(pattern); if (regex.IsMatch(linkUrl)) { if (FindLongURL(linkUrl) == null) { Link link = new Link(); link.LongUrl = linkUrl; link.ShortUrl = GetShortURL(); link.DateCreate = DateTime.Now; link.NumberOfTransitions = 0; _context.Add(link); _context.SaveChangesAsync(); url = new string[2] { "https://" + HttpContext.Request.Host + "/" + link.ShortUrl, "true" }; return(url); } else { string shortLink; shortLink = _context.Link.Where(o => o.LongUrl == linkUrl).Select(p => p.ShortUrl).First(); url = new string[2] { "https://" + HttpContext.Request.Host + "/" + shortLink, "false" }; return(url); } } else { url = new string[2] { "Неправильный формат ссылки", "false" }; return(url); } }
public async Task <Url> AddUrl(string link) { var exitEntity = await GetUrl(link); BuildEntity(link, exitEntity, out Url entity); _context.Add(entity); if (!CheckIsExistsInUrlVisitorsCounters(entity.LinkCode)) { var urlVisitorsCounter = new UrlVisitorsCounter(entity.LinkCode); _context.Add(urlVisitorsCounter); } await _context.SaveChangesAsync(); return(entity); }