'object', 'properties' => [ 'form_id' => ['type' => 'integer', 'readonly' => true], 'name' => ['type' => 'string', 'required' => true, 'minLength' => 1], 'definition' => [ 'type' => 'object', 'required' => false, 'properties' => [ 'email_key' => ['type' => 'string', 'required' => false], 'elements' => ['type' => 'array', 'default' => []], ], ], ], ]; } public function register_routes(): void { register_rest_route($this->namespace, '/' . $this->resource_name, [ [ 'methods' => 'GET', 'callback' => [$this, 'index'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], ], [ 'methods' => 'POST', 'callback' => [$this, 'create'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], 'args' => self::input_args(self::schema()), ], ]); register_rest_route($this->namespace, '/' . $this->resource_name . '/(?P\d+)', [ [ 'methods' => 'GET', 'callback' => [$this, 'show'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], ], [ 'methods' => 'PUT', 'callback' => [$this, 'update'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], 'args' => self::input_args(self::schema()), ], [ 'methods' => 'DELETE', 'callback' => [$this, 'destroy'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], ], ]); } function index(WP_REST_Request $request): WP_REST_Response { [$skip, $limit] = self::paging($request); $repo = new RsvFormDefinitionRepository(); return $this->paged_response($repo->get_all($limit, $skip), $repo->count_all()); } function show(WP_REST_Request $request): WP_REST_Response { $row = (new RsvFormDefinitionRepository())->get((int) $request->get_param('id')); if ($row === null) { return new WP_REST_Response(['error' => 'Not found'], 404); } return new WP_REST_Response($row, 200); } function create(WP_REST_Request $request): WP_REST_Response { try { $id = (new RsvFormDefinitionRepository())->add( $request->get_param('name'), $request->get_param('definition') ?? [] ); } catch(Throwable $e) { Logger::error($e); return new WP_REST_Response(['error' => 'An error occurred.'], 500); } return new WP_REST_Response(['id' => $id], 201); } function destroy(WP_REST_Request $request): WP_REST_Response { $id = (int) $request->get_param('id'); $repo = new RsvFormDefinitionRepository(); if ($repo->get($id) === null) { return new WP_REST_Response(['error' => 'Not found'], 404); } $repo->delete($id); return new WP_REST_Response(null, 204); } function update(WP_REST_Request $request): WP_REST_Response { $id = (int) $request->get_param('id'); $repo = new RsvFormDefinitionRepository(); if ($repo->get($id) === null) { return new WP_REST_Response(['error' => 'Not found'], 404); } $repo->update($id, $request->get_param('name'), $request->get_param('definition')); return new WP_REST_Response(null, 204); } }