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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 4
0
        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());
        }