Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

9.2.0 #609

Merged
merged 5 commits into from
Jul 1, 2024
Merged

9.2.0 #609

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
54 changes: 54 additions & 0 deletions docs-v2/content/en/search/advanced-filters.md
Original file line number Diff line number Diff line change
Expand Up @@ -364,8 +364,18 @@ The response will look like this:
"key": "created-after-date-filter",
"type": "timestamp",
"options": []
},
{
"key": "email",
"type": "value",
"description": "Email",
"label": "Email",
"meta": {
"operator": "like"
}
}
]
}
```

Along with custom filters, you can also include in the response the primary filters (as matches), by using `?include` query param:
Expand All @@ -374,3 +384,47 @@ Along with custom filters, you can also include in the response the primary filt
/api/restify/posts/filters?include=matches,searchables,sortables
```

## Handling Additional Payload Data in Advanced Filters

In some scenarios, you might want to send additional data beyond the standard key and value in your filter payload. For instance, you may need to specify an operator or a column to apply more complex filtering logic. Laravel Restify Advanced Filters provide a way to handle these additional payload fields using the `$this->rest()` method.

**Example Payload**

Consider the following payload:
```json
const filters = btoa(JSON.stringify([
{
'key': ValueFilter::uriKey(),
'value': 'Valid%',
'operator' => 'like',
'column' => 'description',
}
]));

const response = await axios.get(`api/restify/posts?filters=${filters}`);
```

In this payload, besides the standard key and value, we are also sending operator and column. The operator specifies the type of SQL operation, and the column specifies the database column to filter.

Using `$this->rest()` to Access Additional Data

To handle these additional fields in your filter class, you need to ensure they are accessible via the `$this->rest()` method. Here is how you can achieve that:

```php
class ValueFilter extends AdvancedFilter
{
public function filter(RestifyRequest $request, Builder|Relation $query, $value)
{
$operator = $this->rest('operator');
$column = $this->rest('column');

$query->where($column, $operator, $value);
}

public function rules(Request $request): array
{
return [];
}
}
```

4 changes: 1 addition & 3 deletions src/Actions/DestructiveAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Actions;

abstract class DestructiveAction extends Action
{
}
abstract class DestructiveAction extends Action {}
3 changes: 1 addition & 2 deletions src/Bootstrap/Boot.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@

class Boot
{
public function __construct(

Check failure on line 10 in src/Bootstrap/Boot.php

View workflow job for this annotation

GitHub Actions / psalm

PossiblyUnusedMethod

src/Bootstrap/Boot.php:10:21: PossiblyUnusedMethod: Cannot find any calls to method Binaryk\LaravelRestify\Bootstrap\Boot::__construct (see https://psalm.dev/087)
private Request $request,
private RoutesBoot $routesBoot,
) {
}
) {}

public function boot(): void
{
Expand Down
3 changes: 1 addition & 2 deletions src/Bootstrap/BootRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ class BootRepository
/** * @var Repository */
public function __construct(
private string $repository
) {
}
) {}

public function boot(): void
{
Expand Down
3 changes: 1 addition & 2 deletions src/Events/AdvancedFiltersApplied.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,5 @@ public function __construct(
public Repository $repository,
public AdvancedFiltersCollection $advancedFiltersCollection,
public ?string $rawFilters = null,
) {
}
) {}
}
4 changes: 1 addition & 3 deletions src/Exceptions/CredentialsDoesntMatch.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,4 @@
/**
* @author Eduard Lupacescu <[email protected]>
*/
class CredentialsDoesntMatch extends Exception
{
}
class CredentialsDoesntMatch extends Exception {}
4 changes: 1 addition & 3 deletions src/Exceptions/Eloquent/EntityNotFoundException.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Exceptions\Eloquent;

class EntityNotFoundException extends \Exception
{
}
class EntityNotFoundException extends \Exception {}
4 changes: 1 addition & 3 deletions src/Exceptions/PasswordResetException.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,4 @@
/**
* @author Eduard Lupacescu <[email protected]>
*/
class PasswordResetException extends Exception
{
}
class PasswordResetException extends Exception {}
4 changes: 1 addition & 3 deletions src/Exceptions/PasswordResetInvalidTokenException.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,4 @@
/**
* @author Eduard Lupacescu <[email protected]>
*/
class PasswordResetInvalidTokenException extends Exception
{
}
class PasswordResetInvalidTokenException extends Exception {}
4 changes: 1 addition & 3 deletions src/Exceptions/UnauthenticateException.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,4 @@
/**
* @author Eduard Lupacescu <[email protected]>
*/
class UnauthenticateException extends Exception
{
}
class UnauthenticateException extends Exception {}
4 changes: 1 addition & 3 deletions src/Exceptions/UnverifiedUser.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,4 @@
/**
* @author Eduard Lupacescu <[email protected]>
*/
class UnverifiedUser extends Exception
{
}
class UnverifiedUser extends Exception {}
4 changes: 1 addition & 3 deletions src/Fields/BaseField.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Fields;

abstract class BaseField
{
}
abstract class BaseField {}
4 changes: 1 addition & 3 deletions src/Fields/HasField.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Fields;

class HasField extends EagerField
{
}
class HasField extends EagerField {}
4 changes: 1 addition & 3 deletions src/Fields/MorphMany.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Fields;

