<?php
namespace App\Domain\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Delete;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Patch;
use ApiPlatform\Metadata\Post;
use ApiPlatform\Metadata\Put;
use App\Application\ApiResources\State\Provider\PaywallProvider;
use App\Application\Controller\Api\Paywall\PaywallDuplicateAction;
use App\Application\Controller\Api\Paywall\PaywallLogsAction;
use App\Domain\Entity\Behavior\Identifiable;
use App\Domain\Entity\Translation\PaywallTranslation;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
use Gedmo\Timestampable\Traits\Timestampable;
use Locastic\ApiPlatformTranslationBundle\Model\AbstractTranslatable;
/**
* Class Paywall
* @package App\Domain\Entity
*/
#[ApiResource(
operations: [
new Delete(security: "is_granted('ROLE_ADMIN')"),
new GetCollection(paginationEnabled: false, filters: [
'paywall.boolean_filter',
'paywall.exists_filter',
'paywall.order_filter',
'paywall.query_filter',
'soft_delete_filter',
]),
new Get(
provider: PaywallProvider::class,
uriTemplate: '/paywall/current',
),
new Get(),
new Post(security: "is_granted('ROLE_ADMIN')"),
new Put(security: "is_granted('ROLE_ADMIN')"),
new Patch(security: "is_granted('ROLE_ADMIN')"),
new Get(
security: "is_granted('ROLE_ADMIN')",
uriTemplate: '/paywalls/{uuid}/duplicate',
controller: PaywallDuplicateAction::class,
),
new Get(
security: "is_granted('ROLE_ADMIN')",
uriTemplate: '/paywalls/{uuid}/logs',
controller: PaywallLogsAction::class,
),
],
normalizationContext: ['groups' => ['paywall_read']],
denormalizationContext: ['groups' => ['paywall_write']]
)]
class Paywall extends AbstractTranslatable
{
use Identifiable;
use SoftDeleteable;
use Timestampable;
public const DISCOUNTED = 'discounted';
public const FREE_3_DAYS = 'free_3_days';
public const NEW_SUBSCRIBERS = 'new_subscribers';
public const NEW_3_DAYS_SUBSCRIBERS = 'new_3_days_subscribers';
public const OLD_PREMIUM = 'old_premium';
public function __construct(
public string $name,
public \DateTime $start,
public \DateTime $end,
public string $type,
public bool $isActive = false,
) {
parent::__construct();
$this->translations = new ArrayCollection();
}
/** @var Collection<PaywallTranslation> */
protected Collection $translations;
public function createTranslation(): PaywallTranslation
{
return new PaywallTranslation();
}
}