diff --git a/migrations/Version20240728191337.php b/migrations/Version20240728191337.php new file mode 100644 index 0000000..982b1f0 --- /dev/null +++ b/migrations/Version20240728191337.php @@ -0,0 +1,35 @@ +addSql('CREATE TABLE connector (provider VARCHAR(255) NOT NULL, user_id INT NOT NULL, auth_data JSON NOT NULL, PRIMARY KEY(provider, user_id))'); + $this->addSql('CREATE INDEX IDX_148C456EA76ED395 ON connector (user_id)'); + $this->addSql('ALTER TABLE connector ADD CONSTRAINT FK_148C456EA76ED395 FOREIGN KEY (user_id) REFERENCES "user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('ALTER TABLE connector DROP CONSTRAINT FK_148C456EA76ED395'); + $this->addSql('DROP TABLE connector'); + } +} diff --git a/src/Config/ConnectorProvider.php b/src/Config/ConnectorProvider.php new file mode 100644 index 0000000..515afa8 --- /dev/null +++ b/src/Config/ConnectorProvider.php @@ -0,0 +1,9 @@ +provider; + } + + public function setProvider(ConnectorProvider $provider): static + { + $this->provider = $provider; + + return $this; + } + + public function getUser(): ?User + { + return $this->user; + } + + public function setUser(?User $user): static + { + $this->user = $user; + + return $this; + } + + public function getAuthData(): array + { + return $this->authData; + } + + public function setAuthData(array $authData): static + { + $this->authData = $authData; + + return $this; + } + +} diff --git a/src/Entity/User.php b/src/Entity/User.php index bcc204f..79a3710 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -58,9 +58,16 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface #[ORM\OneToMany(targetEntity: WatchList::class, mappedBy: 'user', orphanRemoval: true)] private Collection $watchLists; + /** + * @var Collection + */ + #[ORM\OneToMany(targetEntity: Connector::class, mappedBy: 'userr', orphanRemoval: true)] + private Collection $connectors; + public function __construct() { $this->watchLists = new ArrayCollection(); + $this->connectors = new ArrayCollection(); } public function getId(): ?int @@ -168,4 +175,34 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface return $this; } + + /** + * @return Collection + */ + public function getConnectors(): Collection + { + return $this->connectors; + } + + public function addConnector(Connector $connector): static + { + if (!$this->connectors->contains($connector)) { + $this->connectors->add($connector); + $connector->setUserr($this); + } + + return $this; + } + + public function removeConnector(Connector $connector): static + { + if ($this->connectors->removeElement($connector)) { + // set the owning side to null (unless already changed) + if ($connector->getUserr() === $this) { + $connector->setUserr(null); + } + } + + return $this; + } } diff --git a/src/Repository/ConnectorRepository.php b/src/Repository/ConnectorRepository.php new file mode 100644 index 0000000..a7645e1 --- /dev/null +++ b/src/Repository/ConnectorRepository.php @@ -0,0 +1,43 @@ + + */ +class ConnectorRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Connector::class); + } + + // /** + // * @return Connector[] Returns an array of Connector objects + // */ + // public function findByExampleField($value): array + // { + // return $this->createQueryBuilder('c') + // ->andWhere('c.exampleField = :val') + // ->setParameter('val', $value) + // ->orderBy('c.id', 'ASC') + // ->setMaxResults(10) + // ->getQuery() + // ->getResult() + // ; + // } + + // public function findOneBySomeField($value): ?Connector + // { + // return $this->createQueryBuilder('c') + // ->andWhere('c.exampleField = :val') + // ->setParameter('val', $value) + // ->getQuery() + // ->getOneOrNullResult() + // ; + // } +}