Skip to content
Snippets Groups Projects
QuestController.php 8.98 KiB
Newer Older
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
<?php

namespace App\Controller;

use App\Service\Action\ActionServiceInterface;
use App\Service\Dto\Classes\CreateReviewDto;
use App\Service\Dto\Classes\FilterDto;
use App\Service\Dto\Classes\IdDto;
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
use App\Service\Dto\Classes\PageDto;
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
use App\Service\Dto\Classes\UpdateReviewDto;
use App\Service\Response\Classes\FilterParamsResponse;
use App\Service\Response\Classes\FilterResponse;
use App\Service\Response\Classes\QuestResponse;
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
use App\Service\Response\Classes\QuestsPagedResponse;
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
use App\Service\Response\Classes\QuestsResponse;
use App\Service\Response\Classes\Response;
use Nelmio\ApiDocBundle\Annotation\Model;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
use OpenApi\Attributes as OA;

#[Route('/api', name: 'api_')]
#[OA\Tag(name: 'Квесты')]
class QuestController extends AbstractController
{
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
    #[Route('/quests', name: 'quests', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: PageDto::class))
    )]
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
            ref: new Model(type: QuestsPagedResponse::class, groups: ["message", "data", "card", "pagination"])
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
        )
    )]
    public function quests(
        #[Autowire(service: 'action.quests')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/quest', name: 'quest', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: IdDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: QuestResponse::class, groups: ["message", "data", "detail"])
        )
    )]
    public function quest(
        #[Autowire(service: 'action.quest')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/filter/set', name: 'filter_set', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: FilterDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
            ref: new Model(type: Response::class, groups: ["message"])
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
        )
    )]
    public function setFilter(
        #[Autowire(service: 'action.filter.set')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/filter/get', name: 'filter_get', methods: ['GET'])]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: FilterResponse::class, groups: ["message", "data"])
        )
    )]
    public function getFilter(
        #[Autowire(service: 'action.filter.get')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/filter/params', name: 'filter_params', methods: ['GET'])]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: FilterParamsResponse::class, groups: ["message", "data", "filter"])
        )
    )]
    public function getFilterParams(
        #[Autowire(service: 'action.filter.params')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/quest/subscribe', name: 'quest_subscribe', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: IdDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: Response::class, groups: ["message"])
        )
    )]
    public function subscribe(
        #[Autowire(service: 'action.quest.subscribe')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/quest/unsubscribe', name: 'quest_unsubscribe', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: IdDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: Response::class, groups: ["message"])
        )
    )]
    public function unsubscribe(
        #[Autowire(service: 'action.quest.unsubscribe')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/quest/review/create', name: 'quest_review_create', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: CreateReviewDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: Response::class, groups: ["message"])
        )
    )]
    public function createReview(
        #[Autowire(service: 'action.quest.review.create')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/quest/review/update', name: 'quest_review_update', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: UpdateReviewDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: Response::class, groups: ["message"])
        )
    )]
    public function updateReview(
        #[Autowire(service: 'action.quest.review.update')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/quest/review/delete', name: 'quest_review_delete', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: IdDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: Response::class, groups: ["message"])
        )
    )]
    public function deleteReview(
        #[Autowire(service: 'action.quest.review.delete')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/quest/review/like', name: 'quest_review_like', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: IdDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: Response::class, groups: ["message"])
        )
    )]
    public function likeReview(
        #[Autowire(service: 'action.quest.review.like')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/quest/review/unlike', name: 'quest_review_unlike', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: IdDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: Response::class, groups: ["message"])
        )
    )]
    public function unlikeReview(
        #[Autowire(service: 'action.quest.review.unlike')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/quest/favorite/add', name: 'quest_favorite_add', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: IdDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: Response::class, groups: ["message"])
        )
    )]
    public function addFavorite(
        #[Autowire(service: 'action.favorite.add')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }

    #[Route('/quest/favorite/remove', name: 'quest_favorite_remove', methods: ['POST'])]
    #[OA\RequestBody(
        content: new OA\JsonContent(ref: new Model(type: IdDto::class))
    )]
    #[OA\Response(
        response: 200,
        description: 'Ответ',
        content: new OA\JsonContent(
            ref: new Model(type: Response::class, groups: ["message"])
        )
    )]
    public function removeFavorite(
        #[Autowire(service: 'action.favorite.remove')]
        ActionServiceInterface $actionService
    ): JsonResponse
    {
        return $actionService->getResponse();
    }
i.vasilenko@iq-adv.ru's avatar
i.vasilenko@iq-adv.ru committed
}