<?php
namespace App\Controller\User;
use App\Dto\SearchOptions;
use App\Form\Search\MemberSearchForm;
use App\Service\Client\User\AmateurListingService;
use App\Service\Search\MemberSearchService;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/amateure")
*/
class AmateurController extends AbstractController
{
protected AmateurListingService $service;
protected MemberSearchService $searchService;
public function __construct(AmateurListingService $service, MemberSearchService $searchService)
{
$this->service = $service;
$this->searchService = $searchService;
}
/**
* @Route("/top-amateure/{page}", requirements={"page": "\d+"}, defaults={"page": 1})
* @Template()
* @param int $page
* @return array
*/
public function top(int $page = 1): array
{
return [
'amateurs' => $this->service->getTopRatedAmateurs($page, 15, false, false),
'page' => $page
];
}
/**
* @Route("/die-neusten-amateure/{page}", requirements={"page": "\d+"}, defaults={"page": 1})
* @Template()
* @param int $page
* @return array
*/
public function recent(int $page = 1): array
{
return [
'amateurs' => $this->service->getRecentAmateurs($page, 15),
'page' => $page
];
}
/**
* @Route("/amateure-online/{page}", requirements={"page": "\d+"}, defaults={"page": 1})
* @Template()
* @param int $page
* @return array
*/
public function online(int $page = 1): array
{
return [
'amateurs' => $this->service->getOnlineAmateurs($page, 15),
'page' => $page
];
}
/**
* Werbemittel LinkfarmService
*
* @Route("/random")
* @return RedirectResponse
* @throws \Psr\Cache\InvalidArgumentException
* @throws \ReflectionException
*/
public function random(): RedirectResponse
{
$top = $this->service->getTopRatedAmateurs(1, 30, true, true)->getItems();
shuffle($top);
if(count($top)) {
return $this->redirectToRoute('app_user_profile_detail', [
'username' => $top[0]['username']
]);
}
return $this->redirectToRoute('app_home_index');
}
/**
* Werbemittel
* @Template()
* @Route("/amateur-werden")
* @return array|RedirectResponse
*/
public function landingpage()
{
$user = $this->getUser();
if($user && $user->getMemberId()) {
return $this->redirectToRoute('app_amateurupgrade_apply');
}
return [];
}
/**
* @Route("/finden")
* @Template()
* @return array
*/
public function search(Request $request): array
{
$searchOptions = new SearchOptions();
$form = $this->createForm(MemberSearchForm::class, $searchOptions);
$form->handleRequest($request);
if (!$form->isSubmitted()) {//Incoming from global search
$searchOptions->initDefaults()->fromGlobalSearch($request->query);
$form->setData($searchOptions);
}
$searchOptions->pageFromQuery($request->query);
$result = $this->searchService->findByUsername($searchOptions);
return [
'form' => $form->createView(),
'amateurs' => $result,
'minMaxAge' => $this->searchService->findMinMaxAge(),
];
}
}