diff --git a/server/web_app/src/Controller/ItemController.php b/server/web_app/src/Controller/ItemController.php index ad855bfbfab543cfe3c7e9101da35ce4d5392a9d..c113d3cf5569c681e3dd9499d9e7d581c64862ca 100644 --- a/server/web_app/src/Controller/ItemController.php +++ b/server/web_app/src/Controller/ItemController.php @@ -2,17 +2,85 @@ namespace App\Controller; +use App\Repository\ItemRepository; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Attribute\Route; +use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; +use Symfony\Component\Validator\Validator\ValidatorInterface; + +#[Route('/items')] final class ItemController extends AbstractController { - #[Route('/item', name: 'app_item')] - public function index(): JsonResponse + private EntityManagerInterface $entityManager; + private ItemRepository $itemRepository; + private UserPasswordHasherInterface $passwordHasher; + private ValidatorInterface $validator; + public function __construct( + EntityManagerInterface $entityManager, + ItemRepository $itemRepository, + UserPasswordHasherInterface $passwordHasher, + ValidatorInterface $validator + ) { + $this->entityManager = $entityManager; + $this->itemRepository = $itemRepository; + $this->passwordHasher = $passwordHasher; + $this->validator = $validator; + } + + #[Route('', methods: ['GET'])] + public function getAllItems(): JsonResponse + { + $items = $this->itemRepository->findAllItems(); + + if (!$items) { + return new JsonResponse(['error' => 'Item not found'], Response::HTTP_NOT_FOUND); + } + + $itemArray = array_map(fn($item) => + [ + 'id' => $item->getId(), + 'wishList' => $item->getWishList(), + 'title' => $item->getTitle(), + 'description' =>$item->getDescription(), + 'price' =>$item->getPrice(), + 'purchaseUrl' =>$item->getPurchaseUrl(), + 'createdAt' => $item->getCreatedAt() + ] + , $items); + + return $this->json([ + 'items' => $itemArray, + 'path' => 'src/Controller/ItemController.php', + ]); + } + + #[Route('/{itemId}', methods: ['GET'])] + public function getItemsById($itemId): JsonResponse { + $item = $this->itemRepository->findOneById($itemId); + + if (!$item) { + return new JsonResponse(['error' => 'Item not found'], Response::HTTP_NOT_FOUND); + } + + $itemDTO = [ + 'id' => $item->getId(), + 'wishList' => $item->getWishList(), + 'title' => $item->getTitle(), + 'description' =>$item->getDescription(), + 'price' =>$item->getPrice(), + 'purchaseUrl' =>$item->getPurchaseUrl(), + 'isBought' =>$item->isBought(), + 'createdAt' => $item->getCreatedAt() + ]; + return $this->json([ - 'message' => 'Welcome to your new controller!', + 'user' => $itemDTO, 'path' => 'src/Controller/ItemController.php', ]); } diff --git a/server/web_app/src/Controller/UserController.php b/server/web_app/src/Controller/UserController.php index 170923b8835dbccdf89745766aa62f985e40d0a6..108b82818e624405c1c4aa0c9d65e262850b4505 100644 --- a/server/web_app/src/Controller/UserController.php +++ b/server/web_app/src/Controller/UserController.php @@ -102,7 +102,7 @@ final class UserController extends AbstractController implements UserControllerI return $this->json([ 'users' => $userArray, - 'path' => 'src/Controller/ItemController.php', + 'path' => 'src/Controller/UserController.php', ]); } @@ -123,11 +123,11 @@ final class UserController extends AbstractController implements UserControllerI ]; return $this->json([ 'user' => $userDTO, - 'path' => 'src/Controller/ItemController.php', + 'path' => 'src/Controller/UserController.php', ]); } - #[Route('/{userId}', methods: ['PUT'])] + #[Route('/{userId}', methods: ['PATCH'])] public function updateUser(int $userId, Request $req): JsonResponse { $user = $this->userRepository->findOneById($userId); @@ -196,7 +196,7 @@ final class UserController extends AbstractController implements UserControllerI 'isBlocked' => $user->isBlocked(), 'role' => $user->getRole()->value, ], - 'path' => 'src/Controller/ItemController.php' + 'path' => 'src/Controller/UserController.php' ], Response::HTTP_OK); } @@ -214,7 +214,7 @@ final class UserController extends AbstractController implements UserControllerI return $this->json([ 'message' => 'User deleted successfully', - 'path' => 'src/Controller/ItemController.php', + 'path' => 'src/Controller/UserController.php', ]); } @@ -223,7 +223,7 @@ final class UserController extends AbstractController implements UserControllerI { return $this->json([ 'message' => 'Welcome to your new controller!', - 'path' => 'src/Controller/ItemController.php', + 'path' => 'src/Controller/UserController.php', ]); } @@ -232,7 +232,7 @@ final class UserController extends AbstractController implements UserControllerI { return $this->json([ 'message' => 'Welcome to your new controller!', - 'path' => 'src/Controller/ItemController.php', + 'path' => 'src/Controller/UserController.php', ]); } } diff --git a/server/web_app/src/Repository/ItemRepository.php b/server/web_app/src/Repository/ItemRepository.php index 229f40652e92f36659747e345c2569cb626b2aa2..e148efaa59c7ec831866bc6718fbac9f53672c68 100644 --- a/server/web_app/src/Repository/ItemRepository.php +++ b/server/web_app/src/Repository/ItemRepository.php @@ -16,28 +16,23 @@ class ItemRepository extends ServiceEntityRepository parent::__construct($registry, Item::class); } - // /** - // * @return Item[] Returns an array of Item objects - // */ - // public function findByExampleField($value): array - // { - // return $this->createQueryBuilder('i') - // ->andWhere('i.exampleField = :val') - // ->setParameter('val', $value) - // ->orderBy('i.id', 'ASC') - // ->setMaxResults(10) - // ->getQuery() - // ->getResult() - // ; - // } + public function findAllItems (): array { + return $this->findAll(); + } + + // Custom query method to find active users + public function findByStatus($isBought): array + { + return $this->createQueryBuilder('u') + ->andWhere('u.isBought = :isBought') + ->setParameter('isBought', $isBought) + ->getQuery() + ->getResult(); + } - // public function findOneBySomeField($value): ?Item - // { - // return $this->createQueryBuilder('i') - // ->andWhere('i.exampleField = :val') - // ->setParameter('val', $value) - // ->getQuery() - // ->getOneOrNullResult() - // ; - // } + // Custom query method to find a user by id + public function findOneById(int $id): ?Item + { + return $this->findOneBy(['id' => $id]); + } }