diff --git a/server/SHServ/Controllers/DevicesRESTAPIController.php b/server/SHServ/Controllers/DevicesRESTAPIController.php index 1ad5d05..75c4f3d 100644 --- a/server/SHServ/Controllers/DevicesRESTAPIController.php +++ b/server/SHServ/Controllers/DevicesRESTAPIController.php @@ -37,16 +37,35 @@ $devices_model = new Devices(); $result = $devices_model -> remove_device(intval($device_id)); + if(!$result["result"]) { + return $this -> utils() -> response_error( + $result["err_alias"], + [], + [ "device_msg" => $result["device_msg"] ] + ); + } + return $this -> utils() -> response_success([ - "result" => $result + "result" => $result["result"] ? true : false, + "device_msg" => $result["device_msg"] ]); } - public function reset_device() { + public function reboot_device($device_id) { + $devices_model = new Devices(); + $result = $devices_model -> reboot_device(intval($device_id)); - } + if(!$result["result"]) { + return $this -> utils() -> response_error( + $result["err_alias"], + [], + [ "device_msg" => $result["device_msg"] ] + ); + } - public function reboot_device() { - + return $this -> utils() -> response_success([ + "result" => $result["result"] ? true : false, + "device_msg" => $result["device_msg"] + ]); } } \ No newline at end of file diff --git a/server/SHServ/Models/Devices.php b/server/SHServ/Models/Devices.php index 40beba9..8877853 100644 --- a/server/SHServ/Models/Devices.php +++ b/server/SHServ/Models/Devices.php @@ -8,17 +8,17 @@ use \SHServ\Entities\DeviceAuth; class Devices extends \SHServ\Middleware\Model { - public function connect_new_device(String $device_ip, String $alias = "", String $name = "") { + public function connect_new_device(String $device_ip, String $alias = "", String $name = ""): Device | null { // validate device $device_api = new Base($device_ip); $device_info = $device_api -> get_about(); if(!$device_info["data"]) { - return false; + return null; } if($device_info["data"]["status"] != "setup") { - return false; + return null; } // create in table devices @@ -42,7 +42,7 @@ $device = $device_id ? new Device($device_id) : null; if(!$device) { - return false; + return null; } // generate token @@ -60,7 +60,7 @@ ]); if(!$device_auth) { - return false; + return null; } $device -> set_device_token($device_token); @@ -68,39 +68,53 @@ return $device; } - public function remove_device(int $device_id): bool { - // create device entity - - $result = app() -> thin_builder -> select( - Device::$table_name, - Device::get_fields(), - [ ["id", "=", $device_id] ] - ); + public function remove_device(int $device_id): Array { + $device = $this -> by_id($device_id); - if(!$result) { - return false; + if(!$device) { + return [ + "result" => false, + "err_alias" => "device_not_found" + ]; } - - $device = new Device($result[0]["id"], $result[0]); - - // reset device - - if(!$device -> device_api() -> reset()) { - return false; - } - - // state killed in device_auth table $device_auth = $device -> auth(); if(!$device_auth) { - return false; + return [ + "result" => false, + "err_alias" => "device_not_found" + ]; } - $device_auth -> kill(); + $response = $device -> device_api() -> reset(); + if($response["http_code"] != 200) { + return [ + "result" => false, + "err_alias" => "device_request_fail" + ]; + } - // remove from devices - - return $device -> remove() ? true : false; + if($response["data"]["status"] == "ok") { + // state killed in device_auth table + $device_auth -> kill(); + + // remove from devices + $device -> remove(); + + return [ + "result" => true, + "device_msg" => $response["data"]["message"] ?? "" + ]; + } + + $err_type = $response["data"]["error"] ?? "undefined_error"; + $err_msg = $response["data"]["message"] ?? "Unknown error"; + + return [ + "result" => false, + "err_alias" => "device_request_fail", + "device_msg" => "{$err_type}. {$err_msg}" + ]; } public function get_device_list(): Array { @@ -177,4 +191,57 @@ return new Device($results[0]["id"], $results[0]); } + + public function by_id(int $device_id): Device | null { + $results = app() -> thin_builder -> select( + Device::$table_name, + Device::get_fields(), + [ + [ "id", "=", $device_id ], + "AND", + [ "state", "=", "active" ] + ] + ); + + if(!$results) { + return null; + } + + return new Device($results[0]["id"], $results[0]); + } + + public function reboot_device(int $device_id): Array { + $device = $this -> by_id($device_id); + + if(!$device) { + return [ + "result" => false, + "err_alias" => "device_not_found" + ]; + } + + $response = $device -> device_api() -> reboot(); + if($response["http_code"] != 200) { + return [ + "result" => false, + "err_alias" => "device_request_fail" + ]; + } + + if($response["data"]["status"] == "ok") { + return [ + "result" => true, + "msg" => $response["data"]["message"] ?? "" + ]; + } + + $err_type = $response["data"]["error"] ?? "undefined_error"; + $err_msg = $response["data"]["message"] ?? "Unknown error"; + + return [ + "result" => false, + "err_alias" => "device_request_fail", + "msg" => "{$err_type}. {$err_msg}" + ]; + } } \ No newline at end of file diff --git a/server/SHServ/Routes/RESTAPI_v1.php b/server/SHServ/Routes/RESTAPI_v1.php index 7129541..b362bdb 100644 --- a/server/SHServ/Routes/RESTAPI_v1.php +++ b/server/SHServ/Routes/RESTAPI_v1.php @@ -6,16 +6,25 @@ protected function restapi_uri_routes() { $this -> router -> uri("/api/v1/devices/scanning/setup", "{$this -> cn}\\DevicesRESTAPIController@scanning__ready_to_setup"); $this -> router -> uri("/api/v1/devices/scanning/all", "{$this -> cn}\\DevicesRESTAPIController@scanning__all"); - $this -> router -> uri('/api/v1/devices/remove/$device_id', "{$this -> cn}\\DevicesRESTAPIController@remove_device"); } protected function restapi_get_routes() { - + $this -> router -> get( + [ "device_id" ], + "{$this -> cn}\\DevicesRESTAPIController@remove_device", + '/api/v1/devices/remove' + ); + + $this -> router -> get( + [ "device_id" ], + "{$this -> cn}\\DevicesRESTAPIController@reboot_device", + '/api/v1/devices/reboot' + ); } protected function restapi_post_routes() { $this -> router -> post( - [ "event_name", "device_id", "data"], + [ "device_ip", "alias", "description"], "{$this -> cn}\\DevicesRESTAPIController@setup_new_device", "/api/v1/devices/setup/new-device" ); diff --git a/server/SHServ/text-msgs.php b/server/SHServ/text-msgs.php index cae295a..39413a3 100644 --- a/server/SHServ/text-msgs.php +++ b/server/SHServ/text-msgs.php @@ -18,47 +18,25 @@ "already_logged" => "Вы уже в системе", "error_of_img_upload" => "Ошибка загрузки изображения", "title_too_short" => "Слишком короткое название", - "price_not_specified" => "Укажите цену", - "location_not_specified" => "Укажите местоположение, не обязательно точное", "disagree_with_rules" => "Если Вы не согласны с правилами публикации, Вы не можете добавить объявление", "empty_first_name" => "Укажите Ваше имя, это обязательно", "empty_second_name" => "Укажите Вашу имя, это обязательно", "empty_patronymic" => "Укажите Ваше отчество", "empty_phone_number" => "Укажите контактный номер телефона", "unlogged_user" => "Сначала нужно войти", - "fail_creating_uadpost" => "Ошибка создания объявления", - "textfield_too_large" => "Превышен лимит количества символов", - "fail_publishing_uadpost" => "Ошибка публикации объявления", - "uadpost_not_exist" => "Такое объявление не существует", "server_not_available" => "Сервер не доступен", - "uadpost_no_available" => "Объявление больше не доступно", - "price_was_changed" => "Цена была изменена", - "fail_creating_order" => "Не удалось создать запрос покупки", - "fail_access_to_order" => "Не удалось получить доступ к заказу", - "selected_state_not_exists" => "Выбраного состояния не существует", - "uncorrect_delivery_method" => "Укажите метод доставки", - "np_fail_of_department_number" => "Укажите номер отделения или поштомата", - "np_fail_of_selected_city" => "Выберите населённый пункт", // SHServ Errs + "device_not_found" => "", "unknown_device" => "", "error_of_device_auth" => "", + "device_request_fail" => "", // Other "accept_removing" => "Подтвердите удаление", "remove" => "Удалить", "cancel" => "Отмена", - "deactivate_selected_uadpost" => "Деактивировать выбранное объявление?", - "deactivate" => "Деактивировать", - "publishing_selected_uadpost" => "Опубликовать выбранное объявление?", - "publishing" => "Опубликовать", - "terms_of_use_not_selected" => "Пользовательское соглашение не выбрано", "success_and_redirecting" => "Успешно! Перенаправление...", "accept" => "Принять", "confirm" => "Подтвердить", - "confirmed" => "Успешно подтверждено", - "canceled" => "Успешно отменено", - "cancel_order" => "Отменить заказ", - "completed" => "Успешно завершено", - "complete_order" => "Заказ выполнен", ]; \ No newline at end of file