public IActionResult Show(int?id) { if (!IsUser()) { return(Forbid()); } if (!id.HasValue) { return(NotFound()); } var url = service.GetById(id.Value); if (url == null) { return(NotFound()); } string hostName = _hostName ?? Request.Host.ToString(); string path = AlphaNumberId.ToAlphaNumberId(url.Id); string shortUrlPath = $"https://{hostName}/{path}"; //ViewData["HostName"] = hostName; //ViewData["Path"] = path; var activity = database .ShortUrlActivity .Where(a => a.ShortUrlId == url.Id) .OrderBy(a => a.TimeStamp); int hitCount = activity.Count(); var lastHit = hitCount > 0 ? activity.Max(h => h.TimeStamp) : (DateTime?)null; var model = new ShortUrlShow { Id = url.Id, HostName = hostName, Path = url.Path, OriginalUrl = url.OriginalUrl, ShortUrl = shortUrlPath, HitCount = hitCount, LastHit = lastHit, Subject = url.Subject, LetterLink = url.LetterLink, Note = url.Note }; return(View(model)); }
public ShortUrl GetByPath(string alpha) { int id = AlphaNumberId.ToIntegerId(alpha); var activity = new ShortUrlActivity { ShortUrlId = id, TimeStamp = DateTime.Now }; context.ShortUrlActivity.Add(activity); context.SaveChanges(); return(context.ShortUrls.Find(id)); }
public List <QRCodeHit> QRCodeHitsForUser(string userName) { var urls = context .ShortUrls .Where(url => string.Equals( url.UserName, userName, StringComparison.OrdinalIgnoreCase)) .ToList(); var hits = new List <QRCodeHit>(); foreach (var url in urls) { var activity = context .ShortUrlActivity .Where(a => a.ShortUrlId == url.Id) .OrderBy(a => a.TimeStamp); string lastIPAddress = activity.LastOrDefault()?.IPAddress; DateTime?lastHit = null; if (activity.Count() > 0) { lastHit = activity.Max(a => a.TimeStamp); } hits.Add( new QRCodeHit { Id = url.Id, ShortUrl = AlphaNumberId.ToAlphaNumberId(url.Id), OriginalUrl = url.OriginalUrl, Created = url.Created, HitCount = context.ShortUrlActivity.Count(a => a.ShortUrlId == url.Id), LastIPAddress = lastIPAddress, LastTimeStamp = lastHit, UserName = url.UserName, Subject = url.Subject, Note = url.Note }); } return(hits); }
public ShortUrl GetByPath(string path, string ip, string host) { int id = AlphaNumberId.ToIntegerId(path); var activity = new ShortUrlActivity { ShortUrlId = id, TimeStamp = DateTime.Now, IPAddress = ip }; context.ShortUrlActivity.Add(activity); context.SaveChanges(); var urls = from u in context.ShortUrls join h in context.ShortUrlHosts on u.HostId equals h.Id where u.Id == id && string.Equals(h.Name, host, StringComparison.OrdinalIgnoreCase) select u; return(urls.FirstOrDefault()); }