src/Controller/ApiV2/Managers/BuildingController.php line 45

Open in your IDE?
  1. <?php
  2. namespace App\Controller\ApiV2\Managers;
  3. use App\Controller\ApiV2\AbstractController;
  4. use App\Entity\Building;
  5. use App\Entity\User;
  6. use App\Repository\BuildingRepository;
  7. use App\Services\BuildingService;
  8. use App\Services\FlatService;
  9. use Doctrine\ORM\NonUniqueResultException;
  10. use Doctrine\ORM\NoResultException;
  11. use FOS\RestBundle\Controller\Annotations as Rest;
  12. use Symfony\Component\HttpFoundation\Request;
  13. class BuildingController extends AbstractController
  14. {
  15.     private BuildingRepository $buildingRepository;
  16.     private BuildingService $buildingService;
  17.     private FlatService $flatService;
  18.     /**
  19.      * @param BuildingRepository $buildingRepository
  20.      * @param BuildingService $buildingService
  21.      * @param FlatService $flatService
  22.      */
  23.     public function __construct(
  24.         BuildingRepository $buildingRepository,
  25.         BuildingService $buildingService,
  26.         FlatService $flatService
  27.     ) {
  28.         parent::__construct($buildingRepository);
  29.         $this->buildingRepository $buildingRepository;
  30.         $this->buildingService $buildingService;
  31.         $this->flatService $flatService;
  32.     }
  33.     /**
  34.      * @Rest\Get("/", name="managers_buildings_index")
  35.      * @param Request $request
  36.      * @return array<string, mixed>
  37.      * @throws NoResultException
  38.      * @throws NonUniqueResultException
  39.      */
  40.     public function index(Request $request): array
  41.     {
  42.         $options $this->getListOptions($request);
  43.         /** @var User $user */
  44.         $user $this->getUser();
  45.         return $this->buildingService->getBuildingsPaginatedApi($user$options1);
  46.     }
  47.     /**
  48.      * @Rest\Get("/{buildingId}/flats", name="managers_building_flats")
  49.      * @param Request $request
  50.      * @param int $buildingId
  51.      * @return array<string, mixed>
  52.      * @throws NoResultException
  53.      * @throws NonUniqueResultException
  54.      */
  55.     public function show(Request $requestint $buildingId): array
  56.     {
  57.         /** @var User $user */
  58.         $user $this->getUser();
  59.         /** @var Building|null $building */
  60.         $building $this->getBuilding($buildingId$user);
  61.         $options $this->getListOptions($request);
  62.         return [
  63.             'building' => $building,
  64.             'flats' => $this->flatService->getFlatsByBuildingPaginated($building$options)
  65.         ];
  66.     }
  67.     /**
  68.      * @Rest\Put("/{buildingId}/change-status", name="managers_building_change_status")
  69.      */
  70.     public function changeBuildingStatus(int $buildingId): Building
  71.     {
  72.         /** @var User $user */
  73.         $user $this->getUser();
  74.         /** @var Building|null $building */
  75.         $building $this->getBuilding($buildingId$user);
  76.         $newStatus = (int) !$building->getActiveStatus();
  77.         $building->setActiveStatus($newStatus);
  78.         $this->buildingRepository->flush();
  79.         return $building;
  80.     }
  81. }