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()); }
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)); } }
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!!!")); } }