src/Domain/Entity/PointOfInterest/Picture.php line 107

Open in your IDE?
  1. <?php
  2. namespace App\Domain\Entity\PointOfInterest;
  3. use ApiPlatform\Metadata\ApiResource;
  4. use ApiPlatform\Metadata\Delete;
  5. use ApiPlatform\Metadata\Get;
  6. use ApiPlatform\Metadata\GetCollection;
  7. use ApiPlatform\Metadata\Link;
  8. use ApiPlatform\Metadata\Post;
  9. use ApiPlatform\Metadata\Put;
  10. use App\Application\ApiResources\State\Processor\SetMultiplePicturesProcessor;
  11. use App\Application\ApiResources\State\Provider\CertifiedPictureProvider;
  12. use App\Application\ApiResources\State\Provider\PictureProvider;
  13. use App\Application\Controller\Api\Picture\DeleteAction;
  14. use App\Application\Controller\Api\Picture\GetMyPicturesAction;
  15. use App\Application\Controller\Api\Picture\PostMultiplePicturesAction;
  16. use App\Application\Controller\Api\Picture\RotatePictureAction;
  17. use App\Application\Controller\Api\Picture\UpdatePicturesPositionAction;
  18. use App\Application\Dto\Picture\PictureActionInput;
  19. use App\Application\Dto\Picture\PictureOutput;
  20. use App\Application\Dto\Picture\PostMultiplePicturesInput;
  21. use App\Application\Dto\Picture\PostUpdatePositionInput;
  22. use App\Application\Dto\Picture\PutPicturesPositionCollectionInput;
  23. use App\Application\Dto\Picture\PutPicturesPositionInput;
  24. use App\Domain\Entity\Behavior\Identifiable;
  25. use App\Domain\Entity\Media;
  26. use App\Domain\Entity\Person;
  27. use App\Domain\Entity\PointOfInterest;
  28. use DateTime;
  29. use Gedmo\Timestampable\Traits\Timestampable;
  30. /**
  31.  * Class RevisionPicture
  32.  *
  33.  * @package App\Domain\Entity\PointOfInterest
  34.  */
  35. #[ApiResource(
  36.     operations: [
  37.         new Delete(
  38.             controllerDeleteAction::class,
  39.             security"is_granted('ROLE_ADMIN') or object.author.id == user.id",
  40.         ),
  41.         new GetCollection(
  42.             filters: ['picture.search_filter']
  43.         ),
  44.         new GetCollection(
  45.             uriTemplate'/pictures/uncertified_list',
  46.             security"is_granted('ROLE_USER')",
  47.             filters: ['picture.search_filter'],
  48.             outputPictureOutput::class,
  49.             providerPictureProvider::class
  50.         ),
  51.         new GetCollection(
  52.             uriTemplate'/pictures/certified_list',
  53.             paginationEnabledfalse,
  54.             filters: ['picture.search_filter''picture.order_filter'],
  55.             outputPictureOutput::class,
  56.             providerCertifiedPictureProvider::class,
  57.         ),
  58.         new GetCollection(
  59.             uriTemplate'/pictures/mine',
  60.             controllerGetMyPicturesAction::class,
  61.             name'get_my_pictures'
  62.         ),
  63.         new Get(),
  64.         new Post(
  65.             uriTemplate'/pictures/actions',
  66.             denormalizationContext: ['groups' => ['picture_action_input_write']],
  67.             security"is_granted('ROLE_ADMIN')",
  68.             inputPictureActionInput::class,
  69.             name'set_multiple_actions',
  70.             processorSetMultiplePicturesProcessor::class
  71.         ),
  72.         new Post(
  73.             uriTemplate'/pictures/multi',
  74.             controllerPostMultiplePicturesAction::class,
  75.             denormalizationContext: ['groups' => ['post_multiple_picture_input_write']],
  76.             inputPostMultiplePicturesInput::class,
  77.         ),
  78.         new Post(),
  79.         new Put(
  80.             uriTemplate'/pictures/{uuid}/rotate',
  81.             controllerRotatePictureAction::class,
  82.             security"is_granted('ROLE_ADMIN')",
  83.         ),
  84.         new Put(
  85.             uriTemplate'/pictures/update_position',
  86.             controllerUpdatePicturesPositionAction::class,
  87.             denormalizationContext: ['groups' => ['put_picture_position_input_write']],
  88.             security"is_granted('ROLE_ADMIN')",
  89.             inputPutPicturesPositionCollectionInput::class,
  90.         )
  91.     ],
  92.     normalizationContext: ['groups' => ['picture_read']],
  93.     denormalizationContext: ['groups' => ['picture_write']]
  94. )]
  95. #[ApiResource(
  96.     uriTemplate'/point_of_interests/{uuid}/pictures',
  97.     operations: [
  98.         new GetCollection(),
  99.     ],
  100.     uriVariables: [
  101.         'uuid' => new Link(fromProperty'pictures'fromClassPointOfInterest::class),
  102.     ]
  103. )]
  104. class Picture
  105. {
  106.     use Identifiable;
  107.     use Timestampable;
  108.     public const ACTION_DELETE 'delete';
  109.     public const PICTURE_AREA 'area';
  110.     public const PICTURE_PROXIMITY 'proximity';
  111.     public const PICTURE_UNCERTIFIED 'uncertified';
  112.     public function __construct(
  113.         public Media $media,
  114.         public PointOfInterest $pointOfInterest,
  115.         public string $type self::PICTURE_UNCERTIFIED,
  116.         public ?DateTime $validatedAt null,
  117.         public ?Person $author null,
  118.         public ?int $position 0,
  119.     ) {}
  120.     /**
  121.      * @return string|null
  122.      */
  123.     public function getFormattedValidatedAt(): string null
  124.     {
  125.         return $this->validatedAt !== null $this->validatedAt->format('d/m/Y') : $this->validatedAt;
  126.     }
  127.     /**
  128.      * @return int|null
  129.      */
  130.     public function getPosition(): int null
  131.     {
  132.         return $this->position;
  133.     }
  134.     /**
  135.      * @param int|null $position
  136.      */
  137.     public function setPosition(int null $position): void
  138.     {
  139.         $this->position $position;
  140.     }
  141. }