\d+)/run'; private const UNDO_PATH = '/fixes/(?P\d+)/undo'; private const ID_PARAMETER = 'id'; private const FIXES_PER_PAGE = 20; public function __construct( private RestRoutes $rest_routes, private CreateFixEndpoint $create_fix_endpoint, private FixStepEndpoint $run_fix_endpoint, private FixStepEndpoint $undo_fix_endpoint, private ListFixesEndpoint $list_fixes_endpoint, private RedirectServer $redirect_server ) { } public function register(): void { add_action( self::REST_INIT_HOOK, array( $this, 'add_routes' ) ); add_action( self::TEMPLATE_REDIRECT_HOOK, array( $this->redirect_server, 'serve' ) ); } public function add_routes(): void { $this->rest_routes->add( self::FIXES_PATH, self::CHANGE_METHOD, fn( WP_REST_Request $request ): array|WP_Error => $this->create_fix_endpoint->create( $request ) ); $this->rest_routes->add( self::RUN_PATH, self::CHANGE_METHOD, fn( WP_REST_Request $request ): array|WP_Error => $this->run_fix_endpoint->handle( $request->get_param( self::ID_PARAMETER ) ) ); $this->rest_routes->add( self::UNDO_PATH, self::CHANGE_METHOD, fn( WP_REST_Request $request ): array|WP_Error => $this->undo_fix_endpoint->handle( $request->get_param( self::ID_PARAMETER ) ) ); $this->rest_routes->add( self::FIXES_PATH, self::READ_METHOD, fn( WP_REST_Request $request ): array => $this->list_fixes_endpoint->list_page( PageRequest::from_request( $request, self::FIXES_PER_PAGE ) ) ); } }