Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ jobs:
matrix:
os: [ubuntu-latest, windows-latest]
php: [8.5, 8.4, 8.3]
laravel: [12.*, 11.*]
laravel: [13.*, 12.*, 11.*]
stability: [prefer-stable]
exclude:
- php: 8.5
laravel: 11.*
include:
- laravel: 13.*
testbench: 11.*
- laravel: 12.*
testbench: 10.*
- laravel: 11.*
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,6 @@ docs/.vuepress/dist
.phpunit.result.cache
.php-cs-fixer.cache
phpstan.neon
.github/instructions
.github/instructions
# Local Netlify folder
.netlify
10 changes: 5 additions & 5 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@
],
"require": {
"php": "^8.3",
"illuminate/contracts": "^11.0|^12.0",
"laravel/framework": "^11.0|^12.0",
"laravel/mcp": "^0.4.1|^0.5",
"illuminate/contracts": "^11.0|^12.0|^13.0",
"laravel/framework": "^11.0|^12.0|^13.0",
"laravel/mcp": "^0.4.1|^0.5|^0.6",
"laravel/pint": "^1.25.1",
"spatie/laravel-data": "^4.4",
"spatie/laravel-package-tools": "^1.12",
Expand All @@ -31,8 +31,8 @@
"brianium/paratest": "^7.0.6",
"doctrine/dbal": "^3.0|^4.0",
"nunomaduro/collision": "^8.1",
"openai-php/laravel": "^0.8.1|^0.11",
"orchestra/testbench": "^9.0|^10.0",
"openai-php/laravel": "^0.8.1|^0.11|^0.19",
"orchestra/testbench": "^9.0|^10.0|^11.0",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan-deprecation-rules": "^1.0|^2.0",
"phpstan/phpstan-phpunit": "^1.0|^2.0",
Expand Down
Binary file modified docs-v3/.data/content/contents.sqlite
Binary file not shown.
4 changes: 2 additions & 2 deletions docs-v3/nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,10 @@ export default defineNuxtConfig({
typeCheck: false
},

// Static site generation for Vercel
// Static site generation for Netlify
ssr: true,
nitro: {
preset: 'vercel-static',
preset: 'netlify-static',
prerender: {
failOnError: false,
crawlLinks: true,
Expand Down
9 changes: 9 additions & 0 deletions polyscope.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"scripts": {
"setup": "herd link",
"archive": "herd unlink"
},
"preview": {
"url": "http://{{folder}}.test"
}
}
87 changes: 55 additions & 32 deletions src/Bootstrap/RoutesDefinition.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,32 @@

namespace Binaryk\LaravelRestify\Bootstrap;

use Binaryk\LaravelRestify\Http\Controllers\FieldDestroyController;
use Binaryk\LaravelRestify\Http\Controllers\GlobalSearchController;
use Binaryk\LaravelRestify\Http\Controllers\ListActionsController;
use Binaryk\LaravelRestify\Http\Controllers\ListGettersController;
use Binaryk\LaravelRestify\Http\Controllers\ListRepositoryActionsController;
use Binaryk\LaravelRestify\Http\Controllers\ListRepositoryGettersController;
use Binaryk\LaravelRestify\Http\Controllers\PerformActionController;
use Binaryk\LaravelRestify\Http\Controllers\PerformGetterController;
use Binaryk\LaravelRestify\Http\Controllers\PerformRepositoryActionController;
use Binaryk\LaravelRestify\Http\Controllers\PerformRepositoryGetterController;
use Binaryk\LaravelRestify\Http\Controllers\ProfileController;
use Binaryk\LaravelRestify\Http\Controllers\ProfileUpdateController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryApplyFiltersController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryAttachController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryDestroyBulkController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryDestroyController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryDetachController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryFilterController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryIndexController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryPatchController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryShowController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryStoreBulkController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryStoreController;
use Binaryk\LaravelRestify\Http\Controllers\RepositorySyncController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryUpdateBulkController;
use Binaryk\LaravelRestify\Http\Controllers\RepositoryUpdateController;
use Binaryk\LaravelRestify\Http\Controllers\RestifyJsSetupController;
use Illuminate\Support\Facades\Route;

Expand All @@ -19,98 +42,98 @@ public function __invoke(?string $uriKey = null)
// Filters
Route::get(
$prefix.'/filters',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryFilterController::class
RepositoryFilterController::class
)->name('filters.index');

Route::post(
$prefix.'/apply-restify-advanced-filters',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryApplyFiltersController::class
RepositoryApplyFiltersController::class
)->name('filters.apply');

// Actions
Route::get(
$prefix.'/actions',
\Binaryk\LaravelRestify\Http\Controllers\ListActionsController::class
ListActionsController::class
)->name('actions.index');
Route::get(
$prefix.'/{repositoryId}/actions',
\Binaryk\LaravelRestify\Http\Controllers\ListRepositoryActionsController::class
ListRepositoryActionsController::class
)->name('actions.repository.index');
Route::post(
$prefix.'/action',
\Binaryk\LaravelRestify\Http\Controllers\PerformActionController::class
PerformActionController::class
)->name('actions.perform');
Route::post(
$prefix.'/actions',
\Binaryk\LaravelRestify\Http\Controllers\PerformActionController::class
PerformActionController::class
)->name('actions.performs'); // alias to the previous route
Route::post(
$prefix.'/{repositoryId}/action',
\Binaryk\LaravelRestify\Http\Controllers\PerformRepositoryActionController::class
PerformRepositoryActionController::class
)->name('actions.repository.perform');
Route::post(
$prefix.'/{repositoryId}/actions',
\Binaryk\LaravelRestify\Http\Controllers\PerformRepositoryActionController::class
PerformRepositoryActionController::class
)->name('actions.repository.performs'); // alias to the previous route

// Getters
Route::get(
$prefix.'/getters',
\Binaryk\LaravelRestify\Http\Controllers\ListGettersController::class
ListGettersController::class
)->name('getters.index')->withoutMiddleware($this->excludedMiddleware);
Route::get(
$prefix.'/{repositoryId}/getters',
\Binaryk\LaravelRestify\Http\Controllers\ListRepositoryGettersController::class
ListRepositoryGettersController::class
)->name('getters.repository.index')->withoutMiddleware($this->excludedMiddleware);
Route::get(
$prefix.'/getters/{getter}',
\Binaryk\LaravelRestify\Http\Controllers\PerformGetterController::class
PerformGetterController::class
)->name('getters.perform')->withoutMiddleware($this->excludedMiddleware);
Route::get(
$prefix.'/{repositoryId}/getters/{getter}',
\Binaryk\LaravelRestify\Http\Controllers\PerformRepositoryGetterController::class
PerformRepositoryGetterController::class
)->name('getters.repository.perform')->withoutMiddleware($this->excludedMiddleware);

// API CRUD
Route::get(
$prefix.'',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryIndexController::class
RepositoryIndexController::class
)->name('index')->withoutMiddleware($this->excludedMiddleware);
Route::post(
$prefix.'',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryStoreController::class
RepositoryStoreController::class
)->name('store');
Route::post(
$prefix.'/bulk',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryStoreBulkController::class
RepositoryStoreBulkController::class
)->name('store.bulk');
Route::post(
$prefix.'/bulk/update',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryUpdateBulkController::class
RepositoryUpdateBulkController::class
)->name('update.bulk');
Route::delete(
$prefix.'/bulk/delete',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryDestroyBulkController::class
RepositoryDestroyBulkController::class
)->name('destroy.bulk');
Route::get(
$prefix.'/{repositoryId}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryShowController::class
RepositoryShowController::class
)->name('show')->withoutMiddleware($this->excludedMiddleware);
Route::patch(
$prefix.'/{repositoryId}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryPatchController::class
RepositoryPatchController::class
)->name('patch');
Route::put(
$prefix.'/{repositoryId}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryUpdateController::class
RepositoryUpdateController::class
)->name('put');
Route::post(
$prefix.'/{repositoryId}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryUpdateController::class
RepositoryUpdateController::class
)->name('update');
Route::delete(
$prefix.'/{repositoryId}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryDestroyController::class
RepositoryDestroyController::class
)->name('destroy');

if ($uriKey) {
Expand All @@ -120,47 +143,47 @@ public function __invoke(?string $uriKey = null)
// Fields
Route::delete(
$prefix.'/{repositoryId}/field/{field}',
\Binaryk\LaravelRestify\Http\Controllers\FieldDestroyController::class
FieldDestroyController::class
)->name('field.destroy');

// Attach related repository id
Route::post(
$prefix.'/{repositoryId}/attach/{relatedRepository}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryAttachController::class
RepositoryAttachController::class
)->name('attach');
Route::post(
$prefix.'/{repositoryId}/detach/{relatedRepository}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryDetachController::class
RepositoryDetachController::class
)->name('detach');
Route::post(
$prefix.'/{repositoryId}/sync/{relatedRepository}',
\Binaryk\LaravelRestify\Http\Controllers\RepositorySyncController::class
RepositorySyncController::class
)->name('sync');

// Relatable
Route::get(
'/{parentRepository}/{parentRepositoryId}/{repository}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryIndexController::class
RepositoryIndexController::class
)->name('relatable.index');
Route::post(
'/{parentRepository}/{parentRepositoryId}/{repository}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryStoreController::class
RepositoryStoreController::class
)->name('relatable.store');
Route::get(
'/{parentRepository}/{parentRepositoryId}/{repository}/{repositoryId}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryShowController::class
RepositoryShowController::class
)->name('relatable.show');
Route::post(
'/{parentRepository}/{parentRepositoryId}/{repository}/{repositoryId}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryUpdateController::class
RepositoryUpdateController::class
)->name('relatable.update');
Route::put(
'/{parentRepository}/{parentRepositoryId}/{repository}/{repositoryId}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryUpdateController::class
RepositoryUpdateController::class
)->name('relatable.updatePut');
Route::delete(
'/{parentRepository}/{parentRepositoryId}/{repository}/{repositoryId}',
\Binaryk\LaravelRestify\Http\Controllers\RepositoryDestroyController::class
RepositoryDestroyController::class
)->name('relatable.destroy');
}

Expand Down
3 changes: 2 additions & 1 deletion src/Commands/ActionCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\GeneratorCommand;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
use Illuminate\Support\Str;

class ActionCommand extends GeneratorCommand
Expand All @@ -30,7 +31,7 @@ public function handle()
* @param string $name
* @return string
*
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
* @throws FileNotFoundException
*/
protected function buildClass($name)
{
Expand Down
3 changes: 2 additions & 1 deletion src/Commands/GetterCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Illuminate\Console\ConfirmableTrait;
use Illuminate\Console\GeneratorCommand;
use Illuminate\Contracts\Filesystem\FileNotFoundException;
use Illuminate\Support\Str;

class GetterCommand extends GeneratorCommand
Expand All @@ -30,7 +31,7 @@ public function handle()
* @param string $name
* @return string
*
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
* @throws FileNotFoundException
*/
protected function buildClass($name)
{
Expand Down
20 changes: 11 additions & 9 deletions src/Commands/GraphqlGenerateCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

use Binaryk\LaravelRestify\Fields\Field;
use Binaryk\LaravelRestify\Http\Requests\RepositoryStoreRequest;
use Binaryk\LaravelRestify\Http\Requests\RestifyRequest;
use Binaryk\LaravelRestify\Restify;
use Illuminate\Console\Command;
use Illuminate\Console\ConfirmableTrait;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;

class GraphqlGenerateCommand extends Command
Expand Down Expand Up @@ -152,7 +154,7 @@ protected function showPreview(Collection $repositories, string $outputPath, str
try {
if (class_exists($repositoryClass)) {
$repository = new $repositoryClass;
$request = app(\Binaryk\LaravelRestify\Http\Requests\RestifyRequest::class);
$request = app(RestifyRequest::class);
$fieldCollection = $repository->collectFields($request);

$sampleFields = collect($fieldCollection)->take(4);
Expand Down Expand Up @@ -270,7 +272,7 @@ protected function generateType(string $repositoryClass, string $typeName): stri
}

$repository = new $repositoryClass;
$request = app(\Binaryk\LaravelRestify\Http\Requests\RestifyRequest::class);
$request = app(RestifyRequest::class);

$fields = [' id: ID!'];

Expand Down Expand Up @@ -306,7 +308,7 @@ protected function generateInputType(string $repositoryClass, string $typeName):
}

$repository = new $repositoryClass;
$request = app(\Binaryk\LaravelRestify\Http\Requests\RestifyRequest::class);
$request = app(RestifyRequest::class);

$fields = [];

Expand Down Expand Up @@ -644,13 +646,13 @@ public function __call($method, $parameters)
};

// Mock Auth facade
\Illuminate\Support\Facades\Auth::shouldReceive('user')
Auth::shouldReceive('user')
->andReturn($mockUser);

\Illuminate\Support\Facades\Auth::shouldReceive('check')
Auth::shouldReceive('check')
->andReturn(true);

\Illuminate\Support\Facades\Auth::shouldReceive('id')
Auth::shouldReceive('id')
->andReturn(1);

request()->setUserResolver(function () use ($mockUser) {
Expand All @@ -663,11 +665,11 @@ public function __call($method, $parameters)
});

// Extend RestifyRequest to return our mock user
$originalMakeMethod = \Binaryk\LaravelRestify\Http\Requests\RestifyRequest::class.'::createFrom';
$originalMakeMethod = RestifyRequest::class.'::createFrom';

// Create a custom request instance that returns our mock user
app()->bind(\Binaryk\LaravelRestify\Http\Requests\RestifyRequest::class, function ($app) use ($mockUser) {
$request = new \Binaryk\LaravelRestify\Http\Requests\RestifyRequest;
app()->bind(RestifyRequest::class, function ($app) use ($mockUser) {
$request = new RestifyRequest;

// Override the user method to return our mock
$reflection = new \ReflectionClass($request);
Expand Down
Loading