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