Skip to content

Commit 10b0611

Browse files
authored
Fix/run actions mcp (#674)
* fix: fixing run actions on mcp * Fix styling * fix: fixing actions on mcp * Fix styling * fix: action integration tests * Fix styling * fix: wip * fix: fixing race condition * fix: wip --------- Co-authored-by: binaryk <binaryk@users.noreply.github.com>
1 parent f082b09 commit 10b0611

20 files changed

+579
-69
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,4 @@ jobs:
4949
run: sleep 5
5050

5151
- name: Execute tests
52-
run: ./vendor/bin/testbench package:test --no-coverage
52+
run: composer test

src/Actions/Action.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public static function indexQuery(RestifyRequest $request, $query)
5656
/**
5757
* The callback used to authorize running the action.
5858
*/
59-
public ?Closure $runCallback;
59+
public ?Closure $runCallback = null;
6060

6161
public function name()
6262
{

src/Fields/FieldCollection.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Binaryk\LaravelRestify\Fields;
44

55
use Binaryk\LaravelRestify\Http\Requests\RestifyRequest;
6-
use Binaryk\LaravelRestify\MCP\Requests\McpRequest;
6+
use Binaryk\LaravelRestify\MCP\Requests\McpRequestable;
77
use Binaryk\LaravelRestify\Repositories\Repository;
88
use Illuminate\Http\Request;
99
use Illuminate\Support\Collection;
@@ -70,7 +70,7 @@ public function forIndex(RestifyRequest $request, $repository): self
7070
public function forMcpIndex(RestifyRequest $request, $repository): self
7171
{
7272
// If this is an MCP request and repository has fieldsForMcpIndex method
73-
if ($request instanceof McpRequest && method_exists($repository, 'fieldsForMcpIndex')) {
73+
if ($request instanceof McpRequestable && method_exists($repository, 'fieldsForMcpIndex')) {
7474
// Get the MCP-specific fields from the repository
7575
$mcpFields = $repository->fieldsForMcpIndex($request);
7676
$mcpFieldAttributes = collect($mcpFields)->map(fn ($field) => $field->attribute)->toArray();

src/Fields/OrganicField.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Binaryk\LaravelRestify\Fields;
44

55
use Binaryk\LaravelRestify\Http\Requests\RestifyRequest;
6-
use Binaryk\LaravelRestify\MCP\Requests\McpRequest;
6+
use Binaryk\LaravelRestify\MCP\Requests\McpRequestable;
77
use Binaryk\LaravelRestify\Traits\ProxiesCanSeeToGate;
88
use Closure;
99
use Illuminate\Http\Request;
@@ -101,7 +101,7 @@ public function isShownOnShow(RestifyRequest $request, $repository): bool
101101
}
102102

103103
// Check MCP-specific visibility for MCP requests
104-
if ($request instanceof McpRequest) {
104+
if ($request instanceof McpRequestable) {
105105
return $this->isShownOnMcp($request, $repository);
106106
}
107107

@@ -124,7 +124,7 @@ public function isShownOnIndex(RestifyRequest $request, $repository): bool
124124
}
125125

126126
// Check MCP-specific visibility for MCP requests
127-
if ($request instanceof McpRequest) {
127+
if ($request instanceof McpRequestable) {
128128
return $this->isShownOnMcp($request, $repository);
129129
}
130130

src/Filters/MatchesCollection.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Binaryk\LaravelRestify\Filters;
44

55
use Binaryk\LaravelRestify\Http\Requests\RestifyRequest;
6-
use Binaryk\LaravelRestify\MCP\Requests\McpRequest;
6+
use Binaryk\LaravelRestify\MCP\Requests\McpRequestable;
77
use Binaryk\LaravelRestify\Repositories\Repository;
88
use Closure;
99
use Illuminate\Database\Eloquent\Builder;
@@ -70,11 +70,11 @@ public function inQuery(RestifyRequest $request): self
7070
$value = $request->query($filter->column());
7171
$negatedValue = $request->query("-{$filter->column()}");
7272

73-
if ($request instanceof McpRequest) {
73+
if ($request instanceof McpRequestable) {
7474
$negatedValue = $request->input("-{$filter->column()}");
7575
}
7676

77-
if ($request instanceof McpRequest) {
77+
if ($request instanceof McpRequestable) {
7878
$value = $request->input($filter->column());
7979
}
8080

src/Http/Requests/Concerns/DetermineRequestType.php

Lines changed: 27 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,15 @@
1212
use Binaryk\LaravelRestify\Http\Requests\RepositoryStoreRequest;
1313
use Binaryk\LaravelRestify\Http\Requests\RepositoryUpdateBulkRequest;
1414
use Binaryk\LaravelRestify\Http\Requests\RepositoryUpdateRequest;
15-
use Binaryk\LaravelRestify\MCP\Requests\McpRequest;
15+
use Binaryk\LaravelRestify\MCP\Requests\McpActionRequest;
16+
use Binaryk\LaravelRestify\MCP\Requests\McpDestroyRequest;
17+
use Binaryk\LaravelRestify\MCP\Requests\McpGetterRequest;
18+
use Binaryk\LaravelRestify\MCP\Requests\McpIndexRequest;
19+
use Binaryk\LaravelRestify\MCP\Requests\McpShowRequest;
20+
use Binaryk\LaravelRestify\MCP\Requests\McpStoreBulkRequest;
21+
use Binaryk\LaravelRestify\MCP\Requests\McpStoreRequest;
22+
use Binaryk\LaravelRestify\MCP\Requests\McpUpdateBulkRequest;
23+
use Binaryk\LaravelRestify\MCP\Requests\McpUpdateRequest;
1624

1725
/**
1826
* @mixin RestifyRequest
@@ -21,11 +29,8 @@ trait DetermineRequestType
2129
{
2230
public function isIndexRequest(): bool
2331
{
24-
if ($this instanceof McpRequest) {
25-
return $this->isIndexRequest();
26-
}
27-
28-
return $this instanceof RepositoryIndexRequest;
32+
return $this instanceof RepositoryIndexRequest
33+
|| $this instanceof McpIndexRequest;
2934
}
3035

3136
public function isGlobalRequest(): bool
@@ -35,73 +40,49 @@ public function isGlobalRequest(): bool
3540

3641
public function isShowRequest(): bool
3742
{
38-
if ($this instanceof McpRequest) {
39-
return $this->isShowRequest();
40-
}
41-
42-
return $this instanceof RepositoryShowRequest;
43+
return $this instanceof RepositoryShowRequest
44+
|| $this instanceof McpShowRequest;
4345
}
4446

4547
public function isUpdateRequest(): bool
4648
{
47-
if ($this instanceof McpRequest) {
48-
return $this->isUpdateRequest();
49-
}
50-
51-
return $this instanceof RepositoryUpdateRequest;
49+
return $this instanceof RepositoryUpdateRequest
50+
|| $this instanceof McpUpdateRequest;
5251
}
5352

5453
public function isStoreRequest(): bool
5554
{
56-
if ($this instanceof McpRequest) {
57-
return $this->isStoreRequest();
58-
}
59-
60-
return $this instanceof RepositoryStoreRequest;
55+
return $this instanceof RepositoryStoreRequest
56+
|| $this instanceof McpStoreRequest;
6157
}
6258

6359
public function isDestroyRequest(): bool
6460
{
65-
if ($this instanceof McpRequest) {
66-
return $this->isDestroyRequest();
67-
}
68-
69-
return $this instanceof RepositoryDestroyRequest;
61+
return $this instanceof RepositoryDestroyRequest
62+
|| $this instanceof McpDestroyRequest;
7063
}
7164

7265
public function isStoreBulkRequest(): bool
7366
{
74-
if ($this instanceof McpRequest) {
75-
return $this->isStoreBulkRequest();
76-
}
77-
78-
return $this instanceof RepositoryStoreBulkRequest;
67+
return $this instanceof RepositoryStoreBulkRequest
68+
|| $this instanceof McpStoreBulkRequest;
7969
}
8070

8171
public function isUpdateBulkRequest(): bool
8272
{
83-
if ($this instanceof McpRequest) {
84-
return $this->isUpdateBulkRequest();
85-
}
86-
87-
return $this instanceof RepositoryUpdateBulkRequest;
73+
return $this instanceof RepositoryUpdateBulkRequest
74+
|| $this instanceof McpUpdateBulkRequest;
8875
}
8976

9077
public function isActionRequest(): bool
9178
{
92-
if ($this instanceof McpRequest) {
93-
return $this->isActionRequest();
94-
}
95-
96-
return $this instanceof ActionRequest;
79+
return $this instanceof ActionRequest
80+
|| $this instanceof McpActionRequest;
9781
}
9882

9983
public function isGetterRequest(): bool
10084
{
101-
if ($this instanceof McpRequest) {
102-
return $this->isGetterRequest();
103-
}
104-
105-
return $this instanceof GetterRequest;
85+
return $this instanceof GetterRequest
86+
|| $this instanceof McpGetterRequest;
10687
}
10788
}

src/MCP/Requests/McpActionRequest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@
22

33
namespace Binaryk\LaravelRestify\MCP\Requests;
44

5-
class McpActionRequest extends McpRequest {}
5+
use Binaryk\LaravelRestify\Http\Requests\ActionRequest;
6+
7+
class McpActionRequest extends ActionRequest implements McpRequestable {}

src/MCP/Requests/McpDestroyRequest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
namespace Binaryk\LaravelRestify\MCP\Requests;
44

5-
class McpDestroyRequest extends McpRequest {}
5+
class McpDestroyRequest extends McpRequest implements McpRequestable {}

src/MCP/Requests/McpGetterRequest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@
22

33
namespace Binaryk\LaravelRestify\MCP\Requests;
44

5-
class McpGetterRequest extends McpRequest {}
5+
use Binaryk\LaravelRestify\Http\Requests\GetterRequest;
6+
7+
class McpGetterRequest extends GetterRequest implements McpRequestable {}

src/MCP/Requests/McpIndexRequest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
namespace Binaryk\LaravelRestify\MCP\Requests;
44

5-
class McpIndexRequest extends McpRequest {}
5+
class McpIndexRequest extends McpRequest implements McpRequestable {}

0 commit comments

Comments
 (0)