<?php
namespace App\Domain\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Delete;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Post;
use ApiPlatform\Metadata\Put;
use App\Application\ApiResources\State\Processor\OwnershipRequest\OwnershipRequestCreateProcessor;
use App\Application\Controller\Api\OwnershipRequest\GetAcceptAction;
use App\Application\Controller\Api\OwnershipRequest\GetCollectionAction;
use App\Application\Controller\Api\OwnershipRequest\GetRefuseAction;
use App\Domain\Entity\Behavior\Identifiable;
use Gedmo\Timestampable\Traits\TimestampableEntity;
/**
* Class OwnershipRequest
* @package App\Domain\Entity
*/
#[ApiResource(
operations : [
new Delete(security: "is_granted('ROLE_ADMIN')"),
new Get(),
new Get(
uriTemplate: '/ownership_requests/{uuid}/accept',
controller : GetAcceptAction::class,
security : "is_granted('ROLE_ADMIN')",
name : 'get_accept'
),
new Get(
uriTemplate: '/ownership_requests/{uuid}/refuse',
controller : GetRefuseAction::class,
security : "is_granted('ROLE_ADMIN')",
name : 'get_refuse'
),
new GetCollection(
controller : GetCollectionAction::class,
security : "is_granted('ROLE_ADMIN')"
),
new Post(
processor: OwnershipRequestCreateProcessor::class,
),
new Put(security: "is_granted('ROLE_ADMIN')")
],
normalizationContext : ['groups' => ['ownership_request_read']],
denormalizationContext: ['groups' => ['ownership_request_write']]
)]
class OwnershipRequest
{
use Identifiable;
use TimestampableEntity;
public function __construct(
public Person $person,
public PointOfInterest $pointOfInterest,
public ?\DateTime $acceptedAt = null,
public ?\DateTime $refusedAt = null
) {
}
}