src/Point/Doctrine/Entity/Transaction.php line 47

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Point\Doctrine\Entity;
  4. use ApiPlatform\Core\Annotation\ApiFilter;
  5. use ApiPlatform\Core\Annotation\ApiProperty;
  6. use ApiPlatform\Core\Annotation\ApiResource;
  7. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  8. use App\Order\Doctrine\Entity\Detail;
  9. use App\Order\Doctrine\Entity\Order;
  10. use App\Point\Doctrine\Repository\TransactionRepository;
  11. use DateTimeImmutable;
  12. use Doctrine\ORM\Mapping\Column;
  13. use Doctrine\ORM\Mapping\DiscriminatorColumn;
  14. use Doctrine\ORM\Mapping\DiscriminatorMap;
  15. use Doctrine\ORM\Mapping\Entity;
  16. use Doctrine\ORM\Mapping\GeneratedValue;
  17. use Doctrine\ORM\Mapping\Id;
  18. use Doctrine\ORM\Mapping\InheritanceType;
  19. use Doctrine\ORM\Mapping\JoinColumn;
  20. use Doctrine\ORM\Mapping\ManyToOne;
  21. use Doctrine\ORM\Mapping\OneToOne;
  22. use Doctrine\ORM\Mapping\PrePersist;
  23. use Doctrine\ORM\Mapping\Table;
  24. use Symfony\Component\Serializer\Annotation\Groups;
  25. use Symfony\Component\Validator\Constraints\GreaterThan;
  26. use Symfony\Component\Validator\Constraints\NotBlank;
  27. use Symfony\Component\Validator\Constraints\NotNull;
  28. #[ApiResource(
  29.     collectionOperations: ['get'],
  30.     itemOperations: ['get' => ['security' => 'is_granted("item", object)']],
  31.     normalizationContext: ['groups' => ['read']]
  32. )]
  33. #[ApiFilter(SearchFilter::class, properties: ['account' => 'exact'])]
  34. #[Entity(repositoryClassTransactionRepository::class)]
  35. #[Table(name'`point_transaction`')]
  36. #[InheritanceType('SINGLE_TABLE')]
  37. #[DiscriminatorColumn(name'discr'type'string')]
  38. #[DiscriminatorMap([
  39.     'debit' => Debit::class,
  40.     'credit' => Credit::class,
  41.     'purchase' => Purchase::class,
  42. ])]
  43. abstract class Transaction
  44. {
  45.     #[Id]
  46.     #[Column(type'integer')]
  47.     #[GeneratedValue]
  48.     #[Groups('read')]
  49.     protected ?int $id null;
  50.     #[Column(type'datetime_immutable')]
  51.     #[Groups(['read''write'])]
  52.     protected DateTimeImmutable $createdAt;
  53.     #[ManyToOne(targetEntityAccount::class, inversedBy'transactions')]
  54.     #[JoinColumn(nullablefalseonDelete'CASCADE')]
  55.     #[NotNull]
  56.     #[Groups(['read''write'])]
  57.     #[ApiProperty(readableLinkfalse)]
  58.     protected Account $account;
  59.     #[ManyToOne(targetEntityWallet::class, inversedBy'transactions')]
  60.     #[JoinColumn(onDelete'SET NULL')]
  61.     #[Groups('read')]
  62.     #[ApiProperty(readableLinkfalse)]
  63.     protected ?Wallet $wallet null;
  64.     #[Column(type'integer')]
  65.     #[NotBlank]
  66.     #[GreaterThan(0)]
  67.     #[Groups(['read''write'])]
  68.     protected int $points 0;
  69.     #[ManyToOne(targetEntityOperation::class)]
  70.     #[JoinColumn(nullablefalse)]
  71.     #[Groups('read')]
  72.     #[ApiProperty(readableLinkfalse)]
  73.     protected Operation $operation;
  74.     #[OneToOne(targetEntityOrder::class)]
  75.     private ?Order $order null;
  76.     #[OneToOne(targetEntityDetail::class)]
  77.     private ?Detail $detail null;
  78.     public function __construct()
  79.     {
  80.         $this->createdAt = new DateTimeImmutable();
  81.     }
  82.     public function getId(): ?int
  83.     {
  84.         return $this->id;
  85.     }
  86.     #[Groups('read')]
  87.     public function getReference(): string
  88.     {
  89.         return sprintf('%08d'$this->id);
  90.     }
  91.     public function getCreatedAt(): DateTimeImmutable
  92.     {
  93.         return $this->createdAt;
  94.     }
  95.     public function setCreatedAt(DateTimeImmutable $createdAt): void
  96.     {
  97.         $this->createdAt $createdAt;
  98.     }
  99.     public function getAccount(): Account
  100.     {
  101.         return $this->account;
  102.     }
  103.     public function setAccount(Account $account): void
  104.     {
  105.         $this->account $account;
  106.     }
  107.     public function getWallet(): ?Wallet
  108.     {
  109.         return $this->wallet;
  110.     }
  111.     public function setWallet(?Wallet $wallet): void
  112.     {
  113.         $this->wallet $wallet;
  114.     }
  115.     public function getPoints(): int
  116.     {
  117.         return $this->points;
  118.     }
  119.     public function setPoints(int $points): void
  120.     {
  121.         $this->points $points;
  122.     }
  123.     public function getOperation(): Operation
  124.     {
  125.         return $this->operation;
  126.     }
  127.     public function setOperation(Operation $operation): void
  128.     {
  129.         $this->operation $operation;
  130.     }
  131.     #[Groups(['read'])]
  132.     #[ApiProperty(readableLinkfalse)]
  133.     public function getTransfer(): ?Transfer
  134.     {
  135.         return null;
  136.     }
  137.     public function getOrder(): ?Order
  138.     {
  139.         return $this->order;
  140.     }
  141.     public function setOrder(?Order $order): void
  142.     {
  143.         $this->order $order;
  144.     }
  145.     public function getDetail(): ?Detail
  146.     {
  147.         return $this->detail;
  148.     }
  149.     public function setDetail(?Detail $detail): void
  150.     {
  151.         $this->detail $detail;
  152.     }
  153. }