src/Controller/MobileApi/V2/Beauty/Master/GetTopMastersAction.php line 17

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\Controller\MobileApi\V2\Beauty\Master;
  4. use OpenApi\Annotations as OA;
  5. use Nelmio\ApiDocBundle\Annotation\Model;
  6. use Slivki\Message\Query\Beauty\Master\GetTopMastersQuery;
  7. use Slivki\Messenger\Query\QueryBusInterface;
  8. use Slivki\Request\Beauty\Master\TopMastersRequest;
  9. use Slivki\ValueObject\Coordinate;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Slivki\Response\Beauty\Offer\MasterResponse;
  13. final class GetTopMastersAction
  14. {
  15.     private QueryBusInterface $queryBus;
  16.     public function __construct(QueryBusInterface $queryBus)
  17.     {
  18.         $this->queryBus $queryBus;
  19.     }
  20.     /**
  21.      * @Route("/mobile/api/v2/beauty/masters/top", methods={"GET"}, name="mobile_api_v2_beauty_masters_top_get")
  22.      * @OA\Tag(name="Beauty"),
  23.      * @OA\Response(
  24.      *     response=200,
  25.      *     description="Топ мастера",
  26.      *     @OA\JsonContent(
  27.      *         type="array",
  28.      *         description="Мастера",
  29.      *         @OA\Items(ref=@Model(type=MasterResponse::class)),
  30.      *     ),
  31.      * ),
  32.      * @OA\Parameter(
  33.      *      name="longitude",
  34.      *      in="query",
  35.      *      description="The user's longitude",
  36.      *      @OA\Schema(type="float", example=27.557008, default=null, nullable=true),
  37.      * ),
  38.      * @OA\Parameter(
  39.      *      name="latitude",
  40.      *      in="query",
  41.      *      description="The user's latitude",
  42.      *      @OA\Schema(type="float", example=53.911724, default=null, nullable=true),
  43.      * ),
  44.      */
  45.     public function __invoke(TopMastersRequest $request): JsonResponse
  46.     {
  47.         return new JsonResponse(
  48.             $this->queryBus->handle(
  49.                 new GetTopMastersQuery(
  50.                     $request->getLevel(),
  51.                     $request->getLatitude() === null || $request->getLongitude() === null
  52.                         null
  53.                         : new Coordinate($request->getLatitude(), $request->getLongitude()),
  54.                 ),
  55.             ),
  56.         );
  57.     }
  58. }