public void IncrementView(string itemKey)
        {
            lock (Mutex) // NOTE: This synchronization is not enough since there may be several instances of roles.
            {
                var result = GetOrCreateAnalyticInfo(itemKey);


                if (result.last_viewed.Date == DateTime.Today)
                {
                    result.last_viewed  = DateTime.Now;
                    result.views_today += 1;
                    result.views_total += 1;
                }
                else
                {
                    result.last_viewed   = DateTime.Now;
                    result.views_average = result.views_total * result.views_average / (result.views_total - result.views_today + result.views_average);
                    result.views_total  += 1;
                    result.views_today   = 1;
                }

                AnalyticInfoStorage.Update(_context.BaseUri.OriginalString, result);

                //_context.UpdateObject(result);
                //_context.SaveChanges();
            }
        }
        public void IncrementVote(string itemKey, int vote)
        {
            lock (Mutex) // NOTE: This synchronization is not enough since there may be several instances of roles.
            {
                var result = GetOrCreateAnalyticInfo(itemKey);

                if (vote < 0)
                {
                    result.NegativeVotes += -vote;
                }
                else
                {
                    result.PositiveVotes += vote;
                }

                AnalyticInfoStorage.Update(_context.BaseUri.OriginalString, result);
                //_context.UpdateObject(result);
                //_context.SaveChanges();
            }
        }
        private AnalyticInfo GetOrCreateAnalyticInfo(string itemKey)
        {
            AnalyticInfo dataset = AnalyticInfoStorage.GetAnalyticInfo(_context.BaseUri.OriginalString, itemKey);

            if (dataset != null)
            {
                return(dataset);
            }

            var initialViewCount = new Random().Next(3, 12); // This is to attract users.

            dataset = new AnalyticInfo(itemKey)
            {
                last_viewed   = DateTime.Now,
                views_today   = initialViewCount,
                views_total   = initialViewCount,
                views_average = initialViewCount,
                NegativeVotes = 0,
                PositiveVotes = 0,
            };

            AnalyticInfoStorage.AddAnalyticInfo(_context.BaseUri.OriginalString, itemKey);
            return(dataset);
        }
 public void RegisterDownload(string itemKey)
 {
     AnalyticInfoStorage.AddDownloadAnalytic(_context.BaseUri.OriginalString, itemKey);
 }