Beispiel #1
0
        public async Task <IActionResult> Authenticate()
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                var service = new CalendarService(BaseClientServiceCreator.Create(context, clientInfo, dataStore));
                // Define parameters of request.
                var request = service.CalendarList.List();
                var result  = await request.ExecuteAsync();

                var calendars = context.FtmCalendarInfo.ToArray();
                if (!calendars.Any())
                {
                    if (result.Items.Any())
                    {
                        await Save(result.Items);
                    }
                }
                else
                {
                    var calendarDb = calendars.Select(x => x.CalendarId);
                    if (calendars.Length != result.Items.Count &&
                        result.Items.Any(x => !calendarDb.Contains(x.Id)))
                    {
                        //Remove all room
                        context.FtmCalendarInfo.RemoveRange(calendars);

                        await Save(result.Items);
                    }
                }

                transaction.Commit();
            }
            return(View());
        }
Beispiel #2
0
        public async Task <IActionResult> GetDuplicateEvents()
        {
            try
            {
                var startTimeInDayConfig = configuration["Settings:StartTimeInDay"];
                var endTimeInDayConfig   = configuration["Settings:EndTimeInDay"];
                startTimeInDay = TimeSpan.TryParse(startTimeInDayConfig, out startTimeInDay) ? startTimeInDay : new TimeSpan(7, 0, 0);
                endTimeInDay   = TimeSpan.TryParse(endTimeInDayConfig, out endTimeInDay) ? endTimeInDay : new TimeSpan(20, 0, 0);
                var service         = new CalendarService(BaseClientServiceCreator.Create(context, clientInfo, dataStore));
                var results         = new List <EventErrorResult>();
                var usableCalendars = context.FtmCalendarInfo.Where(x => x.IsUseable).ToArray();
                var timeMin         = DateTime.Now;
                var timeMax         = int.TryParse(configuration["CheckDuplicateInDay"], out int day) ? DateTime.Now.AddDays(day) : DateTime.Now.AddDays(30);

                foreach (var calendar in usableCalendars)
                {
                    EventsResource.ListRequest request = service.Events.List(calendar.CalendarId);
                    request.TimeMin      = timeMin;
                    request.TimeMax      = timeMax;
                    request.ShowDeleted  = false;
                    request.SingleEvents = true;
                    request.MaxResults   = 999;
                    request.OrderBy      = EventsResource.ListRequest.OrderByEnum.StartTime;
                    Events events = await request.ExecuteAsync();

                    if (!events.Items.Any())
                    {
                        continue;
                    }
                    var itemDic = events.Items.GroupBy(x => x.Start.DateTime.Value.Date, x => x).ToDictionary(x => x.Key, x => x.ToList());

                    foreach (var key in itemDic.Keys)
                    {
                        var listEventByDay = itemDic[key];

                        for (var index = 0; index < listEventByDay.Count(); index++)
                        {
                            if (CheckViolateEvent(index, listEventByDay, out Event error))
                            {
                                results.Add(error.CreateErrorResult());
                            }
                        }
                    }
                }

                return(Ok(results));
            }
            catch (Exception ex)
            {
                return(NotFound(ex.Message));
            }
        }
Beispiel #3
0
        public async Task <IActionResult> Get([FromBody] GetEventRequestModel requestModel)
        {
            DateTime.TryParse(requestModel.StartDateTime, out DateTime startDateTime);
            DateTime.TryParse(requestModel.EndDateTime, out DateTime endDateTime);

            if (requestModel.StartDateTime == null || requestModel.EndDateTime == null)
            {
                return(BadRequest("Ngày bắt đầu và ngày kết thúc không được để trống!!!"));
            }
            if (startDateTime > endDateTime)
            {
                return(BadRequest("Ngày bắt đầu đang bé hơn ngày kết thúc này!!!"));
            }
            if (!requestModel.CalendarIds.Any())
            {
                return(BadRequest("Phòng book cần ít nhất là 1 phòng!!!"));
            }

            if (startDateTime == endDateTime)
            {
                endDateTime = endDateTime.CreateTime(new TimeSpan(23, 59, 59));
            }

            try
            {
                var service = new CalendarService(BaseClientServiceCreator.Create(context, clientInfo, dataStore));
                var result  = new List <GetEventResultModel>();

                var usableCalendars = context.FtmCalendarInfo.Where(x => x.IsUseable && requestModel.CalendarIds.Contains(x.CalendarId)).ToArray();
                var resultItems     = await GetFreeTimes(service, usableCalendars, startDateTime, endDateTime, requestModel.Time);

                result.AddRange(resultItems);

                return(Ok(result));
            }
            catch
            {
                return(BadRequest("Chả biết lỗi gì nữa!!!"));
            }
        }