$filePattern . '/sections/(:any)', 'method' => 'GET', 'action' => function (string $path, string $filename, string $sectionName) { return $this->file($path, $filename)->blueprint()->section($sectionName)?->toResponse(); } ], [ 'pattern' => $filePattern . '/fields/(:any)/(:all?)', 'method' => 'ALL', 'action' => function (string $parent, string $filename, string $fieldName, string $path = null) { if ($file = $this->file($parent, $filename)) { return $this->fieldApi($file, $fieldName, $path); } } ], [ 'pattern' => $parentPattern, 'method' => 'GET', 'action' => function (string $path) { return $this->files($path)->sorted(); } ], [ 'pattern' => $parentPattern, 'method' => 'POST', 'action' => function (string $path) { // move_uploaded_file() not working with unit test // @codeCoverageIgnoreStart return $this->upload(function ($source, $filename) use ($path) { $props = [ 'content' => [ 'sort' => $this->requestBody('sort') ], 'source' => $source, 'template' => $this->requestBody('template'), 'filename' => $filename ]; // move the source file from the temp dir return $this->parent($path)->createFile($props, true); }); // @codeCoverageIgnoreEnd } ], [ 'pattern' => $parentPattern . '/search', 'method' => 'GET|POST', 'action' => function (string $path) { $files = $this->files($path); if ($this->requestMethod() === 'GET') { return $files->search($this->requestQuery('q')); } return $files->query($this->requestBody()); } ], [ 'pattern' => $parentPattern . '/sort', 'method' => 'PATCH', 'action' => function (string $path) { return $this->files($path)->changeSort( $this->requestBody('files'), $this->requestBody('index') ); } ], [ 'pattern' => $filePattern, 'method' => 'GET', 'action' => function (string $path, string $filename) { return $this->file($path, $filename); } ], [ 'pattern' => $filePattern, 'method' => 'PATCH', 'action' => function (string $path, string $filename) { return $this->file($path, $filename)->update( $this->requestBody(), $this->language(), true ); } ], [ 'pattern' => $filePattern, 'method' => 'POST', 'action' => function (string $path, string $filename) { // move the source file from the temp dir return $this->upload( fn ($source) => $this->file($path, $filename)->replace($source, true) ); } ], [ 'pattern' => $filePattern, 'method' => 'DELETE', 'action' => function (string $path, string $filename) { return $this->file($path, $filename)->delete(); } ], [ 'pattern' => $filePattern . '/name', 'method' => 'PATCH', 'action' => function (string $path, string $filename) { return $this->file($path, $filename)->changeName($this->requestBody('name')); } ], [ 'pattern' => $parentPattern . '/search', 'method' => 'GET|POST', 'action' => function () { $files = $this ->site() ->index(true) ->filter('isListable', true) ->files() ->filter('isListable', true); if ($this->requestMethod() === 'GET') { return $files->search($this->requestQuery('q')); } return $files->query($this->requestBody()); } ], ];