diff --git a/application/Espo/Resources/routes.json b/application/Espo/Resources/routes.json index 13d21abd15..259c9df504 100644 --- a/application/Espo/Resources/routes.json +++ b/application/Espo/Resources/routes.json @@ -255,10 +255,17 @@ { "route": "/Export", "method": "post", - "params": { - "controller": "Export", - "action": "process" - } + "actionClassName": "Espo\\Tools\\Export\\Api\\PostProcess" + }, + { + "route": "/Export/:id/status", + "method": "get", + "actionClassName": "Espo\\Tools\\Export\\Api\\GetStatus" + }, + { + "route": "/Export/:id/subscribe", + "method": "post", + "actionClassName": "Espo\\Tools\\Export\\Api\\PostSubscribe" }, { "route": "/Kanban/order", diff --git a/application/Espo/Tools/Export/Api/GetStatus.php b/application/Espo/Tools/Export/Api/GetStatus.php new file mode 100644 index 0000000000..dd0ecc25a9 --- /dev/null +++ b/application/Espo/Tools/Export/Api/GetStatus.php @@ -0,0 +1,59 @@ +getRouteParam('id'); + + if (!$id) { + throw new BadRequest(); + } + + $result = $this->service->getStatusData($id); + + return ResponseComposer::json($result); + } +} diff --git a/application/Espo/Controllers/Export.php b/application/Espo/Tools/Export/Api/PostProcess.php similarity index 79% rename from application/Espo/Controllers/Export.php rename to application/Espo/Tools/Export/Api/PostProcess.php index 763df2447c..cf0d83a1af 100644 --- a/application/Espo/Controllers/Export.php +++ b/application/Espo/Tools/Export/Api/PostProcess.php @@ -27,26 +27,26 @@ * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ -namespace Espo\Controllers; +namespace Espo\Tools\Export\Api; +use Espo\Core\Api\Action; use Espo\Core\Api\Request; use Espo\Core\Api\Response; +use Espo\Core\Api\ResponseComposer; use Espo\Core\Exceptions\BadRequest; - use Espo\Core\Utils\Json; - +use Espo\Tools\Export\Params; use Espo\Tools\Export\Service; use Espo\Tools\Export\ServiceParams; -use Espo\Tools\Export\Params; use stdClass; -class Export +class PostProcess implements Action { public function __construct(private Service $service) {} - public function postActionProcess(Request $request): stdClass + public function process(Request $request): Response { $params = $this->fetchRawParamsFromRequest($request); @@ -60,40 +60,19 @@ class Export assert($subResult !== null); - return (object) [ - 'id' => $subResult->getAttachmentId(), - ]; + return ResponseComposer::json([ + 'id' => $subResult->getAttachmentId() + ]); } - return (object) [ - 'exportId' => $result->getId(), - ]; - } - - public function getActionStatus(Request $request): stdClass - { - $id = $request->getQueryParam('id'); - - if (!$id) { - throw new BadRequest(); - } - - return $this->service->getStatusData($id); - } - - public function postActionSubscribeToNotificationOnSuccess(Request $request, Response $response): void - { - $id = $request->getParsedBody()->id ?? null; - - if (!$id || !is_string($id)) { - throw new BadRequest(); - } - - $this->service->subscribeToNotificationOnSuccess($id); - - $response->writeBody('true'); + return ResponseComposer::json([ + 'exportId' => $result->getId() + ]); } + /** + * @throws BadRequest + */ private function fetchRawParamsFromRequest(Request $request): Params { $data = $request->getParsedBody(); diff --git a/application/Espo/Tools/Export/Api/PostSubscribe.php b/application/Espo/Tools/Export/Api/PostSubscribe.php new file mode 100644 index 0000000000..5b3cccb58e --- /dev/null +++ b/application/Espo/Tools/Export/Api/PostSubscribe.php @@ -0,0 +1,59 @@ +getRouteParam('id'); + + if (!$id) { + throw new BadRequest(); + } + + $this->service->subscribeToNotificationOnSuccess($id); + + return ResponseComposer::json(true); + } +} diff --git a/client/src/views/export/modals/idle.js b/client/src/views/export/modals/idle.js index 9b68cfdf75..0320a548ce 100644 --- a/client/src/views/export/modals/idle.js +++ b/client/src/views/export/modals/idle.js @@ -113,9 +113,7 @@ define('views/export/modals/idle', ['views/modal', 'model'], function (Dep, Mode return; } - Espo.Ajax.postRequest('Export/action/subscribeToNotificationOnSuccess', { - id: this.id, - }); + Espo.Ajax.postRequest(`Export/${this.id}/subscribe`); }); this.checkStatus(); @@ -123,9 +121,7 @@ define('views/export/modals/idle', ['views/modal', 'model'], function (Dep, Mode checkStatus: function () { Espo.Ajax - .getRequest('Export/action/status', { - id: this.id, - }) + .getRequest(`Export/${this.id}/status`) .then(response => { let status = response.status;