diff --git a/src/Controller/WatchlistController.php b/src/Controller/WatchlistController.php index 16b59a9..556f9b9 100644 --- a/src/Controller/WatchlistController.php +++ b/src/Controller/WatchlistController.php @@ -11,7 +11,6 @@ use App\Repository\DomainRepository; use App\Repository\WatchlistRepository; use App\Service\CalendarService; use App\Service\RDAPService; -use Doctrine\Common\Collections\Collection; use Eluceo\iCal\Domain\Entity\Calendar; use Eluceo\iCal\Presentation\Component\Property; use Eluceo\iCal\Presentation\Component\Property\Value\TextValue; @@ -36,23 +35,6 @@ class WatchlistController extends AbstractController ) { } - #[Route( - path: '/api/watchlists', - name: 'watchlist_get_all_mine', - defaults: [ - '_api_resource_class' => Watchlist::class, - '_api_operation_name' => 'get_all_mine', - ], - methods: ['GET'] - )] - public function getWatchlists(): Collection - { - /** @var User $user */ - $user = $this->getUser(); - - return $user->getWatchlists(); - } - /** * @throws ParseException * @throws EofException diff --git a/src/Entity/Watchlist.php b/src/Entity/Watchlist.php index f083fde..5f46d08 100644 --- a/src/Entity/Watchlist.php +++ b/src/Entity/Watchlist.php @@ -10,6 +10,7 @@ use ApiPlatform\Metadata\Patch; use ApiPlatform\Metadata\Post; use ApiPlatform\Metadata\Put; use App\Repository\WatchlistRepository; +use App\State\MyWatchlistsProvider; use App\State\WatchlistUpdateProcessor; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; @@ -25,7 +26,6 @@ use Symfony\Component\Validator\Constraints as Assert; shortName: 'Watchlist', operations: [ new GetCollection( - routeName: 'watchlist_get_all_mine', normalizationContext: [ 'groups' => [ 'watchlist:list', @@ -34,6 +34,7 @@ use Symfony\Component\Validator\Constraints as Assert; ], ], name: 'get_all_mine', + provider: MyWatchlistsProvider::class, ), new GetCollection( uriTemplate: '/tracked', diff --git a/src/Repository/WatchlistRepository.php b/src/Repository/WatchlistRepository.php index b2cb5f6..632a76a 100644 --- a/src/Repository/WatchlistRepository.php +++ b/src/Repository/WatchlistRepository.php @@ -2,6 +2,7 @@ namespace App\Repository; +use App\Entity\User; use App\Entity\Watchlist; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; @@ -33,6 +34,24 @@ class WatchlistRepository extends ServiceEntityRepository ->getQuery()->execute(); } + /** + * @return Watchlist[] + */ + public function fetchWatchlistsForUser(User $user): array + { + return $this->createQueryBuilder('w') + ->addSelect('d') + ->addSelect('e') + ->addSelect('p') + ->leftJoin('w.domains', 'd') + ->leftJoin('d.events', 'e') + ->leftJoin('d.domainPurchases', 'p') + ->where('w.user = :user') + ->setParameter('user', $user) + ->getQuery() + ->getResult(); + } + // /** // * @return Watchlist[] Returns an array of Watchlist objects // */ diff --git a/src/State/MyWatchlistsProvider.php b/src/State/MyWatchlistsProvider.php new file mode 100644 index 0000000..c92b3d8 --- /dev/null +++ b/src/State/MyWatchlistsProvider.php @@ -0,0 +1,24 @@ +security->getUser(); + + return $this->watchlistRepository->fetchWatchlistsForUser($user); + } +}