public HttpResponseMessage ReportUsage(Usage data)
        {
            if (data == null)
            {
                throw new HttpResponseException(new HttpResponseMessage
                {
                    StatusCode = HttpStatusCode.BadRequest,
                    Content = new StringContent("No usage data provided")
                });
            }

            try
            {
                data.IPAddress = RequestHelpers.GetClientIpAddress(Request);
                _context.AddUsage(data);
            }
            catch (Exception e)
            {
                throw new HttpResponseException(new HttpResponseMessage
                {
                    StatusCode = HttpStatusCode.InternalServerError,
                    Content = new StringContent(e.Message)
                });
            }

            return new HttpResponseMessage(HttpStatusCode.OK);
        }
 public void AddUsage(Usage data)
 {
     if (Usages.Any(x => x.Alias == data.Alias))
     {
         var record = Usages.Where(x => x.Alias == data.Alias).OrderByDescending(x => x.TickTime).First();
         var lastTickTime = record == null ? DateTime.MinValue : record.TickTime;
         var currentTickTime = DateTime.Now;
         var diff = currentTickTime.Subtract(lastTickTime);
         if (!(diff.TotalMinutes >= 60)) return;
         Usages.Add(data);
     }
     else
     {
         Usages.Add(data);
     }
     SaveChanges();
 }