src/Controller/api/User/UserController.php line 436

Open in your IDE?
  1. <?php
  2. namespace App\Controller\api\User;
  3. use App\Entity\User;
  4. use App\Service\Api\User\UserService;
  5. use Doctrine\Common\Collections\Criteria;
  6. use Doctrine\DBAL\Exception;
  7. use Doctrine\ORM\NonUniqueResultException;
  8. use Doctrine\ORM\ORMException;
  9. use Stripe\Exception\ApiErrorException;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Security\Core\Security;
  16. use SymfonyBundles\RedisBundle\Redis\ClientInterface;
  17. use Twig\Error\LoaderError;
  18. use Twig\Error\RuntimeError;
  19. use Twig\Error\SyntaxError;
  20. /**
  21.  * utilisateur.
  22.  *
  23.  * @Route("api/immo/v2")
  24.  */
  25. class UserController extends AbstractController
  26. {
  27.     /**
  28.      * @var UserService
  29.      */
  30.     protected $userService;
  31.     // protected $mailMessageService;
  32.     public function __construct(UserService $userService)
  33.     {
  34.         $this->userService $userService;
  35.         // $this->mailMessageService = $mailMessageService;
  36.     }
  37.     /**
  38.      * @Route(
  39.      *     name="signup" ,
  40.      *     path="/auth/signup" ,
  41.      *     methods={"POST"},
  42.      *     defaults={
  43.      *         "_controller"="src\Controller\api\UserController::signUp",
  44.      *         "_api_collection_operation_name"="signup"
  45.      *     }
  46.      * )
  47.      *
  48.      * @throws ApiErrorException
  49.      * @throws LoaderError
  50.      * @throws RuntimeError
  51.      * @throws SyntaxError
  52.      */
  53.     public function signUp(Request $request): JsonResponse
  54.     {
  55.         return $this->userService->signUp($request);
  56.     }
  57.     /**
  58.      * @Route(
  59.      *     name="subscribe" ,
  60.      *     path="/subscribe" ,
  61.      *     methods={"POST"},
  62.      *     defaults={
  63.      *         "_controller"="src\Controller\api\UserController::subscribe",
  64.      *         "_api_collection_operation_name"="subscribe"
  65.      *     }
  66.      * )
  67.      *
  68.      * @throws \Exception
  69.      */
  70.     public function subscribe(Request $request): JsonResponse
  71.     {
  72.         return $this->userService->subscribe($request);
  73.     }
  74.     /**
  75.      * @Route(
  76.      *     name="validate_account",
  77.      *     path="/auth/validate/account/{token}",
  78.      *     methods={"POST"},
  79.      *     defaults={
  80.      *         "_controller"="src\Controller\api\UserController::validateAccount",
  81.      *         "_api_collection_operation_name"="validate_account"
  82.      *     }
  83.      * )
  84.      *
  85.      * @throws ORMException
  86.      */
  87.     public function validateAccount(Request $request): JsonResponse
  88.     {
  89.         return $this->userService->validateAccount($request);
  90.     }
  91.     /**
  92.      * forgot password.
  93.      *
  94.      * @Route(
  95.      *     name="forgot_password",
  96.      *     path="/auth/forgotpassword",
  97.      *     methods={"POST"},
  98.      *     defaults={
  99.      *         "_controller"="src\Controller\api\UserApiController::forgotPassword",
  100.      *         "_api_collection_operation_name"="forgot_password"
  101.      *     }
  102.      * )
  103.      *
  104.      * @throws ORMException
  105.      */
  106.     public function forgotPassword(Request $request): JsonResponse
  107.     {
  108.         return $this->userService->forgotPassword($request);
  109.     }
  110.     /**
  111.      * reinitialise password.
  112.      *
  113.      * @Route(
  114.      *     name="reinitialise_password",
  115.      *     path="/auth/reinitialisepassword",
  116.      *     methods={"POST" , "GET"},
  117.      *     defaults={
  118.      *         "_controller"="src\Controller\api\UserController::reinitialisePassword",
  119.      *         "_api_collection_operation_name"="reinitialise_password"
  120.      *     }
  121.      * )
  122.      *
  123.      * @throws ORMException
  124.      */
  125.     public function reinitialisePassword(Request $request): JsonResponse
  126.     {
  127.         return $this->userService->reinitialisePassword($request);
  128.     }
  129.     /**
  130.      * Edit Password.
  131.      *
  132.      * @Route(
  133.      *     name="edit_password",
  134.      *     path="/auth/editpassword",
  135.      *     methods={"POST" , "GET"},
  136.      *     defaults={
  137.      *         "_controller"="src\Controller\api\UserController::editPassword",
  138.      *         "_api_collection_operation_name"="edit_password"
  139.      *     }
  140.      * )
  141.      *
  142.      * @throws ORMException
  143.      */
  144.     public function editPassword(Request $request): JsonResponse
  145.     {
  146.         return $this->userService->editPassword($request);
  147.     }
  148.     /**
  149.      * Edit Profile.
  150.      *
  151.      * @Route(
  152.      *     name="edit_profile_by_token",
  153.      *     path="/user/profile/edit",
  154.      *     methods={"POST" , "GET"},
  155.      *     defaults={
  156.      *         "_controller"="src\Controller\api\UserController::editPortfolioUser",
  157.      *         "_api_collection_operation_name"="edit_profile_by_token"
  158.      *     }
  159.      * )
  160.      *
  161.      * @throws ORMException
  162.      * @throws Exception
  163.      */
  164.     public function editPortfolioUser(Request $request): JsonResponse
  165.     {
  166.         return $this->userService->editPortfolioUser($request);
  167.     }
  168.     /**
  169.      * @param Security $security
  170.      * @return JsonResponse
  171.      */
  172.     public function detailUser(Security $security): JsonResponse
  173.     {
  174.         return $this->userService->detailUser($security->getUser());
  175.     }
  176.     /**
  177.      * @Route(
  178.      *     name="user_active_subscription",
  179.      *     path="/user/active_subscription",
  180.      *     methods={"GET"},
  181.      *     defaults={
  182.      *         "_controller"="src\Controller\api\UserController::getActiveSubscription",
  183.      *         "_api_collection_operation_name"="user_active_subscription"
  184.      *     }
  185.      * )
  186.      */
  187.     public function getActiveSubscription(): JsonResponse
  188.     {
  189.         return $this->userService->getActiveSubscription($this->getUser());
  190.     }
  191.     /**
  192.      * Return the authenticated user's default payment card info.
  193.      *
  194.      * @Route(
  195.      *     name="user_get_card",
  196.      *     path="/user/card",
  197.      *     methods={"GET"},
  198.      *     defaults={
  199.      *         "_controller"="src\Controller\api\UserController::getCard",
  200.      *         "_api_collection_operation_name"="user_get_card"
  201.      *     }
  202.      * )
  203.      */
  204.     public function getCard(): JsonResponse
  205.     {
  206.         return $this->userService->getCard($this->getUser());
  207.     }
  208.     /**
  209.      * Update the authenticated user's default payment card.
  210.      *
  211.      * Expects a JSON body: { "token": "tok_xxxx" }
  212.      * The token is a Stripe card token generated client-side via Stripe.js.
  213.      *
  214.      * @Route(
  215.      *     name="user_update_card",
  216.      *     path="/user/card/update",
  217.      *     methods={"POST"},
  218.      *     defaults={
  219.      *         "_controller"="src\Controller\api\UserController::updateCard",
  220.      *         "_api_collection_operation_name"="user_update_card"
  221.      *     }
  222.      * )
  223.      */
  224.     public function updateCard(Request $request): JsonResponse
  225.     {
  226.         return $this->userService->updateCard($this->getUser(), $request);
  227.     }
  228.     /**
  229.      *
  230.      * @Route(
  231.      *     name="user_availability_add",
  232.      *     path="/user/availability/add",
  233.      *     methods={"POST"},
  234.      *     defaults={
  235.      *         "_controller"="src\Controller\api\UserController::addAvailability",
  236.      *         "_api_collection_operation_name"="user_availability_add"
  237.      *     }
  238.      * )
  239.      */
  240.     public function addAvailability(Request $request): JsonResponse
  241.     {
  242.         return $this->userService->addAvailability($request);
  243.     }
  244.     /**
  245.      * User availability list.
  246.      *
  247.      * @Route(
  248.      *     name="user_availability_list",
  249.      *     path="/user/availability/list",
  250.      *     methods={"GET"},
  251.      *     defaults={
  252.      *         "_controller"="src\Controller\api\UserController::availabilityList",
  253.      *         "_api_collection_operation_name"="user_availability_list"
  254.      *     }
  255.      * )
  256.      */
  257.     public function availabilityList(Request $request): JsonResponse
  258.     {
  259.         return $this->userService->availabilityList($request);
  260.     }
  261.     /**
  262.      * User logout.
  263.      *
  264.      * @Route(
  265.      *     name="user_logout",
  266.      *     path="/user/logout",
  267.      *     methods={"POST"},
  268.      *     defaults={
  269.      *         "_controller"="src\Controller\api\UserController::logout",
  270.      *         "_api_collection_operation_name"="user_logout"
  271.      *     }
  272.      * )
  273.      */
  274.     public function logout(Request $request): JsonResponse
  275.     {
  276.         return $this->userService->logout($request);
  277.     }
  278.     /**
  279.      * Provider List : Entrepreneur.
  280.      *
  281.      * @Route(
  282.      *     name="external_provider_list",
  283.      *     path="/user/provider/work/list",
  284.      *     methods={"GET"},
  285.      *     defaults={
  286.      *         "_controller"="src\Controller\api\UserController::workProviderList",
  287.      *         "_api_collection_operation_name"="external_provider_list"
  288.      *     }
  289.      * )
  290.      */
  291.     public function workProviderList(): JsonResponse
  292.     {
  293.         return $this->userService->workProviderList();
  294.     }
  295.     /**
  296.      * Liste user Role Prest-Ext.
  297.      *
  298.      * @Route(
  299.      *     name="prest_user_list",
  300.      *     path="/user/prestator/list",
  301.      *     methods={"GET"},
  302.      *     defaults={
  303.      *         "_controller"="src\Controller\api\UserController::prestatorList",
  304.      *         "_api_collection_operation_name"="user_prestator_list"
  305.      *     }
  306.      * )
  307.      */
  308.     public function getUserPre(Request $request): JsonResponse
  309.     {
  310.         return $this->userService->getUserPresExt($request);
  311.     }
  312.     /**
  313.      * @return mixed
  314.      *
  315.      * @throws NonUniqueResultException
  316.      */
  317.     public function getUserByRole(Request $requeststring $role)
  318.     {
  319.         return $this->userService->getUserByRole($request$role);
  320.     }
  321.     public function getUserBySpeciality(Request $requestClientInterface $redis): JsonResponse
  322.     {
  323.         return $this->userService->getUserBySpeciality(
  324.             $request->query->get('page'1),
  325.             $request->query->get('itemsPerPage'10),
  326.             $request->query->get('speciality'),
  327.             $request->query->get('keyword')
  328.         );
  329.     }
  330.     /**
  331.      * @Route(
  332.      *     name="user_exist_by_mail",
  333.      *     path="/user/by/mail",
  334.      *     methods={"GET"},
  335.      *     defaults={
  336.      *         "_controller"="src\Controller\api\UserController::getUserByMailExis",
  337.      *         "_api_collection_operation_name"="user_exist_by_mail"
  338.      *     }
  339.      * )
  340.      */
  341.     public function getUserByMailExist(Request $request): JsonResponse
  342.     {
  343.         $email $request->query->get('email');
  344.         $exists $this->userService->checkUserEmailExists($email);
  345.         return new JsonResponse($exists 'true' 'false'Response::HTTP_OK, [], true);
  346.     }
  347.     /**
  348.      * @Route(
  349.      *     name="user_exist_by_pseudonym",
  350.      *     path="/user/by/pseudonym",
  351.      *     methods={"GET"},
  352.      *     defaults={
  353.      *         "_controller"="src\\Controller\\api\\UserController::getUserByPseudonymExist",
  354.      *         "_api_collection_operation_name"="user_exist_by_pseudonym"
  355.      *     }
  356.      * )
  357.      */
  358.     public function getUserByPseudonymExist(Request $request): JsonResponse
  359.     {
  360.         $pseudonym $request->query->get('pseudonym');
  361.         $exists $this->userService->checkUserPseudonymExists($pseudonym);
  362.         return new JsonResponse($exists 'true' 'false'Response::HTTP_OK, [], true);
  363.     }
  364.     /**
  365.      * @Route(
  366.      *     name="search_by_keywords",
  367.      *     path="/users/by/key",
  368.      *     methods={"GET"},
  369.      *     defaults={
  370.      *         "_controller"="src\Controller\api\UserController::searchUserByKeyword",
  371.      *         "_api_collection_operation_name"="search_by_keywords"
  372.      *     }
  373.      * )
  374.      */
  375.     public function searchUserByKeyword(Request $request): JsonResponse
  376.     {
  377.         return $this->userService->searchUserByKeyword($request);
  378.     }
  379.     public function miniMailUserSuggestion(Request $request): JsonResponse
  380.     {
  381.         $user $this->getUser();
  382.         $keyword $request->query->get("keyword");
  383.         $limit $request->query->getInt("limit"10);
  384.         return $this->userService->miniMailUserSuggestion($user$limit$keyword);
  385.     }
  386.     /**
  387.      * @Route(
  388.      *     name="update_all_users",
  389.      *     path="/users/all/update",
  390.      *     methods={"GET"},
  391.      *     defaults={
  392.      *         "_controller"="src\Controller\api\UserController::updateAllUser",
  393.      *         "_api_collection_operation_name"="update_all_users"
  394.      *     }
  395.      * )
  396.      */
  397.     public function updateAllUser(): JsonResponse
  398.     {
  399.         return $this->userService->updateAllUser();
  400.     }
  401.     public function getAllTypeOfServices(): JsonResponse
  402.     {
  403.         return $this->userService->getAllTypeOfServices();
  404.     }
  405.     public function checkAuthorizationForFiguration(Security $securityRequest $request): JsonResponse
  406.     {
  407.         return $this->userService->checkAuthorizationForFiguration($security$request);
  408.     }
  409.     public function becomeProfessionalUser(Request $request): JsonResponse
  410.     {
  411.         /** @var User $user */
  412.         $user $this->getUser();
  413.         if (!$user->getActiveSubscription() || $user->getActiveSubscription()->getPlan()->isFree()) {
  414.             return new JsonResponse(['message' => 'Access denied'], 403);
  415.         }
  416.         return $this->userService->becomeProfessionalUser($request$user);
  417.     }
  418.     public function detailProOfUser(): JsonResponse
  419.     {
  420.         return $this->userService->detailProOfUser($this->getUser());
  421.     }
  422. }