<?php
namespace App\Controller\ReverseSync\Proxy\Opportunity;
use App\Controller\ActionRequiresCrmEnabledInterface;
use App\Entity\Channel\Channel;
use App\Entity\Channel\Company;
use App\Entity\Crm\Opportunity\Opportunity;
use App\Enum\Serialization\OpportunitySerializationGroups;
use App\Repository\Crm\Opportunity\OpportunityRepository;
use Doctrine\ORM\QueryBuilder;
use Drosalys\Bundle\ApiBundle\Filter\Attributes\Filterable;
use Drosalys\Bundle\ApiBundle\Pagination\Attributes\Paginable;
use Drosalys\Bundle\ApiBundle\Routing\Attributes\Get;
use Drosalys\Bundle\ApiBundle\Serializer\Attributes\Serializable;
use Nellapp\Bundle\SDKBundle\DataSync\Form\Filter\CollectionFilter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class CompanyOpportunitiesAction extends AbstractController implements ActionRequiresCrmEnabledInterface
{
public function __construct(
private OpportunityRepository $opportunityRepository,
) {}
#[Get('/proxy/channels/{channelId}/company/{companyId}/opportunities', name: 'proxy_channel_company_opportunities')]
#[ParamConverter('channel', options: ['id' => 'channelId'])]
#[ParamConverter('company', options: ['id' => 'companyId'])]
#[Serializable(groups: [OpportunitySerializationGroups::API_COLLECTION])]
#[Paginable(Opportunity::class, limit: 50, maxLimit: 50)]
#[Filterable(CollectionFilter::class)]
#[IsGranted('ROLE_USER')]
public function __invoke(Channel $channel, Company $company): QueryBuilder
{
return $this->opportunityRepository->queryByChannelAndCompany($channel, $company, archived: false);
}
}