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
2 changes: 0 additions & 2 deletions src/Fields/BaseField.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

namespace Binaryk\LaravelRestify\Fields;

use Closure;

abstract class BaseField
{
}
2 changes: 0 additions & 2 deletions src/Fields/Field.php
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,4 @@ public function event(Closure $callback)

return $this;
}


}
15 changes: 7 additions & 8 deletions src/Fields/FieldCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,50 +8,49 @@

class FieldCollection extends Collection
{
public function authorized(Request $request): FieldCollection
public function authorized(Request $request): self
{
return $this->filter(function (OrganicField $field) use ($request) {
return $field->authorize($request);
})->values();
}

public function authorizedUpdate(Request $request): FieldCollection
public function authorizedUpdate(Request $request): self
{
return $this->filter(function (OrganicField $field) use ($request) {
return $field->authorize($request) && $field->authorizedToUpdate($request);
})->values();
}


public function resolve($repository): FieldCollection
public function resolve($repository): self
{
return $this->each(function ($field) use ($repository) {
$field->resolve($repository);
});
}

public function forIndex(RestifyRequest $request, $repository): FieldCollection
public function forIndex(RestifyRequest $request, $repository): self
{
return $this->filter(function (Field $field) use ($repository, $request) {
return $field->isShownOnIndex($request, $repository);
})->values();
}

public function forShow(RestifyRequest $request, $repository): FieldCollection
public function forShow(RestifyRequest $request, $repository): self
{
return $this->filter(function (Field $field) use ($repository, $request) {
return $field->isShownOnShow($request, $repository);
})->values();
}

public function forStore(RestifyRequest $request, $repository): FieldCollection
public function forStore(RestifyRequest $request, $repository): self
{
return $this->filter(function (Field $field) use ($repository, $request) {
return $field->isShownOnStore($request, $repository);
})->values();
}

public function forUpdate(RestifyRequest $request, $repository): FieldCollection
public function forUpdate(RestifyRequest $request, $repository): self
{
return $this->filter(function (Field $field) use ($repository, $request) {
return $field->isShownOnUpdate($request, $repository);
Expand Down
12 changes: 5 additions & 7 deletions src/Repositories/Repository.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
use Binaryk\LaravelRestify\Fields\FieldCollection;
use Binaryk\LaravelRestify\Http\Requests\RepositoryDestroyRequest;
use Binaryk\LaravelRestify\Http\Requests\RepositoryStoreRequest;
use Binaryk\LaravelRestify\Http\Requests\RepositoryUpdateRequest;
use Binaryk\LaravelRestify\Http\Requests\RestifyRequest;
use Binaryk\LaravelRestify\Restify;
use Binaryk\LaravelRestify\Services\Search\RepositorySearchService;
Expand Down Expand Up @@ -164,8 +163,8 @@ public function collectFields(RestifyRequest $request)

if ($this instanceof Mergeable) {
$fillable = collect($this->resource->getFillable())
->filter(fn($attribute) => $fields->contains('attribute', $attribute) === false)
->map(fn($attribute) => Field::new($attribute));
->filter(fn ($attribute) => $fields->contains('attribute', $attribute) === false)
->map(fn ($attribute) => Field::new($attribute));

$fields = $fields->merge($fillable);
}
Expand Down Expand Up @@ -469,7 +468,6 @@ public function store(RestifyRequest $request)
->header('Location', Restify::path().'/'.static::uriKey().'/'.$this->resource->id);
}


public function update(RestifyRequest $request, $repositoryId)
{
$this->resource = DB::transaction(function () use ($request) {
Expand Down Expand Up @@ -686,16 +684,16 @@ protected static function fillExtra(RestifyRequest $request, Model $model, Colle
{
// dd('Aici trebuie sa filtrez doar acele campuri care sunt in fillable si sa vad daca e Mergeable repository, deci nu e ok sa fie statica');

$a = collect($model->getFillable())->filter(fn($attribute) => $fields->contains('attribute', $attribute) === false)
->map(fn($attribute) => Field::new($attribute))
$a = collect($model->getFillable())->filter(fn ($attribute) => $fields->contains('attribute', $attribute) === false)
->map(fn ($attribute) => Field::new($attribute))
->toArray();

dd($a);

$definedAttributes = $fields->map->getAttribute()->toArray();
dd($definedAttributes);
$fromRequest = collect($request->only($model->getFillable()))->keys()->filter(function ($attribute) use ($definedAttributes) {
return !in_array($attribute, $definedAttributes);
return ! in_array($attribute, $definedAttributes);
});

return $fromRequest->each(function ($attribute) use ($request, $model) {
Expand Down
29 changes: 13 additions & 16 deletions tests/Controllers/RepositoryUpdateControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public function test_basic_update_works()
{
$post = factory(Post::class)->create(['user_id' => 1]);

$this->withoutExceptionHandling()->patch('/restify-api/posts/' . $post->id, [
$this->withoutExceptionHandling()->patch('/restify-api/posts/'.$post->id, [
'title' => 'Updated title',
])
->assertStatus(200);
Expand All @@ -45,7 +45,7 @@ public function test_put_works()
{
$post = factory(Post::class)->create(['user_id' => 1]);

$this->withoutExceptionHandling()->put('/restify-api/posts/' . $post->id, [
$this->withoutExceptionHandling()->put('/restify-api/posts/'.$post->id, [
'title' => 'Updated title',
])
->assertStatus(200);
Expand All @@ -65,7 +65,7 @@ public function test_unathorized_to_update()

$_SERVER['restify.post.updateable'] = false;

$this->patch('/restify-api/posts/' . $post->id, [
$this->patch('/restify-api/posts/'.$post->id, [
'title' => 'Updated title',
])->assertStatus(403)
->assertJson([
Expand All @@ -77,36 +77,34 @@ public function test_do_not_update_fields_without_permission()
{
Restify::repositories([AppleUnauthorizedField::class]);

$post = factory(Apple::class)->create(['user_id' => 1, 'title' => 'Title',]);
$post = factory(Apple::class)->create(['user_id' => 1, 'title' => 'Title']);

$_SERVER['restify.apple.updateable'] = false;

$response = $this->putJson('/restify-api/apple-unauthorized-put/' . $post->id, [
$response = $this->putJson('/restify-api/apple-unauthorized-put/'.$post->id, [
'title' => 'Updated title',
'user_id' => 2
'user_id' => 2,
])->assertStatus(200);


$this->assertEquals('Title', $response->json('data.attributes.title'));
$this->assertEquals(2, $response->json('data.attributes.user_id'));
}

public function test_update_fillable_fields_for_mergeable_repository()
{
Restify::repositories([
AppleUpdateMergeable::class
AppleUpdateMergeable::class,
]);

$apple = factory(Apple::class)->create(['user_id' => 1, 'title' => 'Title', 'color' => 'red',]);
$apple = factory(Apple::class)->create(['user_id' => 1, 'title' => 'Title', 'color' => 'red']);

$response = $this->putJson('/restify-api/apple-update-extra/' . $apple->id, [
$response = $this->putJson('/restify-api/apple-update-extra/'.$apple->id, [
'title' => 'Updated title',
'color' => 'blue',
'user_id' => 2
'user_id' => 2,
])
->assertStatus(200);


$this->assertEquals('Updated title', $response->json('data.attributes.title')); // via extra
$this->assertEquals('blue', $response->json('data.attributes.color')); // via extra
$this->assertEquals(2, $response->json('data.attributes.user_id')); // via field
Expand All @@ -122,9 +120,9 @@ class AppleUnauthorizedField extends Repository
public function fields(RestifyRequest $request)
{
return [
Field::make('title')->canUpdate(fn($value) => $_SERVER['restify.apple.updateable']),
Field::make('title')->canUpdate(fn ($value) => $_SERVER['restify.apple.updateable']),

Field::make('user_id')->canUpdate(fn($value) => true),
Field::make('user_id')->canUpdate(fn ($value) => true),
];
}
}
Expand All @@ -138,8 +136,7 @@ class AppleUpdateMergeable extends Repository implements Mergeable
public function fields(RestifyRequest $request)
{
return [
Field::make('user_id')->canUpdate(fn($value) => true),
Field::make('user_id')->canUpdate(fn ($value) => true),
];
}
}