public Task <EventCalendarInfo> GetEventCalendarDetail(int eventID, int userID)
 {
     return(Task.Run(() =>
     {
         using (MIUEntities db = new MIUEntities())
         {
             List <EventCalendarPhoto> dataList = db.EventCalendarPhotoes.Where(a => a.EventID == eventID).ToList();
             List <EventCalendarPhotoInfo> infoList = new List <EventCalendarPhotoInfo>();
             foreach (var data in dataList)
             {
                 EventCalendarPhotoInfo info = new EventCalendarPhotoInfo();
                 PropertyCopier <EventCalendarPhoto, EventCalendarPhotoInfo> .Copy(data, info);
                 info.PhotoName = MIUFileServer.GetFileUrl("EventCalendar/Photo", info.PhotoName);
                 infoList.Add(info);
             }
             string loginName = db.Users.Where(a => a.ID == userID).Select(a => a.LoginName).SingleOrDefault();
             EventCalendar eventData = db.EventCalendars.Where(a => a.ID == eventID).SingleOrDefault();
             EventCalendarInfo eventInfo = new EventCalendarInfo();
             PropertyCopier <EventCalendar, EventCalendarInfo> .Copy(eventData, eventInfo);
             eventInfo.IsFavorite = db.FavoriteLists.Any(a => a.FavoriteID == eventData.ID && a.UserID == userID && a.FavoriteType == "EventCalendar");
             eventInfo.IsGoing = db.EventCalendarReacts.Any(a => a.EventID == eventData.ID && a.LoginName == loginName && a.Action == "Going" && a.Flag == true);
             eventInfo.IsInterested = db.EventCalendarReacts.Any(a => a.EventID == eventData.ID && a.LoginName == loginName && a.Action == "Interested" && a.Flag == true);
             eventInfo.TotalGoing = db.EventCalendarReacts.Where(a => a.EventID == eventData.ID && a.Action == "Going" && a.Flag == true).Count();
             eventInfo.TotalInterested = db.EventCalendarReacts.Where(a => a.EventID == eventData.ID && a.Action == "Interested" && a.Flag == true).Count();
             eventInfo.CoverPhotoPath = MIUFileServer.GetFileUrl("EventCalendar/Photo", infoList.Where(a => a.IsCover == true).Select(a => a.PhotoName).SingleOrDefault());
             eventInfo.photoList = infoList;
             return eventInfo;
         }
     }));
 }
        public async Task <HttpResponseMessage> GetEventCalendarDetail(int eventID, int userId)
        {
            try
            {
                EventCalendarDAL  dal  = new EventCalendarDAL();
                EventCalendarInfo data = await dal.GetEventCalendarDetail(eventID, userId);

                if (data != null)
                {
                    return(Request.CreateResponse <EventCalendarInfo>(HttpStatusCode.OK, data));
                }
                else
                {
                    return(Request.CreateErrorResponse(HttpStatusCode.NotFound, Constants.ErrorNotFound));
                }
            }
            catch (DbEntityValidationException ex)
            {
                var    controllerName = ControllerContext.RouteData.Values["controller"].ToString();
                var    actionName     = ControllerContext.RouteData.Values["action"].ToString();
                Logger log            = new Logger();
                log.ErrorLog(ex, controllerName, actionName);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, Constants.ErrorSysError));
            }
        }
        public Task <List <EventCalendarInfo> > GetAllEventCalendar(int userID, string role)
        {
            return(Task.Run(() =>
            {
                using (MIUEntities db = new MIUEntities())
                {
                    string loginName = db.Users.Where(a => a.ID == userID).Select(a => a.LoginName).SingleOrDefault();
                    List <EventCalendarInfo> infoList = new List <EventCalendarInfo>();
                    List <EventCalendar> dataList = db.EventCalendars.Where(x => x.EventVisibility.Contains("Public") || x.EventVisibility.Contains(role)).OrderByDescending(a => a.UpdatedDate != null ? a.UpdatedDate : a.CreatedDate).ToList();
                    foreach (var data in dataList)
                    {
                        EventCalendarInfo info = new EventCalendarInfo();
                        PropertyCopier <EventCalendar, EventCalendarInfo> .Copy(data, info);
                        string photoName = db.EventCalendarPhotoes.Where(a => a.EventID == data.ID && a.IsCover == true).Select(a => a.PhotoName).SingleOrDefault();
                        info.IsFavorite = db.FavoriteLists.Any(a => a.FavoriteID == data.ID && a.UserID == userID && a.FavoriteType == "EventCalendar");
                        info.IsGoing = db.EventCalendarReacts.Any(a => a.EventID == data.ID && a.LoginName == loginName && a.Action == "Going" && a.Flag == true);
                        info.IsInterested = db.EventCalendarReacts.Any(a => a.EventID == data.ID && a.LoginName == loginName && a.Action == "Interested" && a.Flag == true);
                        info.TotalGoing = db.EventCalendarReacts.Where(a => a.EventID == data.ID && a.Action == "Going" && a.Flag == true).Count();
                        info.TotalInterested = db.EventCalendarReacts.Where(a => a.EventID == data.ID && a.Action == "Interested" && a.Flag == true).Count();
                        if (!string.IsNullOrEmpty(photoName))
                        {
                            info.CoverPhotoPath = MIUFileServer.GetFileUrl("EventCalendar/Photo", photoName);
                        }

                        infoList.Add(info);
                    }
                    return infoList;
                }
            }));
        }