コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }