// GET api/nextsession
        public Session Get()
        {
            var retryStrategy = new Incremental(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
            var retryPolicy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(retryStrategy);
            
            Session nextSession = new Session();
            using (VidPackEntities db = new VidPackEntities())
            {
                retryPolicy.ExecuteAction(() =>
                {
                    db.Database.Connection.Open();
                });

                ExistingSession dbSession = retryPolicy.ExecuteAction<ExistingSession>(() =>
                    db.ExistingSession.Where(item => item.IsNextSession == 1).FirstOrDefault()
                );

                if (dbSession != null)
                    nextSession = new VidPackModel.Session()
                    {
                        SessionDate = dbSession.SessionDate.ToString(),
                        SessionDescription = dbSession.SessionDescription,
                        SessionSubTitle = dbSession.SessionSubTitle,
                        SessionThumbnailUrl = String.Format("{0}{1}", ThumbnailStorageUrl, dbSession.SessionThumbnailUri),
                        SessionTitle = dbSession.SessionSubTitle,
                        SessionVideoUrl = dbSession.SessionVideoUri == null ? "" : dbSession.SessionVideoUri,
                        Speaker = dbSession.Speaker
                    };
            }
            return nextSession; 
        }
        // GET api/notification
        public IEnumerable<NotificationInfo> Get()
        {

            var retryStrategy = new Incremental(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
            var retryPolicy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(retryStrategy);

            List<NotificationInfo> notifications = new List<NotificationInfo>(); 
            using (VidPackEntities db = new VidPackEntities())
            {

                retryPolicy.ExecuteAction(() =>
                {
                    db.Database.Connection.Open();
                });

                notifications = retryPolicy.ExecuteAction<List<NotificationInfo>>(() =>
                        db.Notification.Select(item => new NotificationInfo() { 
                        NotificationTag = item.NotificationTag,
                    }).ToList<NotificationInfo>()
                ); 
            }
            return notifications; 
        }
        // GET api/session
        public IEnumerable<Session> Get(ODataQueryOptions<Session> queryOptions)
        {

            var retryStrategy = new Incremental(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
            var retryPolicy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(retryStrategy);

            List<Session> session = new List<Session>();
            try
            {
                using (VidPackEntities db = new VidPackEntities())
                {
                    retryPolicy.ExecuteAction(() =>
                    {
                        db.Database.Connection.Open();
                    });


                    var listSession = retryPolicy.ExecuteAction(() =>
                        db.ExistingSession.Include("DownloadItem").Select(item => new
                        {
                            SessionDate = item.SessionDate,
                            SessionDescription = item.SessionDescription,
                            SessionSubTitle = item.SessionSubTitle,
                            SessionThumbnailUrl = item.SessionThumbnailUri,
                            SessionTitle = item.SessionSubTitle,
                            SessionVideoUrl = item.SessionVideoUri == null ? "" : item.SessionVideoUri,
                            Speaker = item.Speaker,
                            isActual = item.IsActualSession,
                            DownloadItem = item.DownloadItem.Select(_ => new
                            {
                                Caption = _.Caption,
                                Description = _.Description,
                                Url = _.Url,
                            })
                        }).ToList()
                    );

                    //ToString() / String.Format() is not know within projection
                    session = listSession.Select(item => new Session() {
                        SessionDate = Convert.ToString(item.SessionDate),
                        SessionDescription = item.SessionDescription,
                        SessionSubTitle = item.SessionSubTitle,
                        SessionThumbnailUrl = String.Format("{0}{1}", ThumbnailStorageUrl, item.SessionThumbnailUrl),
                        SessionTitle = item.SessionSubTitle,
                        SessionVideoUrl = item.SessionVideoUrl,
                        Speaker = item.Speaker,
                        SessionDownloadItem = item.DownloadItem.Select(_ => new DownloadItemInfo() {
                            Caption = _.Caption,
                            Description = _.Description,
                            Url = _.Url,
                        }).ToList<DownloadItemInfo>(),
                    }).ToList<Session>();

                    return session;
                }
            }
            catch (Exception ex)
            {
                //TODO: Implement Error Handling
                return new List<Session>();
            }
        }