src/Domain/Entity/MobileAd.php line 64

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Domain\Entity;
  4. use ApiPlatform\Metadata\ApiResource;
  5. use ApiPlatform\Metadata\Delete;
  6. use ApiPlatform\Metadata\Get;
  7. use ApiPlatform\Metadata\GetCollection;
  8. use ApiPlatform\Metadata\Post;
  9. use ApiPlatform\Metadata\Put;
  10. use App\Application\ApiResources\State\Provider\MobileAdProvider;
  11. use App\Application\Controller\Api\DuplicateAction;
  12. use App\Application\Controller\Api\MobileAd\MobileAdClickAction;
  13. use App\Domain\Entity\Behavior\Identifiable;
  14. use App\Domain\Entity\PointOfInterest\Revision;
  15. use DateTime;
  16. use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
  17. use Gedmo\Timestampable\Traits\Timestampable;
  18. #[ApiResource(
  19.     shortName'mobile',
  20.     operations: [
  21.         new Delete(security"is_granted('ROLE_ADMIN')"),
  22.         new GetCollection(order: ['createdAt' => 'DESC'], security"is_granted('ROLE_ADMIN')",
  23.             filters: [
  24.                 'mobile_ad.query_filter',
  25.                 'soft_delete_filter',
  26.             ],
  27.         ),
  28.         new Get(
  29.             uriTemplate'/mobiles/{uuid}/click',
  30.             requirements: [
  31.                 'uuid' => '^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$',
  32.             ],
  33.             controllerMobileAdClickAction::class,
  34.         ),
  35.         new Get(
  36.             requirements: [
  37.                 'uuid' => '^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$',
  38.             ],
  39.             security"is_granted('ROLE_ADMIN')",
  40.         ),
  41.         new Get(
  42.             uriTemplate'/mobiles/current/banner',
  43.             providerMobileAdProvider::class,
  44.         ),
  45.         new Get(
  46.             uriTemplate'/mobiles/current/map',
  47.             providerMobileAdProvider::class,
  48.         ),
  49.         new Post(security"is_granted('ROLE_ADMIN')"),
  50.         new Post(
  51.             uriTemplate'/mobiles/{uuid}/duplicate',
  52.             controllerDuplicateAction::class,
  53.             security"is_granted('ROLE_ADMIN')",
  54.         ),
  55.         new Put(security"is_granted('ROLE_ADMIN')"),
  56.     ],
  57.     normalizationContext: ['groups' => ['mobile_ad_read']],
  58.     denormalizationContext: ['groups' => ['mobile_ad_write']]
  59. )]
  60. class MobileAd
  61. {
  62.     use Identifiable;
  63.     use SoftDeleteable;
  64.     use Timestampable;
  65.     public static string $IMAGE_TYPE_BANNER 'banner';
  66.     public static string $IMAGE_TYPE_FULL 'full';
  67.     public static string $TYPE_GPS 'gps';
  68.     public static string $TYPE_POINT_OF_INTEREST 'point_of_interest';
  69.     public static string $TYPE_TELEPHONE 'telephone';
  70.     public static string $TYPE_URL 'url';
  71.     public static string $TYPE_VIDEO 'video';
  72.     public static string $TYPE_REDIRECT 'redirect';
  73.     public function __construct(
  74.         public string $name,
  75.         public DateTime $startDate,
  76.         public DateTime $endDate,
  77.         public string $status,
  78.         public string $type,
  79.         public string $imageType,
  80.         public Locale $target,
  81.         public Media $photo,
  82.         public bool $useGps,
  83.         public ?float $useGpsLat,
  84.         public ?float $useGpsLng,
  85.         public ?float $useGpsRadius,
  86.         public ?string $url,
  87.         public ?PointOfInterest $pointOfInterest,
  88.         public ?float $lat,
  89.         public ?float $lng,
  90.         public ?string $video,
  91.         public ?string $phone,
  92.         public ?string $redirectName,
  93.         public ?string $redirectUuid,
  94.         public ?string $redirectSlideIndex,
  95.         public int $views 0,
  96.         public int $clicks 0,
  97.         // ! DTO ONLY
  98.         public ?Revision $revision null,
  99.     ) {}
  100.     public function __clone()
  101.     {
  102.         $this->id null;
  103.         $this->uuid null;
  104.         $this->createdAt null;
  105.         $this->updatedAt null;
  106.         return $this;
  107.     }
  108.     public function getImageSize(?string $imageType): array | null
  109.     {
  110.         return match ($imageType ?: $this->imageType) {
  111.             self::$IMAGE_TYPE_FULL => [10801920],
  112.             self::$IMAGE_TYPE_BANNER => [700100],
  113.             default => null,
  114.         };
  115.     }
  116. }