src/Controller/APIRest/SynerticMobileApp/SocietyGroupController.php line 26

Open in your IDE?
  1. <?php
  2. namespace App\Controller\APIRest\SynerticMobileApp;
  3. // Core app
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. // Services
  8. use App\Services\APIRest\Tools\APIResponseTools;
  9. use App\Services\Log\LogMobileAppTools;
  10. use App\Services\LogTools;
  11. use App\Utils\APIError;
  12. // Exceptions
  13. use App\Entity\APIRest\AccessAPI;
  14. use App\Entity\SocietyGroup;
  15. use App\Exception\APIRest\APIAuthenticationException;
  16. use App\Exception\APIRest\APIException;
  17. use Exception;
  18. use Symfony\Component\HttpFoundation\Request;
  19. class SocietyGroupController extends AbstractController
  20. {
  21.     public function __construct(
  22.         ManagerRegistry $doctrine,
  23.         LogTools $logTools,
  24.         LogMobileAppTools $logMobileAppTools,
  25.         APIResponseTools $apiResponseTools
  26.     )
  27.     {
  28.         $this->em $doctrine->getManager();
  29.         $this->logTools $logTools;
  30.         $this->logMobileAppTools $logMobileAppTools;
  31.         $this->apiResponseTools $apiResponseTools;
  32.     }
  33.     public function listSocietyGroups(): JsonResponse
  34.     {
  35.         try
  36.         {
  37.             if($this->getUser() instanceof AccessAPI)
  38.             {
  39.                 $accessAPI $this->getUser();
  40.             }
  41.             else
  42.             {
  43.                 $this->logMobileAppTools->error(new APIError(APIError::AUTHENTICATION_UNAUTHORIZED_ACCESS), []);
  44.                 throw new APIAuthenticationException(new APIError(APIError::AUTHENTICATION_UNAUTHORIZED_ACCESS));
  45.             }
  46.             // Check if user has admin API access (based on tokenExpirationDate and ROLE_ADMIN)
  47.             if (!$accessAPI->hasApiAdminAccess())
  48.             {
  49.                 $this->logMobileAppTools->error(new APIError(APIError::AUTHENTICATION_UNAUTHORIZED_ACCESS), []);
  50.                 throw new APIAuthenticationException(new APIError(APIError::AUTHENTICATION_UNAUTHORIZED_ACCESS));
  51.             }
  52.             // Get all society groups
  53.             $societyGroups $this->em->getRepository(SocietyGroup::class)->findAll();
  54.             
  55.             $data = [];
  56.             foreach ($societyGroups as $group)
  57.             {
  58.                 $data[] = [
  59.                     'id' => $group->getId(),
  60.                     'ref' => $group->getRef(),
  61.                     'name' => $group->getName(),
  62.                     'isActive' => $group->getIsActive(),
  63.                     'internalRef' => $group->getInternalRef(),
  64.                 ];
  65.             }
  66.             return $this->apiResponseTools->successResponse($data);
  67.         }
  68.         catch (Exception $e)
  69.         {
  70.             if (!$e instanceof APIException)
  71.             {
  72.                 $this->logMobileAppTools->critical(''$e, []);
  73.                 $e = new APIException(new APIError(APIError::UNEXPECTED_ERROR));
  74.             }
  75.             $this->logMobileAppTools->error($e->getApiError(), []);
  76.             return $this->apiResponseTools->exceptionResponse($e);
  77.         }
  78.     }
  79.     public function listSocietyGroupUsers(Request $request): JsonResponse
  80.     {
  81.         try
  82.         {
  83.             $requestedData json_decode($request->getContent(), true);
  84.             $userAppContext $this->logMobileAppTools->buildUserAppContext($requestedData);
  85.             $this->logMobileAppTools->logApiCall(
  86.                 $request->getMethod(),
  87.                 $request->getPathInfo(),
  88.                 $userAppContext
  89.             );
  90.             
  91.             if($this->getUser() instanceof AccessAPI)
  92.             {
  93.                 $accessAPI $this->getUser();
  94.             }
  95.             else
  96.             {
  97.                 $this->logMobileAppTools->error(new APIError(APIError::AUTHENTICATION_UNAUTHORIZED_ACCESS), $userAppContext);
  98.                 throw new APIAuthenticationException(new APIError(APIError::AUTHENTICATION_UNAUTHORIZED_ACCESS));
  99.             }
  100.             if (!$accessAPI->hasApiAdminAccess())
  101.             {
  102.                 $this->logMobileAppTools->error(new APIError(APIError::AUTHENTICATION_UNAUTHORIZED_ACCESS), $userAppContext);
  103.                 throw new APIAuthenticationException(new APIError(APIError::AUTHENTICATION_UNAUTHORIZED_ACCESS));
  104.             }
  105.             $societyGroupId $requestedData['society_group_id'];
  106.             if (empty($societyGroupId))
  107.             {
  108.                 throw new APIException(new APIError(APIError::UNEXPECTED_ERROR'society_group_id is required'));
  109.             }
  110.             $societyGroup $this->em->getRepository(SocietyGroup::class)->find($societyGroupId);
  111.             
  112.             if ($societyGroup === null)
  113.             {
  114.                 throw new APIException(new APIError(APIError::UNEXPECTED_ERROR'Society group not found'));
  115.             }
  116.             $accesses $this->em->getRepository(\App\Entity\Access::class)
  117.                 ->findBy(['societyGroup' => $societyGroup]);
  118.             $data = [];
  119.             foreach ($accesses as $access)
  120.             {
  121.                 $humanResource $access->getHumanResource();
  122.                 $function $access->getFunction();
  123.                 $society $access->getSociety();
  124.                 $accessApi $access->getAccessApi();
  125.                 
  126.                 $data[] = [
  127.                     'id' => $access->getId(),
  128.                     'email' => $access->getEmail(),
  129.                     'lastname' => $humanResource $humanResource->getLastname() : null,
  130.                     'firstname' => $humanResource $humanResource->getFirstname() : null,
  131.                     'isActive' => $access->getIsActive(),
  132.                     'function' => $function $function->getName() : null,
  133.                     'society' => $society ? [
  134.                         'id' => $society->getId(),
  135.                         'ref' => $society->getRef(),
  136.                         'name' => $society->getName(),
  137.                     ] : null,
  138.                     'accessApiId' => $accessApi $accessApi->getId() : null,
  139.                 ];
  140.             }
  141.             return $this->apiResponseTools->successResponse($data);
  142.         }
  143.         catch (Exception $e)
  144.         {
  145.             if (!$e instanceof APIException)
  146.             {
  147.                 $this->logMobileAppTools->critical(''$e$userAppContext ?? []);
  148.                 $e = new APIException(new APIError(APIError::UNEXPECTED_ERROR));
  149.             }
  150.             $this->logMobileAppTools->error($e->getApiError(), $userAppContext ?? []);
  151.             return $this->apiResponseTools->exceptionResponse($e);
  152.         }
  153.     }
  154. }