<?php
namespace App\Controller;
use App\Entity\Location\City;
use App\Entity\Profile\Genders;
use App\Entity\Profile\Profile;
use App\Service\ProfileAvatar;
use App\Service\ProfileBotHelper;
use App\Service\ResponsiveAssetsService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Response;
class ProfileBotHelperController extends AbstractController
{
use ProfileMinPriceTrait;
private Request $request;
public function __construct(
private ProfileBotHelper $profileBotHelper,
private ProfileAvatar $profileAvatar,
private ResponsiveAssetsService $responsiveAssetsService,
RequestStack $requestStack,
)
{
$this->request = $requestStack->getCurrentRequest();
}
public function getRecommendations(City $city, int $count = 10, string $imageSize = '357x500', string $exclude = ''): Response
{
$parameters = [];
$data = $this->request->getContent();
$data = json_decode($data, true);
$viewedProfiles = $data['viewed_profiles'] ?? [];
$viewedRecommendations = $data['viewed_recommendations'] ?? [];
$this->profileBotHelper->setViewedProfiles($viewedProfiles);
if ($this->profileBotHelper->hasMinimumNeededViewedProfilesCount()) {
$exclude = explode(',', $exclude);
$profiles = $this->profileBotHelper->getRecommendations($city, null, $viewedProfiles, $viewedRecommendations, $exclude, $count, Genders::FEMALE);
$locale = $this->request->getLocale() ?: 'ru';
$profiles = array_map(function (Profile $profile) use ($city, $imageSize, $locale): array {
$avatar = $this->profileAvatar->getAvatar($profile);
return [
'id' => $profile->getId(),
'name' => $profile->getName()->getTranslation('ru'),
'url' => $this->generateUrl('profile_preview.page', ['city' => $city->getUriIdentity(), 'profile' => $profile->getUriIdentity()]),
'image' => $avatar
? $this->responsiveAssetsService->getResponsiveImageUrl($this->profileAvatar->getAvatar($profile)->getPath(), 'profile_media', $imageSize, 'jpg')
: '',
'approved' => $profile->isApproved(),
'station' => $profile->getPrimaryStation()?->getName()->getTranslation($locale),
'age' => $profile->getPersonParameters()->getAge(),
'phone' => $profile->getPhoneNumber(),
'price' => $this->getMinPrice($profile->getApartmentsPricing(), $profile->getTakeOutPricing()),
];
}, $profiles);
$parameters['profiles'] = $profiles;
$parameters['coeffs_debug'] = $this->profileBotHelper->getCoeffsDataDebug();
$parameters['viewed_recommendations_debug'] = $this->profileBotHelper->getViewedRecommendationsDataDebug();
} else {
$parameters['viewed_profiles_count'] = $this->profileBotHelper->viewedProfilesCount();
$parameters['needed_viewed_profiles_count'] = $this->profileBotHelper->minimumNeededViewedProfilesCount();
}
// return $this->render('BotHelper/profile_bot_helper_debug.html.twig', $parameters);
return $this->json($parameters);
}
/**
* @deprecated хранение просмотренных анкет и рекомендаций вынесено в localStorage, соответственно и функционал
* startOver (сброс сохраненныъ просмотренных страниц анкет) вынесен туда
*/
public function startOver(City $city): Response
{
return $this->forward('App\Controller\ProfileBotHelperController::getRecommendations', [
'city' => $city,
]);
}
}