src/Controller/User/PublicAmateurController.php line 114

Open in your IDE?
  1. <?php
  2. namespace App\Controller\User;
  3. use App\Entity\Ad;
  4. use App\Entity\Webmaster;
  5. use App\Service\User\Layer\AmateurLayer;
  6. use App\Service\Webmaster\AdService;
  7. use App\StructSerializer\Main\StructOptions;
  8. use App\StructSerializer\Main\StructSerializer;
  9. use Nelmio\ApiDocBundle\Annotation\Model;
  10. use Swagger\Annotations as SWG;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. /**
  16.  * @Route("/api/public/user/amateur")
  17.  */
  18. class PublicAmateurController extends AbstractController
  19. {
  20.     protected AmateurLayer $service;
  21.     protected StructSerializer $structSerializer;
  22.     public function __construct(AmateurLayer $serviceStructSerializer $structSerializer)
  23.     {
  24.         $this->service $service;
  25.         $this->structSerializer $structSerializer;
  26.     }
  27.     /**
  28.      * @SWG\Get(tags={"Amateur"},
  29.      *
  30.      *    @SWG\Response(
  31.      *     response=200, description="Paginated list of new amateurs, sorted by upgrade date",
  32.      *
  33.      *     @SWG\Schema(ref=@Model(type=App\Entity\Member::class, groups={"memberfrontendindex", "mediaindex", "commonids"}))),
  34.      *
  35.      *    @SWG\Parameter(name="page", in="path", type="integer", required=true, description="Requested page for pagination"),
  36.      *    @SWG\Parameter(name="limit", in="query", type="integer", required=false, default=18, description="Number of items per page for pagination")
  37.      * )
  38.      *
  39.      * @Route("/recent/{page}", methods={"GET"}, requirements={"page": "\d+"})
  40.      */
  41.     public function recent(Request $requestint $page): JsonResponse
  42.     {
  43.         $limit $request->query->getInt('limit'18);
  44.         $paginator $this->service->getRecentAmateurs($page$limit);
  45.         $options = new StructOptions();
  46.         $options->loadMemberLikes(true);
  47.         $options->loadMemberProfileValues(true);
  48.         return new JsonResponse([
  49.             'data' => $this->structSerializer->multipleToArray($options$paginator),
  50.             'total' => $paginator->count(),
  51.         ]);
  52.     }
  53.     /**
  54.      * @SWG\Get(tags={"Amateur"},
  55.      *
  56.      *    @SWG\Response(response=200, description="Paginated list of top amateurs, sorted by rank",
  57.      *
  58.      *     @SWG\Schema(ref=@Model(type=App\Entity\Member::class, groups={"memberfrontendindex", "mediaindex", "commonids"}))),
  59.      *
  60.      *    @SWG\Parameter(name="page", in="path", type="integer", required=true, description="Requested page for pagination"),
  61.      *    @SWG\Parameter(name="limit", in="query", type="integer", required=false, default=18, description="Number of items per page for pagination"),
  62.      *    @SWG\Parameter(name="withImageOnly", in="query", type="boolean", required=false, default=false, description="With profile image only or not consider"),
  63.      *    @SWG\Parameter(name="onlineOnly", in="query", type="boolean", required=false, default=false, description="Currently online only or not consider")
  64.      * )
  65.      *
  66.      * @Route("/top/{page}", methods={"GET"}, requirements={"page": "\d+"})
  67.      */
  68.     public function top(Request $requestint $page): JsonResponse
  69.     {
  70.         $limit $request->query->getInt('limit'18);
  71.         $withImage $request->query->getBoolean('withImageOnly'false);
  72.         $onlineOnly $request->query->getBoolean('onlineOnly'false);
  73.         $skipIds $this->service->getSkipInListAmateurIds();
  74.         $paginator $this->service->getTopAmateurs($page$limit$withImage$onlineOnly$skipIds);
  75.         $options = new StructOptions();
  76.         $options->loadMemberLikes(true);
  77.         $options->loadMemberProfileValues(true);
  78.         return new JsonResponse([
  79.             'data' => $this->structSerializer->multipleToArray($options$paginator),
  80.             'total' => $paginator->count(),
  81.         ]);
  82.     }
  83.     /**
  84.      * @SWG\Get(tags={"Amateur"},
  85.      *
  86.      *    @SWG\Response(response=200, description="Paginated list of random amateurs",
  87.      *
  88.      *     @SWG\Schema(ref=@Model(type=App\Entity\Member::class, groups={"memberfrontendindex", "mediaindex", "commonids"}))),
  89.      *
  90.      *    @SWG\Parameter(name="limit", in="query", type="integer", required=false, default=18, description="Number of items per page for pagination"),
  91.      *    @SWG\Parameter(name="withImageOnly", in="query", type="boolean", required=false, default=false, description="With profile image only or not consider"),
  92.      * )
  93.      *
  94.      * @Route("/random", methods={"GET"})
  95.      */
  96.     public function random(Request $request): JsonResponse
  97.     {
  98.         $limit $request->query->getInt('limit'18);
  99.         $withImage $request->query->getBoolean('withImageOnly'false);
  100.         $skipIds $this->service->getSkipInListAmateurIds();
  101.         $paginator $this->service->getRandomAmateurs($limit$withImage$skipIds);
  102.         $options = new StructOptions();
  103.         $options->loadMemberLikes(true);
  104.         $options->loadMemberProfileValues(true);
  105.         return new JsonResponse([
  106.             'data' => $this->structSerializer->multipleToArray($options$paginator),
  107.             'total' => $paginator->count(),
  108.         ]);
  109.     }
  110.     /**
  111.      * @SWG\Get(tags={"Amateur"},
  112.      *
  113.      *    @SWG\Response(response=200, description="Paginated list of amateurs with an active webcam, sorted by rank",
  114.      *
  115.      *     @SWG\Schema(ref=@Model(type=App\Entity\Member::class, groups={"memberfrontendindex", "mediaindex", "commonids"}))),
  116.      *
  117.      *    @SWG\Parameter(name="page", in="path", type="integer", required=true, description="Requested page for pagination"),
  118.      *    @SWG\Parameter(name="limit", in="query", type="integer", required=false, default=18, description="Number of items per page for pagination")
  119.      * )
  120.      *
  121.      * @Route("/livecams/{page}", methods={"GET"}, requirements={"page": "\d+"})
  122.      */
  123.     public function livecams(Request $requestint $page): JsonResponse
  124.     {
  125.         $limit $request->query->getInt('limit'15);
  126.         $paginator $this->service->getLivecamAmateurs($page$limit);
  127.         $options = new StructOptions();
  128.         $options->loadMemberLikes(true);
  129.         $options->loadMemberProfileValues(true);
  130.         return new JsonResponse([
  131.             'data' => $this->structSerializer->multipleToArray($options$paginator),
  132.             'total' => $paginator->count(),
  133.         ]);
  134.     }
  135.     /**
  136.      * @SWG\Get(tags={"Amateur"},
  137.      *
  138.      *    @SWG\Response(response=200, description="Paginated list of online amateurs, sorted by online rank",
  139.      *
  140.      *     @SWG\Schema(ref=@Model(type=App\Entity\Member::class, groups={"memberfrontendindex", "mediaindex", "commonids"}))),
  141.      *
  142.      *    @SWG\Parameter(name="page", in="path", type="integer", required=true, description="Requested page for pagination"),
  143.      *    @SWG\Parameter(name="limit", in="query", type="integer", required=false, default=18, description="Number of items per page for pagination"),
  144.      *    @SWG\Parameter(name="maximumLoginAgeMinutes", in="query", type="integer", required=false, default=10, description="Maximum minutes to still be considered online")
  145.      * )
  146.      *
  147.      * @Route("/online/{page}", methods={"GET"}, requirements={"page": "\d+"})
  148.      *
  149.      * @throws \Exception
  150.      */
  151.     public function online(Request $requestint $page): JsonResponse
  152.     {
  153.         $limit $request->query->getInt('limit'18);
  154.         $minutes null;
  155.         if ($request->query->has('maximumLoginAgeMinutes')) {
  156.             $minutes $request->query->getInt('maximumLoginAgeMinutes'10);
  157.         }
  158.         $paginator $this->service->getOnlineAmateurs($page$limit$minutes);
  159.         $options = new StructOptions();
  160.         $options->loadMemberLikes(true);
  161.         $options->loadMemberProfileValues(true);
  162.         return new JsonResponse([
  163.             'data' => $this->structSerializer->multipleToArray($options$paginator),
  164.             'total' => $paginator->count(),
  165.         ]);
  166.     }
  167.     /**
  168.      * @SWG\Get(tags={"Amateur", "Webmaster", "Ad"},
  169.      *
  170.      *    @SWG\Response(response=200, description="Paginated list of amateurs for a given ad",
  171.      *
  172.      *     @SWG\Schema(ref=@Model(type=App\Entity\Member::class, groups={"memberfrontendindex", "mediaindex", "commonids"}))),
  173.      *
  174.      *    @SWG\Parameter(name="webmaster", in="path", type="integer", required=true, description="Owning webmaster of the ad"),
  175.      *    @SWG\Parameter(name="ad", in="path", type="integer", required=true, description="Ad ID in question")
  176.      * )
  177.      *
  178.      * @Route("/amateurad/{webmaster}/{ad}", methods={"GET"}, requirements={"webmaster": "\d+", "ad": "\d+"})
  179.      *
  180.      * @throws \Exception
  181.      */
  182.     public function ad(AdService $adServiceWebmaster $webmasterint $ad): JsonResponse
  183.     {
  184.         if ($ad 0) {
  185.             $adEntity $adService->findById($ad);
  186.         } else {
  187.             $adEntity $adService->getAmateurAdDemo();
  188.         }
  189.         $paginator $this->service->getAmateursForWebmasterAd($adEntity);
  190.         $options = new StructOptions();
  191.         $options->loadMemberLikes(false);
  192.         $options->loadMemberProfileValues(false);
  193.         return new JsonResponse([
  194.             'data' => $this->structSerializer->multipleToArray($options$paginator),
  195.             'total' => $paginator->count(),
  196.         ]);
  197.     }
  198. }