Add the possibility to specify request schema

[MAILPOET-4207]
This commit is contained in:
Jan Jakes
2022-04-12 13:21:24 +02:00
committed by Veljko V
parent a06a8af0d5
commit c5ff597267
2 changed files with 13 additions and 0 deletions

View File

@@ -5,6 +5,7 @@ namespace MailPoet\Automation\Engine\API;
use MailPoet\Automation\Engine\Exceptions\Exception; use MailPoet\Automation\Engine\Exceptions\Exception;
use MailPoet\Automation\Engine\Hooks; use MailPoet\Automation\Engine\Hooks;
use MailPoet\Automation\Engine\WordPress; use MailPoet\Automation\Engine\WordPress;
use MailPoet\Validator\Schema;
use Throwable; use Throwable;
use WP_REST_Request; use WP_REST_Request;
@@ -53,6 +54,10 @@ class API {
} }
private function registerRoute(string $route, string $endpointClass, string $method): void { private function registerRoute(string $route, string $endpointClass, string $method): void {
$schema = array_map(function (Schema $field) {
return $field->toArray();
}, $endpointClass::getRequestSchema());
$this->wordPress->registerRestRoute(self::PREFIX, $route, [ $this->wordPress->registerRestRoute(self::PREFIX, $route, [
'methods' => $method, 'methods' => $method,
'callback' => function (WP_REST_Request $wpRequest) use ($endpointClass) { 'callback' => function (WP_REST_Request $wpRequest) use ($endpointClass) {
@@ -68,6 +73,7 @@ class API {
$endpoint = $this->endpointFactory->createEndpoint($endpointClass); $endpoint = $this->endpointFactory->createEndpoint($endpointClass);
return $endpoint->checkPermissions(); return $endpoint->checkPermissions();
}, },
'args' => $schema,
]); ]);
} }

View File

@@ -2,6 +2,8 @@
namespace MailPoet\Automation\Engine\API; namespace MailPoet\Automation\Engine\API;
use MailPoet\Validator\Schema;
use function current_user_can; use function current_user_can;
abstract class Endpoint { abstract class Endpoint {
@@ -10,4 +12,9 @@ abstract class Endpoint {
public function checkPermissions(): bool { public function checkPermissions(): bool {
return current_user_can('administrator'); return current_user_can('administrator');
} }
/** @return array<string, Schema> */
public static function getRequestSchema(): array {
return [];
}
} }