PlaceSearchItem.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\ApiResources\Search;
  4. use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
  5. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  6. use ApiPlatform\Metadata\ApiFilter;
  7. use ApiPlatform\Metadata\ApiProperty;
  8. use ApiPlatform\Metadata\ApiResource;
  9. use ApiPlatform\Metadata\Get;
  10. use ApiPlatform\Metadata\GetCollection;
  11. use App\ApiResources\ApiResourcesInterface;
  12. use App\Entity\Organization\Organization;
  13. use App\Entity\Place\Place;
  14. use App\Filter\ApiPlatform\Utils\InFilter;
  15. use App\State\Provider\Search\PlaceSearchItemProvider;
  16. use Symfony\Component\ObjectMapper\Attribute\Map;
  17. /**
  18. * Classe resource pour les recherches de lieux.
  19. */
  20. #[ApiResource(
  21. operations: [
  22. new Get(
  23. uriTemplate: '/search/places/{id}',
  24. security: 'object.organization == user.getOrganization()'
  25. ),
  26. new GetCollection(
  27. uriTemplate: '/search/places'
  28. ),
  29. ],
  30. provider: PlaceSearchItemProvider::class,
  31. )]
  32. #[ApiFilter(filterClass: SearchFilter::class, properties: ['name' => 'ipartial'])]
  33. #[ApiFilter(filterClass: OrderFilter::class, properties: ['name' => 'ASC'])]
  34. #[ApiFilter(filterClass: InFilter::class, properties: ['id'])]
  35. #[Map(source: Place::class)]
  36. class PlaceSearchItem implements ApiResourcesInterface
  37. {
  38. #[ApiProperty(identifier: true)]
  39. public ?int $id = null;
  40. public string $name;
  41. public Organization $organization;
  42. }