src/Domain/Entity/Paywall.php line 59

Open in your IDE?
  1. <?php
  2. namespace App\Domain\Entity;
  3. use ApiPlatform\Metadata\ApiResource;
  4. use ApiPlatform\Metadata\Delete;
  5. use ApiPlatform\Metadata\Get;
  6. use ApiPlatform\Metadata\GetCollection;
  7. use ApiPlatform\Metadata\Patch;
  8. use ApiPlatform\Metadata\Post;
  9. use ApiPlatform\Metadata\Put;
  10. use App\Application\ApiResources\State\Provider\PaywallProvider;
  11. use App\Application\Controller\Api\Paywall\PaywallDuplicateAction;
  12. use App\Application\Controller\Api\Paywall\PaywallLogsAction;
  13. use App\Domain\Entity\Behavior\Identifiable;
  14. use App\Domain\Entity\Translation\PaywallTranslation;
  15. use Doctrine\Common\Collections\ArrayCollection;
  16. use Doctrine\Common\Collections\Collection;
  17. use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
  18. use Gedmo\Timestampable\Traits\Timestampable;
  19. use Locastic\ApiPlatformTranslationBundle\Model\AbstractTranslatable;
  20. /**
  21.  * Class Paywall
  22.  * @package App\Domain\Entity
  23.  */
  24. #[ApiResource(
  25.     operations: [
  26.         new Delete(security"is_granted('ROLE_ADMIN')"),
  27.         new GetCollection(paginationEnabledfalsefilters: [
  28.             'paywall.boolean_filter',
  29.             'paywall.exists_filter',
  30.             'paywall.order_filter',
  31.             'paywall.query_filter',
  32.             'soft_delete_filter',
  33.         ]),
  34.         new Get(
  35.             providerPaywallProvider::class,
  36.             uriTemplate'/paywall/current',
  37.         ),
  38.         new Get(),
  39.         new Post(security"is_granted('ROLE_ADMIN')"),
  40.         new Put(security"is_granted('ROLE_ADMIN')"),
  41.         new Patch(security"is_granted('ROLE_ADMIN')"),
  42.         new Get(
  43.             security"is_granted('ROLE_ADMIN')",
  44.             uriTemplate'/paywalls/{uuid}/duplicate',
  45.             controllerPaywallDuplicateAction::class,
  46.         ),
  47.         new Get(
  48.             security"is_granted('ROLE_ADMIN')",
  49.             uriTemplate'/paywalls/{uuid}/logs',
  50.             controllerPaywallLogsAction::class,
  51.         ),
  52.     ],
  53.     normalizationContext: ['groups' => ['paywall_read']],
  54.     denormalizationContext: ['groups' => ['paywall_write']]
  55. )]
  56. class Paywall extends AbstractTranslatable
  57. {
  58.     use Identifiable;
  59.     use SoftDeleteable;
  60.     use Timestampable;
  61.     public const DISCOUNTED   'discounted';
  62.     public const FREE_3_DAYS   'free_3_days';
  63.     public const NEW_SUBSCRIBERS   'new_subscribers';
  64.     public const NEW_3_DAYS_SUBSCRIBERS   'new_3_days_subscribers';
  65.     public const OLD_PREMIUM   'old_premium';
  66.     public function __construct(
  67.         public string $name,
  68.         public \DateTime $start,
  69.         public \DateTime $end,
  70.         public string $type,
  71.         public bool $isActive false,
  72.     ) {
  73.         parent::__construct();
  74.         $this->translations = new ArrayCollection();
  75.     }
  76.     /** @var Collection<PaywallTranslation> */
  77.     protected Collection $translations;
  78.     public function createTranslation(): PaywallTranslation
  79.     {
  80.         return new PaywallTranslation();
  81.     }
  82. }