class MorphMany extends HasMany
{
}
class MorphMany extends HasMany {}
4 changes: 1 addition & 3 deletions src/Fields/MorphOne.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Fields;

class MorphOne extends BelongsTo
{
}
class MorphOne extends BelongsTo {}
4 changes: 1 addition & 3 deletions src/Fields/MorphToMany.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Fields;

class MorphToMany extends BelongsToMany
{
}
class MorphToMany extends BelongsToMany {}
5 changes: 5 additions & 0 deletions src/Filters/AdvancedFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,10 @@ protected function input(?string $key = null, $default = null)
return data_get($this->dataObject->value, $key, $default);
}

protected function rest(?string $key = null, $default = null)
{
return data_get($this->dataObject->rest, $key, $default);
}

abstract public function rules(Request $request): array;
}
5 changes: 5 additions & 0 deletions src/Filters/AdvancedFilterPayloadDataObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@

class AdvancedFilterPayloadDataObject extends Data
{
public array $rest;

public function __construct(
public string $key,
public mixed $value,
array $rest = []

) {
$this->rest = $rest;
}
}
13 changes: 10 additions & 3 deletions src/Filters/AdvancedFiltersCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,17 @@ public static function collectQueryFilters(RestifyRequest $request, Repository $

$advancedFilter = clone $advancedFilter;

$key = data_get($queryFilter, 'key');
$value = data_get($queryFilter, 'value');
unset($queryFilter['key'], $queryFilter['value']);

return $advancedFilter->resolve($request, $dto = new AdvancedFilterPayloadDataObject(
key: data_get($queryFilter, 'key'),
value: data_get($queryFilter, 'value'),
))->validatePayload($request, $dto);
$key,
$value,
$queryFilter,
))
->withMeta($queryFilter['meta'] ?? [])
->validatePayload($request, $dto);
})
->filter();
}
Expand Down
4 changes: 1 addition & 3 deletions src/Filters/Filter.php
Original file line number Diff line number Diff line change
Expand Up @@ -259,9 +259,7 @@ public function dd(): self
return $this;
}

protected function booted()
{
}
protected function booted() {}

protected function getType(): string
{
Expand Down
4 changes: 1 addition & 3 deletions src/Filters/FilterPayload.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Filters;

interface FilterPayload
{
}
interface FilterPayload {}
4 changes: 1 addition & 3 deletions src/Filters/FiltersCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,4 @@
*
* @extends \Illuminate\Support\Collection<TKey, TValue>
*/
class FiltersCollection extends Collection
{
}
class FiltersCollection extends Collection {}
3 changes: 1 addition & 2 deletions src/Filters/PaginationDataObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,5 @@ class PaginationDataObject extends Data
public function __construct(
public int|string|null $perPage,
public int|string|null $page,
) {
}
) {}
}
4 changes: 1 addition & 3 deletions src/Filters/RelatedQueryCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,4 @@
*
* @extends \Illuminate\Support\Collection<TKey, TValue>
*/
class RelatedQueryCollection extends Collection
{
}
class RelatedQueryCollection extends Collection {}
4 changes: 1 addition & 3 deletions src/Http/Controllers/RepositoryController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Controllers;

class RepositoryController extends RestController
{
}
class RepositoryController extends RestController {}
4 changes: 1 addition & 3 deletions src/Http/Requests/GlobalSearchRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class GlobalSearchRequest extends RestifyRequest
{
}
class GlobalSearchRequest extends RestifyRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/IndexRepositoryActionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class IndexRepositoryActionRequest extends ActionRequest
{
}
class IndexRepositoryActionRequest extends ActionRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/ProfileRequestRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class ProfileRequestRequest extends RepositoryShowRequest
{
}
class ProfileRequestRequest extends RepositoryShowRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/RepositoryActionRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class RepositoryActionRequest extends ActionRequest
{
}
class RepositoryActionRequest extends ActionRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/RepositoryDestroyBulkRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class RepositoryDestroyBulkRequest extends RestifyRequest
{
}
class RepositoryDestroyBulkRequest extends RestifyRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/RepositoryDestroyRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class RepositoryDestroyRequest extends RestifyRequest
{
}
class RepositoryDestroyRequest extends RestifyRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/RepositoryFiltersRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class RepositoryFiltersRequest extends RestifyRequest
{
}
class RepositoryFiltersRequest extends RestifyRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/RepositoryGetterRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class RepositoryGetterRequest extends GetterRequest
{
}
class RepositoryGetterRequest extends GetterRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/RepositoryIndexRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class RepositoryIndexRequest extends RestifyRequest
{
}
class RepositoryIndexRequest extends RestifyRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/RepositoryPatchRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class RepositoryPatchRequest extends RepositoryUpdateRequest
{
}
class RepositoryPatchRequest extends RepositoryUpdateRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/RepositoryShowRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class RepositoryShowRequest extends RestifyRequest
{
}
class RepositoryShowRequest extends RestifyRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/RepositoryStoreRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class RepositoryStoreRequest extends RestifyRequest
{
}
class RepositoryStoreRequest extends RestifyRequest {}
4 changes: 1 addition & 3 deletions src/Http/Requests/RepositoryUpdateRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Binaryk\LaravelRestify\Http\Requests;

class RepositoryUpdateRequest extends RestifyRequest
{
}
class RepositoryUpdateRequest extends RestifyRequest {}
Loading
Loading