\d+)/capacity'; public function register_routes(): void { register_rest_route($this->namespace, '/' . $this->resource_name, [ [ 'methods' => 'GET', 'callback' => [$this, 'get_all'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], ], [ 'methods' => 'POST', 'callback' => [$this, 'create'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], // 'args' => self::input_args(RsvTimetableCapacity::schema()), ], ]); register_rest_route($this->namespace, '/' . $this->resource_name . '/(?P\d+)', [ [ 'methods' => 'GET', 'callback' => [$this, 'get'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], ], [ 'methods' => 'PUT', 'callback' => [$this, 'update'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], 'args' => self::input_args(RsvTimetableCapacity::schema()), ], [ 'methods' => 'DELETE', 'callback' => [$this, 'delete'], 'permission_callback' => [RsvRestPolicy::class, 'admin'], ], ]); } public function get_all(WP_REST_Request $request): WP_REST_Response { [$skip, $limit] = self::paging($request); $timetable_id = (int) $request->get_param('id'); $service = new RsvTimetableCapacityRepository(); return $this->paged_response( $service->get_all($timetable_id, $limit, $skip), $service->count_all($timetable_id) ); } public function get(WP_REST_Request $request): WP_REST_Response { return new WP_REST_Response( (new RsvTimetableCapacityRepository())->get((int) $request->get_param('capacity_id')), 200 ); } public function create(WP_REST_Request $request): WP_REST_Response { $items = $request->get_json_params(); $timetable_id = (int) $request->get_param('id'); $ids = []; foreach($items as $item) { $capacity = new RsvTimetableCapacity( null, $timetable_id, (int) $item['capacity'], (int) $item['min_lead_time_minutes'], new DateTime($item['date']), (int) $item['start_time'], (int) $item['end_time'], (int) $item['repeat_period_in_days'], (int) $item['repeat_times'], (bool) $item['requires_confirmation'], ); $ids[] = (new RsvTimetableCapacityRepository())->create($capacity); } return new WP_REST_Response( ['ids' => $ids], 201 ); } public function update(WP_REST_Request $request): WP_REST_Response { $capacity = new RsvTimetableCapacity( (int) $request->get_param('capacity_id'), (int) $request->get_param('id'), (int) $request->get_param('capacity'), (int) $request->get_param('min_lead_time_minutes'), new DateTime($request->get_param('date')), (int)$request->get_param('start_time'), (int)$request->get_param('end_time'), (int) $request->get_param('repeat_period_in_days'), (int) $request->get_param('repeat_times'), (bool) $request->get_param('requires_confirmation'), ); $capacity_id = (int) $request->get_param('capacity_id'); (new RsvTimetableCapacityRepository())->update($capacity_id, $capacity); return new WP_REST_Response(['id' => $capacity_id], 200); } public function delete(WP_REST_Request $request): WP_REST_Response { (new RsvTimetableCapacityRepository())->delete((int) $request->get_param('capacity_id')); return new WP_REST_Response(null, 204); } }