public IActionResult Post([FromBody] ACState state) //manually on/off ACDevice { try { try { _acStateControlService.SetCurrentState(state); } catch (CurrentACDeviceNotSetException ex) { _logger.LogError(ex, "400: Bad request"); return(BadRequest("Current ACDevice not set")); } catch (ArgumentException ex) { _logger.LogError(ex, "400: Bad request"); return(BadRequest(ex.Message)); } return(Ok()); } catch (Exception ex) { _logger.LogError(ex, "500: Internal Server Error"); return(StatusCode(StatusCodes.Status500InternalServerError)); } }
private void ChangeACSettings(object arg) { switch (arg) { case IACSetting setting: _acStateControlService.ChangeACSetting(setting); return; case true: _acStateControlService.SetCurrentState(_turnOffState); return; case Tuple <IACSchedule, bool> tuple: //ScheduleType.DayOfWeek var schedule = tuple.Item1; var isTurnOff = tuple.Item2; if (!schedule.ScheduleType.Equals(ScheduleType.EveryDayOfWeek)) { throw new ArgumentException("ScheduleType should be EveryDayOfWeek"); } var startTimeDayOfWeek = schedule.StartTime.DayOfWeek; var endTimeDayOfWeek = schedule.EndTime.DayOfWeek; if (isTurnOff) { if (endTimeDayOfWeek.Equals(DateTime.Now.DayOfWeek)) { _acStateControlService.SetCurrentState(_turnOffState); } return; } if (startTimeDayOfWeek.Equals(DateTime.Now.DayOfWeek)) { var acSetting = _currentAcDevice.AvailableSettings.Single(x => x.UniqueId.Equals(schedule.ACSettingGuid)); _acStateControlService.ChangeACSetting(acSetting); } break; default: throw new ArgumentException("ChangeACSettings: argument is not of IACSetting type"); } }