src/JanusHercules/Membership/Domain/Entity/FlexMembershipRecurrentJobSlot.php line 14

Open in your IDE?
  1. <?php
  2. namespace JanusHercules\Membership\Domain\Entity;
  3. use App\Entity\RecurrentJob;
  4. use App\Entity\User;
  5. use App\Utility\DatabaseIdGenerator;
  6. use Doctrine\DBAL\Types\Types;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use InvalidArgumentException;
  9. #[ORM\Entity]
  10. #[ORM\Table(name: 'flex_membership_recurrent_job_slots')]
  11. class FlexMembershipRecurrentJobSlot
  12. {
  13. public function __construct(
  14. User $user,
  15. ?RecurrentJob $recurrentJob = null
  16. ) {
  17. $this->user = $user;
  18. if (!is_null($recurrentJob) && $recurrentJob->isPlus()) {
  19. throw new InvalidArgumentException("Cannot set recurrent job '{$recurrentJob->getId()}' for flex membership slot because it is plus!");
  20. }
  21. $this->recurrentJob = $recurrentJob;
  22. }
  23. #[ORM\Id]
  24. #[ORM\GeneratedValue(strategy: 'CUSTOM')]
  25. #[ORM\CustomIdGenerator(class: DatabaseIdGenerator::class)]
  26. #[ORM\Column(
  27. type: Types::GUID,
  28. unique: true
  29. )]
  30. private ?string $id = null;
  31. public function getId(): ?string
  32. {
  33. return $this->id;
  34. }
  35. #[ORM\ManyToOne(
  36. targetEntity: User::class,
  37. cascade: ['persist'],
  38. inversedBy: 'recurrentJobSlots'
  39. )]
  40. #[ORM\JoinColumn(
  41. name: 'users_id',
  42. referencedColumnName: 'id',
  43. nullable: false,
  44. onDelete: 'CASCADE'
  45. )]
  46. private User $user;
  47. public function getUser(): User
  48. {
  49. return $this->user;
  50. }
  51. public function setUser(User $user): void
  52. {
  53. $this->user = $user;
  54. }
  55. #[ORM\OneToOne(
  56. inversedBy : 'slot',
  57. targetEntity: RecurrentJob::class,
  58. cascade : ['persist']
  59. )]
  60. #[ORM\JoinColumn(
  61. name : 'recurrent_jobs_id',
  62. referencedColumnName: 'id',
  63. nullable : true,
  64. onDelete : 'SET NULL'
  65. )]
  66. private ?RecurrentJob $recurrentJob;
  67. public function getRecurrentJob(): ?RecurrentJob
  68. {
  69. return $this->recurrentJob;
  70. }
  71. public function setRecurrentJob(?RecurrentJob $recurrentJob): void
  72. {
  73. if (!is_null($recurrentJob) && !is_null($joboffererProfile = $recurrentJob->getJoboffererProfile())) {
  74. if ($joboffererProfile->getUser()->getId() !== $this->user->getId()) {
  75. throw new InvalidArgumentException("Was asked to set recurrent job '{$recurrentJob->getId()}', but it belongs to user '{$joboffererProfile->getUser()->getId()}' and not to user '{$this->user->getId()}'.");
  76. }
  77. } elseif (!is_null($recurrentJob) && $recurrentJob->isPlus()) {
  78. throw new InvalidArgumentException("Was asked to set recurrent job '{$recurrentJob->getId()}', but recurrent job is already plus.");
  79. }
  80. $this->recurrentJob = $recurrentJob;
  81. }
  82. }