Skip to content

Commit

Permalink
9.2.0 (#609)
Browse files Browse the repository at this point in the history
* feat: add advanced filters meta payload

* Fix styling

* feat: handle additional payload for advanced filters

* fix: wip

---------

Co-authored-by: binaryk <[email protected]>
  • Loading branch information
binaryk and binaryk authored Jul 1, 2024
1 parent fb36195 commit 7145785
Show file tree
Hide file tree
Showing 60 changed files with 208 additions and 172 deletions.
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 @@ -10,8 +10,7 @@ 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)

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

0 comments on commit 7145785

Please sign in to comment.