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

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