support LIKE filtering for part lot user_barcode

This commit is contained in:
MayNiklas 2026-03-06 09:57:48 +01:00
parent 5a6b270525
commit b6717f8c0e
2 changed files with 14 additions and 3 deletions

View file

@ -27,7 +27,6 @@ use ApiPlatform\Doctrine\Orm\Filter\BooleanFilter;
use ApiPlatform\Doctrine\Orm\Filter\DateFilter; use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
use ApiPlatform\Doctrine\Orm\Filter\OrderFilter; use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Doctrine\Orm\Filter\RangeFilter; use ApiPlatform\Doctrine\Orm\Filter\RangeFilter;
use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Metadata\ApiFilter; use ApiPlatform\Metadata\ApiFilter;
use ApiPlatform\Metadata\ApiProperty; use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource; use ApiPlatform\Metadata\ApiResource;
@ -82,11 +81,10 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
denormalizationContext: ['groups' => ['part_lot:write', 'api:basic:write'], 'openapi_definition_name' => 'Write'], denormalizationContext: ['groups' => ['part_lot:write', 'api:basic:write'], 'openapi_definition_name' => 'Write'],
)] )]
#[ApiFilter(PropertyFilter::class)] #[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["description", "comment"])] #[ApiFilter(LikeFilter::class, properties: ["description", "comment", "user_barcode"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)] #[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
#[ApiFilter(BooleanFilter::class, properties: ['instock_unknown', 'needs_refill'])] #[ApiFilter(BooleanFilter::class, properties: ['instock_unknown', 'needs_refill'])]
#[ApiFilter(RangeFilter::class, properties: ['amount'])] #[ApiFilter(RangeFilter::class, properties: ['amount'])]
#[ApiFilter(SearchFilter::class, properties: ['user_barcode' => 'exact'])]
#[ApiFilter(OrderFilter::class, properties: ['description', 'comment', 'addedDate', 'lastModified'])] #[ApiFilter(OrderFilter::class, properties: ['description', 'comment', 'addedDate', 'lastModified'])]
class PartLot extends AbstractDBElement implements TimeStampableInterface, NamedElementInterface class PartLot extends AbstractDBElement implements TimeStampableInterface, NamedElementInterface
{ {

View file

@ -60,6 +60,19 @@ final class PartLotsEndpointTest extends CrudEndpointTestCase
self::assertSame('/api/part_lots/2', $json['hydra:member'][0]['@id']); self::assertSame('/api/part_lots/2', $json['hydra:member'][0]['@id']);
} }
public function testFilterByUserBarcodeUsingWildcard(): void
{
$response = self::createAuthenticatedClient()->request('GET', '/api/part_lots?user_barcode=lot2_%');
self::assertResponseIsSuccessful();
self::assertJsonContains([
'hydra:totalItems' => 1,
]);
$json = $response->toArray();
self::assertSame('/api/part_lots/2', $json['hydra:member'][0]['@id']);
}
public function testCreateItem(): void public function testCreateItem(): void
{ {
$this->_testPostItem([ $this->_testPostItem([