namespace = 'reservations/v1'; $this->resource_name = 'reservation'; } public function register_routes(): void { register_rest_route($this->namespace, '/' . $this->resource_name, [ 'methods' => 'GET', 'callback' => [$this, 'get_all'], 'permission_callback' => [RsvRestPolicy::class, 'admin'] ]); register_rest_route($this->namespace, '/' . $this->resource_name . '/(?P\d+)', [ 'methods' => 'GET', 'callback' => [$this, 'get'], 'permission_callback' => [RsvRestPolicy::class, 'admin'] ]); register_rest_route($this->namespace, '/' . $this->resource_name, [ 'methods' => 'POST', 'callback' => [$this, 'create'], 'permission_callback' => [RsvRestPolicy::class, 'admin'] ]); register_rest_route($this->namespace, '/' . $this->resource_name . '/(?P\d+)/accept', [ 'methods' => 'POST', 'callback' => [$this, 'accept_by_id'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], ]); register_rest_route($this->namespace, '/' . $this->resource_name . '/(?P\d+)/refuse', [ 'methods' => 'POST', 'callback' => [$this, 'refuse_by_id'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], ]); } function get_all(WP_REST_Request $request) { [$skip, $limit] = self::paging($request); $service = new RsvReservationService(); return $this->paged_response((array) $service->get_all($limit, $skip), $service->count_all()); } function get(WP_REST_Request $request): WP_REST_Response { $service = new RsvReservationService(); $detail = $service->get_detail((int) $request->get_param('id')); if ($detail === null) { return new WP_REST_Response(['error' => 'Not found'], 404); } return new WP_REST_Response($detail, 200); } function create(WP_REST_Request $request) { $service = new RsvReservationService(); $body = $request->get_json_params(); return $service->create(RsvReservation::from_array($body)); } function accept_by_id(WP_REST_Request $request): WP_REST_Response { try { (new RsvTimetableReservationService())->accept_by_reservation_id((int) $request->get_param('id')); return new WP_REST_Response(['status' => 'accepted'], 200); } catch (InvalidArgumentException $e) { return new WP_REST_Response(['error' => $e->getMessage()], 404); } } function refuse_by_id(WP_REST_Request $request): WP_REST_Response { try { (new RsvTimetableReservationService())->refuse_by_reservation_id((int) $request->get_param('id')); return new WP_REST_Response(['status' => 'refused'], 200); } catch (InvalidArgumentException $e) { return new WP_REST_Response(['error' => $e->getMessage()], 404); } } }