diff --git a/server/SHServ/Controllers/AreasRESTAPIController.php b/server/SHServ/Controllers/AreasRESTAPIController.php index f19e9ba..0b9c167 100644 --- a/server/SHServ/Controllers/AreasRESTAPIController.php +++ b/server/SHServ/Controllers/AreasRESTAPIController.php @@ -5,7 +5,16 @@ use \SHServ\Models\Areas; use \SHServ\Entities\Area; +/** + * Контроллер реализующий REST API для работы с абстрактным описанием физических областей. + * Подчёркиваю, это Areas, а не Spaces. Реализована логика работы именно с физическим областями, а не абстрактным пространством. + */ class AreasRESTAPIController extends \SHServ\Middleware\Controller { + /** + * Получить список пространств в системе. Всех или у родительского пространства + * @param Int $area_id Area ID + * @return String JSON. Вернёт массив областей в поле `areas` и количество в поле `total` + */ public function areas_list($area_id = 0) { $areas_model = new Areas(); @@ -32,6 +41,13 @@ ]); } + /** + * Добавить новую физическую область + * @param String $type Произвольный тип области. Это может быть например комната, этаж, здание, или двор. Ограничений нет, но тип должен описывать именно физическую область. + * @param String $alias Псевдоним для обращения к области из кода. Обязательно должен быть уникальным. + * @param String $display_name Отображаемое название/имя области + * @return String JSON. Возвращает поля созданной `area` и `alias` или ошибку. + */ public function new_area($type, $alias, $display_name) { $areas_model = new Areas(); @@ -59,6 +75,11 @@ ]); } + /** + * Удалить область. При этом все помещённые в неё устройства и child области будут отвязаны + * @param Int $area_id Area ID + * @return String JSON. Вернёт ошибку или положительный результат + */ public function remove_area($area_id) { if($area_id != intval($area_id) or intval($area_id) <= 1) { return $this -> utils() -> response_error("invalid_id", ["area_id"]); @@ -77,6 +98,12 @@ return $this -> utils() -> response_success(); } + /** + * Поместить/вложить одну область в другую. Например комнату можна поместить в этаж, этаж в здание, а здание в глобальную область типа "дом/комплекс/т.п.". + * @param Int $target_area_id Area ID целевой области, которую хотим поместить + * @param Int $place_in_area_id Area ID родительской области в которую хотим поместить целевую область + * @return String JSON. Вернёт ошибку или положительный результат + */ public function place_in_area($target_area_id, $place_in_area_id) { if($target_area_id != intval($target_area_id) or intval($target_area_id) <= 1) { return $this -> utils() -> response_error("invalid_id", ["target_area_id"]); @@ -100,6 +127,12 @@ return $this -> utils() -> response_success(); } + /** + * Переименовать область + * @param Int $area_id Area ID области, которую переименовываем + * @param String $display_name Новое название/имя области + * @return String JSON. Возвращает поля `area` с данными об изменённой области и `alias`. + */ public function update_display_name($area_id, $display_name) { if($area_id != intval($area_id) or intval($area_id) <= 1) { return $this -> utils() -> response_error("invalid_id"); @@ -125,6 +158,13 @@ : $this -> utils() -> response_error("undefined_error"); } + /** + * Измениеть псевдоним для обращения к области из кода. + * ОСТОРОЖНО! если область уже учавствует в написанных скриптах, это сломает работу скриптов. + * @param Int $area_id Area ID + * @param String $new_alias Новый уникальный псевдоним области + * @return String JSON. Возвращает поля `area` с данными об изменённой области и `alias`. + */ public function update_alias($area_id, $new_alias) { if($area_id != intval($area_id) or intval($area_id) <= 1) { return $this -> utils() -> response_error("invalid_id", ["area_id"]); @@ -156,6 +196,12 @@ : $this -> utils() -> response_error("undefined_error"); } + /** + * Перезагрузить все устройства, что помещены в указанную область. + * @param Int $area_id Area ID области в которой нужно перезагрузить все устройства. + * @return String JSON. При положительном ответе вернётся `total` - количество устройств, что были перезагружены, + * и `results` - ассоциативный массив с ключами вида `area_alias:device_alias` и телом ответа от устройства в качестве значения. + */ public function reboot_devices($area_id = 0) { $area = new Area(intval($area_id)); @@ -176,6 +222,11 @@ ]); } + /** + * Получить список устройств, что помещены в указанную область. + * @param Int $area_id Area ID + * @return String JSON. Возвращает массив устройств в поле `devices` и количество устрйоств в поле `total` + */ public function devices_list($area_id) { if($area_id != intval($area_id) or intval($area_id) <= 1) { return $this -> utils() -> response_error("invalid_id", ["area_id"]); @@ -197,6 +248,11 @@ ]); } + /** + * Отвязать указанную область от области в которую она почещена. Устройства, что помещены в эту область в ней останутся. + * @param Int $area_id Area ID + * @return String JSON. Вернётся ошибка или положительный ответ. + */ public function unassign_from_area($area_id) { if($area_id != intval($area_id) or intval($area_id) <= 1) { return $this -> utils() -> response_error("invalid_id", ["area_id"]); @@ -213,6 +269,11 @@ : $this -> utils() -> response_error("undefined_error"); } + /** + * Получить список существующих в БД пользовательских типов областей. Это может быть полезно для выведения подсказок пользователю при добавлении новой области, + * чтоб помогать не плодить множества одинаковых по смыслу, но разных по названию, типов. + * @return String JSON Вернёт поле `types` с массивом типов + */ public function exists_types() { return $this -> utils() -> response_success([ "types" => (new Areas()) -> get_exists_types()