|
86617
|
2972
|
10
|
2026-05-28T15:03:05.598746+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980585598_m1.jpg...
|
Alfred
|
Alfred
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
klkk
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"klkk","depth":1,"bounds":{"left":0.26180556,"top":0.16777778,"width":0.4763889,"height":0.05888889},"on_screen":true,"value":"klkk","help_text":"Alfred Search","role_description":"text field","is_enabled":true,"is_focused":true}]...
|
5284882175658255433
|
5284882175658255433
|
typing_pause
|
hybrid
|
NULL
|
klkk
IAlIAlSlackFileEditViewGoActivity MonitorAll klkk
IAlIAlSlackFileEditViewGoActivity MonitorAll ProcessesProcess Namekernel_taskPhpStormreplaydWindowServerPostman Helper (Renderer)FirefoxscreenpipeFirefoxCP Isolated Web ContentcoreaudiodFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentbluetoothdActivity MonitorFirefox GPU HelperFirefoxCP Isolated Web ContentNotion Calendar Helper (Renderer)launchservicesdlanguage_server_macos_armWispr FlowFirefoxCP Isolated Web ContentiTerm2ClaudeSlack Helper (Renderer)HistoryWindowHelp% CPUCPU TimeCursorUlViewService (Not Responding)Wispr Flow Helper (Renderer)Wispr FlowFirefoxCP Isolated Web ContentKarabiner-Core-ServiceThreads138,823:32:02,6155912'klkSearch Google for 'klk'Search Amazon for 'klk'Search Wikipedia for 'klk'3,90:09,0520:05,56128:31,912:23:41,5916:20,729:55,711028281:03:25,5610:20,823:49,34154351719:24,701:04:30,5323928:51,3659:37,4166245:54,415:17,92521501:23,5442:45,922420:29,9316System:User:Idle:53,80%29,97%16,23%CPUMemoryEnelIdle Wake-Ups11919KD28542202229812381811156614752FilesLater..•More+CPUED→Jiminny ...# infrastructure_dev# thank-yous# the_people_of jimi...• Direct messagesEL. Iliyana NetsevaEo Vasil Vasilev&. Stefka Stoyanovao Stoyan TomovEo Petko KashinskiGalya Dimitrova: Todor StamatovRo Steliyan Georgievto Ves% MiraP.. Nikolay Yankovdo James GrahamE Lukas Kovalik y...::: AppsJira Cloud(all100% <78• Thu 28 May 18:03:05Describe what you are looking forlliyana Netseva• Messagest Add canvas+nyand ivetseva SueriMima li prichina tolToday~raveno po tozi nachin iliprosto taka e napraveno nakoga₴2Lukas Kovalik 3:05 PMне знам, композитен филтьр е може би трябвада си настроиш нещата и после да направишедна заявка (Asked by например)883гука не съм сигурен, по-скоро е за продуктdiyana Netseva 4:00 PMok, thank youlliyana Netseva 5:45 PMИмам питане и се чудя към кого мога да сеобърна?става дума за deal insightsLukas Kovalik 5:54 PMПитай, ако мога ще отговоряlliyana Netseva 5:56 PMимам сделка която е със статус won но е вclosed losttova e ID-to 04a9cfad-2c87-4453-9e72-20aeb78ccf8d na sdelkataLukas Kovalik 6:00 PMUS или EU (edited)lliyana Netseva 6:01 PMeuMessage Iliyana Netseva...
|
86616
|
NULL
|
NULL
|
NULL
|
|
86616
|
2972
|
9
|
2026-05-28T15:03:02.842231+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980582842_m1.jpg...
|
PhpStorm
|
faVsco.js – users [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
<null>...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"A","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.008333334,"height":0.03},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Select All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"18026","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"18026","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4348430118138470265
|
46329375885001703
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
<null>...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86615
|
2972
|
8
|
2026-05-28T15:02:58.603196+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980578603_m1.jpg...
|
PhpStorm
|
faVsco.js – users [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
<null>
Alex Bogumil
Alex Bogumil
<null>
[EMAIL]
[EMAIL]
<null>
<null>
<null>
<null>
1
1
<null>
<null>
<null>
<null>
<null>
<null>
<null>
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
<null>
0
0
<null>...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"A","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.008333334,"height":0.03},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Select All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"18026","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"18026","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"Alex Bogumil","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"Alex Bogumil","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"alex.bogumil@cognitivecredit.com","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"alex.bogumil@cognitivecredit.com","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"1","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"1","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"0","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"0","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7289310480411377297
|
46250228227670503
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
<null>
Alex Bogumil
Alex Bogumil
<null>
[EMAIL]
[EMAIL]
<null>
<null>
<null>
<null>
1
1
<null>
<null>
<null>
<null>
<null>
<null>
<null>
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
<null>
0
0
<null>...
|
86613
|
NULL
|
NULL
|
NULL
|
|
86614
|
2973
|
27
|
2026-05-28T15:02:58.084626+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980578084_m2.jpg...
|
PhpStorm
|
faVsco.js – users [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
18026
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
Alex Bogumil
Alex Bogumil
Alex Bogumil
Alex Bogumil
[EMAIL]
[EMAIL]
Alex Bogumil
<null>
<null>
Alex Bogumil
1
1
18026
<null>
<null>
Alex Bogumil
<null>
<null>
Alex Bogumil
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
Alex Bogumil
0
0
18026
<null>
<null>
Alex Bogumil
Alex Bogumil
<null>
<null>
18026
<null>
<null>
Alex Bogumil
<null>...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"A","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.0039893617,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Select All","depth":4,"bounds":{"left":0.37666222,"top":0.14365523,"width":0.1419548,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"18026","depth":6,"bounds":{"left":0.51894945,"top":0.16520351,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"18026","depth":7,"bounds":{"left":0.51894945,"top":0.16520351,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"18026","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"18026","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":6,"bounds":{"left":0.51894945,"top":0.1867518,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":7,"bounds":{"left":0.51894945,"top":0.1867518,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Alex Bogumil","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"Alex Bogumil","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"Alex Bogumil","depth":6,"bounds":{"left":0.51894945,"top":0.20830008,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"Alex Bogumil","depth":7,"bounds":{"left":0.51894945,"top":0.20830008,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Alex Bogumil","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"Alex Bogumil","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"alex.bogumil@cognitivecredit.com","depth":6,"bounds":{"left":0.51894945,"top":0.22984837,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"alex.bogumil@cognitivecredit.com","depth":7,"bounds":{"left":0.51894945,"top":0.22984837,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Alex Bogumil","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"Alex Bogumil","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.25139666,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.25139666,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Alex Bogumil","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"Alex Bogumil","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"1","depth":6,"bounds":{"left":0.51894945,"top":0.27294493,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"1","depth":7,"bounds":{"left":0.51894945,"top":0.27294493,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"18026","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"18026","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.29449323,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.29449323,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Alex Bogumil","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"Alex Bogumil","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.3160415,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.3160415,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Alex Bogumil","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"Alex Bogumil","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png","depth":6,"bounds":{"left":0.51894945,"top":0.33758977,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png","depth":7,"bounds":{"left":0.51894945,"top":0.33758977,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Alex Bogumil","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"Alex Bogumil","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"0","depth":6,"bounds":{"left":0.51894945,"top":0.35913807,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"0","depth":7,"bounds":{"left":0.51894945,"top":0.35913807,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"18026","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"18026","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.38068634,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.38068634,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Alex Bogumil","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"Alex Bogumil","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Alex Bogumil","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"Alex Bogumil","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.4237829,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.4237829,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"18026","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"18026","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.44533122,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.44533122,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Alex Bogumil","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"Alex Bogumil","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.4668795,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"}]...
|
-3779330215267972859
|
50692796369637863
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
18026
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
Alex Bogumil
Alex Bogumil
Alex Bogumil
Alex Bogumil
[EMAIL]
[EMAIL]
Alex Bogumil
<null>
<null>
Alex Bogumil
1
1
18026
<null>
<null>
Alex Bogumil
<null>
<null>
Alex Bogumil
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
Alex Bogumil
0
0
18026
<null>
<null>
Alex Bogumil
Alex Bogumil
<null>
<null>
18026
<null>
<null>
Alex Bogumil
<null>...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86613
|
2972
|
7
|
2026-05-28T15:02:57.599358+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980577599_m1.jpg...
|
PhpStorm
|
faVsco.js – users [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
<null>
Alex Bogumil
Alex Bogumil
<null>
[EMAIL]
[EMAIL]
<null>
<null>
<null>
<null>
1
1
<null>
<null>
<null>
<null>
<null>
<null>
<null>
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
<null>
0
0
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
8346
8346
<null>
<null>
<null>
<null>
555
555
<null>
2090
2090
<null>
Europe/London
Europe/London
<null>
en_GB
en_GB...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"A","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.008333334,"height":0.03},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Select All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"18026","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"18026","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"Alex Bogumil","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"Alex Bogumil","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"alex.bogumil@cognitivecredit.com","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"alex.bogumil@cognitivecredit.com","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"1","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"1","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"0","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"0","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"8346","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"8346","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"555","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"555","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"2090","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"2090","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"Europe/London","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"Europe/London","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"en_GB","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"en_GB","depth":7,"on_screen":true,"role_description":"text"}]...
|
8564130068820156099
|
45124328337610149
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
<null>
Alex Bogumil
Alex Bogumil
<null>
[EMAIL]
[EMAIL]
<null>
<null>
<null>
<null>
1
1
<null>
<null>
<null>
<null>
<null>
<null>
<null>
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
<null>
0
0
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
<null>
8346
8346
<null>
<null>
<null>
<null>
555
555
<null>
2090
2090
<null>
Europe/London
Europe/London
<null>
en_GB
en_GB...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86612
|
2973
|
26
|
2026-05-28T15:02:57.421925+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980577421_m2.jpg...
|
PhpStorm
|
faVsco.js – users [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
[EMAIL]
Alex Bogumil
Alex Bogumil
[EMAIL]
[EMAIL]
[EMAIL]
[EMAIL]
<null>
<null>
<null>
1
1
<null>
<null>
<null>
<null>
<null>
<null>
<null>
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
<null>
0
0
<null>
<null>
<null>...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"A","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.0039893617,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Select All","depth":4,"bounds":{"left":0.37666222,"top":0.14365523,"width":0.1419548,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"18026","depth":6,"bounds":{"left":0.51894945,"top":0.16520351,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"18026","depth":7,"bounds":{"left":0.51894945,"top":0.16520351,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":6,"bounds":{"left":0.51894945,"top":0.1867518,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":7,"bounds":{"left":0.51894945,"top":0.1867518,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"alex.bogumil@cognitivecredit.com","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"alex.bogumil@cognitivecredit.com","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"Alex Bogumil","depth":6,"bounds":{"left":0.51894945,"top":0.20830008,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"Alex Bogumil","depth":7,"bounds":{"left":0.51894945,"top":0.20830008,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"alex.bogumil@cognitivecredit.com","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"alex.bogumil@cognitivecredit.com","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"alex.bogumil@cognitivecredit.com","depth":6,"bounds":{"left":0.51894945,"top":0.22984837,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"alex.bogumil@cognitivecredit.com","depth":7,"bounds":{"left":0.51894945,"top":0.22984837,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"alex.bogumil@cognitivecredit.com","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"alex.bogumil@cognitivecredit.com","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.25139666,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.25139666,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"1","depth":6,"bounds":{"left":0.51894945,"top":0.27294493,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"1","depth":7,"bounds":{"left":0.51894945,"top":0.27294493,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.29449323,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.29449323,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.3160415,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.3160415,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png","depth":6,"bounds":{"left":0.51894945,"top":0.33758977,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png","depth":7,"bounds":{"left":0.51894945,"top":0.33758977,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"0","depth":6,"bounds":{"left":0.51894945,"top":0.35913807,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"0","depth":7,"bounds":{"left":0.51894945,"top":0.35913807,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.38068634,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.38068634,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"}]...
|
218167611286629272
|
46250228227671015
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
[EMAIL]
Alex Bogumil
Alex Bogumil
[EMAIL]
[EMAIL]
[EMAIL]
[EMAIL]
<null>
<null>
<null>
1
1
<null>
<null>
<null>
<null>
<null>
<null>
<null>
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
<null>
0
0
<null>
<null>
<null>...
|
86610
|
NULL
|
NULL
|
NULL
|
|
86611
|
2972
|
6
|
2026-05-28T15:02:56.183501+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980576183_m1.jpg...
|
PhpStorm
|
faVsco.js – users [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
<null>
Alex Bogumil
Alex Bogumil
<null>
[EMAIL]
[EMAIL]
<null>
<null>
<null>
<null>
1
1
<null>
<null>
<null>
<null>
<null>
<null>
<null>
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
<null>
0
0
<null>...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"A","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":5,"bounds":{"left":0.0,"top":0.0,"width":0.008333334,"height":0.03},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Select All","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"18026","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"18026","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"Alex Bogumil","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"Alex Bogumil","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"alex.bogumil@cognitivecredit.com","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"alex.bogumil@cognitivecredit.com","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"1","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"1","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"0","depth":6,"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"0","depth":7,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.0,"top":0.0,"width":0.4826389,"height":0.024444444},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7289310480411377297
|
46250228227670503
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
<null>
Alex Bogumil
Alex Bogumil
<null>
[EMAIL]
[EMAIL]
<null>
<null>
<null>
<null>
1
1
<null>
<null>
<null>
<null>
<null>
<null>
<null>
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
/ae5f4b0f-56f5-4a09-b107-ab0ccf062b0d/avatars/a70d6aa1-4166-40b4-bc46-32ad229411c6.png
<null>
0
0
<null>...
|
86597
|
NULL
|
NULL
|
NULL
|
|
86610
|
2973
|
25
|
2026-05-28T15:02:55.978563+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980575978_m2.jpg...
|
PhpStorm
|
faVsco.js – users [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
<null>
Alex Bogumil
Alex Bogumil
<null>
[EMAIL]
[EMAIL]
<null>
<null>
<null>
<null>
1
1
<null>
<null>
<null>
<null>...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"A","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.0039893617,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Select All","depth":4,"bounds":{"left":0.37666222,"top":0.14365523,"width":0.1419548,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"18026","depth":6,"bounds":{"left":0.51894945,"top":0.16520351,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"18026","depth":7,"bounds":{"left":0.51894945,"top":0.16520351,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":6,"bounds":{"left":0.51894945,"top":0.1867518,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"a70d6aa1-4166-40b4-bc46-32ad229411c6","depth":7,"bounds":{"left":0.51894945,"top":0.1867518,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"Alex Bogumil","depth":6,"bounds":{"left":0.51894945,"top":0.20830008,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"Alex Bogumil","depth":7,"bounds":{"left":0.51894945,"top":0.20830008,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"alex.bogumil@cognitivecredit.com","depth":6,"bounds":{"left":0.51894945,"top":0.22984837,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"alex.bogumil@cognitivecredit.com","depth":7,"bounds":{"left":0.51894945,"top":0.22984837,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.25139666,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.25139666,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"1","depth":6,"bounds":{"left":0.51894945,"top":0.27294493,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"1","depth":7,"bounds":{"left":0.51894945,"top":0.27294493,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.29449323,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.29449323,"width":0.2330452,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"<null>","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.23105054,"height":0.0},"on_screen":false,"value":"<null>","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-8989533225923136263
|
46188655576515559
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
18026
18026
<null>
a70d6aa1-4166-40b4-bc46-32ad229411c6
a70d6aa1-4166-40b4-bc46-32ad229411c6
<null>
Alex Bogumil
Alex Bogumil
<null>
[EMAIL]
[EMAIL]
<null>
<null>
<null>
<null>
1
1
<null>
<null>
<null>
<null>...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86609
|
2973
|
24
|
2026-05-28T15:02:54.194786+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980574194_m2.jpg...
|
PhpStorm
|
faVsco.js – users [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Querying…...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Querying…","depth":3,"bounds":{"left":0.51329786,"top":0.30726257,"width":0.021941489,"height":0.013567438},"on_screen":true,"role_description":"text"}]...
|
3364740749878363864
|
46329925640782823
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Querying…...
|
86608
|
NULL
|
NULL
|
NULL
|
|
86608
|
2973
|
23
|
2026-05-28T15:02:53.774655+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980573774_m2.jpg...
|
PhpStorm
|
faVsco.js – users [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Processing…
Select All
id = 18026
Editor
0 rows
of 0+
Reload Page
Table Result Auto Refresh
Cancel Running Statements
Add Row
Delete Rows...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Processing…","depth":3,"bounds":{"left":0.5113032,"top":0.30726257,"width":0.026263298,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Select All","depth":4,"bounds":{"left":0.37666222,"top":0.14365523,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"id = 18026","depth":4,"bounds":{"left":0.3863032,"top":0.1245012,"width":0.08045213,"height":0.014365523},"on_screen":true,"value":"id = 18026","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Editor","depth":4,"bounds":{"left":0.48636967,"top":0.1245012,"width":0.18151596,"height":0.014365523},"on_screen":true,"role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"0 rows","depth":4,"bounds":{"left":0.37799203,"top":0.09976058,"width":0.020611702,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"of 0+","depth":4,"bounds":{"left":0.39860374,"top":0.09976058,"width":0.011968086,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reload Page","depth":4,"bounds":{"left":0.41289893,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Table Result Auto Refresh","depth":4,"bounds":{"left":0.42154256,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.43018618,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Add Row","depth":4,"bounds":{"left":0.44115692,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Delete Rows","depth":4,"bounds":{"left":0.44980052,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8619029698415800637
|
46400294385026023
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Processing…
Select All
id = 18026
Editor
0 rows
of 0+
Reload Page
Table Result Auto Refresh
Cancel Running Statements
Add Row
Delete Rows...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86607
|
2973
|
22
|
2026-05-28T15:02:52.548542+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980572548_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8569994499127135030
|
-3986301007428073024
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logMEINSTALLMOwolcnnedvilycrmbalo.ongy uimaeumyociwiceonyUucrct winscwecuscorolo.oh(C) ProspectCache.php x(C)) Camrica choM.INTERNALWEBHOOK SETU? maRocoraSelector.pnpiminny storaceclass rrospecccache0182 436 ^ 4Malicenses.mapublic function findByProspectIdentifier(Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMARSNAIMS M.SabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,17261721reurn nuli sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNTSdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. Saoesant. Sytemallloranesv =0 Cemtches and Consolosv @ Database ConsolesSaheachelt" contact"sinstanceor Contactal=172eSaccount = Sahlachel'contact' o>ae-AccountoSaheachelt'accounte SaccountvAtUE1752 V# console cUA DEAL RISKS (EUSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationmeutsunSarvicaei7) Outputjiminny.teamsTx,vontameAi W1rowv5OUTre Aientn4QMAAO& console 1 $ 586 mgy2liminny@localhostA HSJlocalOidMuuid CuuTorSSS4a69546S-aeSf-4b8f-b107-abAccfA62b8donnen jalAen.yhoponDstatusactve# ConsoloASTAGINGR Concala,noakorAn partner ic) nangCognftive CreditIsluacocnte ve-credhunhota nathtransparent_photo_path( conference_ photo_pathsnull>stripe idcnulla1 eon.io475)I default plavbook so2134calendar providergoogleeimannentt cancont mad.IR sanl2 tenant id(Dnotification providerslackMiscin providerraw rotriouad ctartina from in e 60 me loyoatim 162 me totthing: 007 meTO0У L7ino co mey toiucioServiceTest+0.SF [minny@localhost)coneolperconsole (STAGiNG"Do liminny vont aetrone031 49 A28 У 3 У 108 ^WHERE u.tean id = 187 and sa.provider = 'salesforce':select * fron activities where id = 31264367colont & tmn Mntsnte whond dr kockzo.whons id r lelzkie.'account id' = 4156632, 'contact id' = 6331639, 'opportunity id' = 4843610updated at' = 2026-05-22 87:16:17 where "id' = 31264367)*select * fron text relays where created at > '2026-05-01':Sere"onmeweres order owo desthSerer"on usens where nareakesuirssPLECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-28aeb78ccf8d*) = uuidselect * fron teaca where 1id = 555Cecsdales Orceancworceoeionhtoreachsoartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorvisreconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...): This say call Salesforce::matchByDomainfSteo 7: Domain Search Triaaers Doportunity Syncnownthnrthnde.noooudt @hxacdcalwiithraatadonodrtun// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopoortunttyScrProvideridcauls inportupportuntty+ CCooeS? AdaotivCSV vллл00NMMad Tosma 172110 lITS-9/ens/...
|
86606
|
NULL
|
NULL
|
NULL
|
|
86606
|
2973
|
21
|
2026-05-28T15:02:49.142335+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980569142_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.37799203,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.38663563,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.39760637,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.40625,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.41489363,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.42586437,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"bounds":{"left":0.4368351,"top":0.09896249,"width":0.024268618,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.46343085,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"bounds":{"left":0.4744016,"top":0.09896249,"width":0.029587766,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.64261967,"top":0.09896249,"width":0.02825798,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2043043601995049886
|
46400311564895207
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86605
|
2973
|
20
|
2026-05-28T15:02:46.838416+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980566838_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"}]...
|
5547871007676494740
|
-8706354959493133372
|
visual_change
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
rnpstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logMEINSTALLMOwolcnnedvityCimbald.ongy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php xM.INTERNALWEBHOOK SETU? maRocoraselcctor.ongminny storaceclass rrospecccache0182 436 ^ 4Malicenses.mapublic function findByProspectIdentifier(Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs maSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726reurn nuli sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isMAWISAHOeK SinEoiNGMOSU1724SdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. Saonsanh Sytemall Uibrariesv =0 Cemtches and Consolosv @ Database ConsolesSaheachelt" contact"sinstanceor Contactal=172eSaccount = Sahlachel'contact' o>ae-AccountoSaheachelt'account"e SaccountvAtU=1731# console cUA DEAL RISKS (EUSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationmeutsunSarvicaei7) Output1jiminny.teamsvontameAi W 1rowv 5 00+=SQ4 TcAuto4QM0A0consolay2liminny@localhostA HSJlocalOidMuuid CuuTorSSS4a69546S-aeSf-4b8f-b107-abAccfA62b8donnen jal88n.yhoponDstatusActve# consoloASTAGING# Concald,noakorAn partner ic) nangCognftive CreditIsluacocnte ve-credhunhota nathtransparent_photo_path( conference_ photo_pathsnull>stripe idcnult1 eonsio475I default plavbook so2134calendar providergoogleeimannenlt cancont marCoinlIR sanl2 tenant id(Dnotification providerslackMiscin proviidertt//Wow.m./llron.noet/twiow18.0ServiceTestInu Lo moy touLis+0.SF [minny@localhost)conealapeconsole ISTAGiNG"Do liminny vontastrosm031 49 A28 У 3 У 108 ^WHERE u.tean id = 187 and sa.provider = 'salesforce':select * fron activities where id = 31264367colont & tmn Mntsnte whond dr kockzo.id- elzkie.account id' = 4156632, 'contact id' = 6331639, "opportunity id' = 4843610updated at' = 2026-05-22 87:16:17 where "id' = 31264367)select * fron text relays where created at > '2026-05-01':Sere"onmeweres order owo desthSerer"on usens where nareakesuirSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-28aeb78ccf8d*) = uuidselect * fron teasa where 1id = 555%Cecsdales OrcnnworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrcons This say call Salesforce::matchByDomainfSteo 7: Domain Search Triaaers Doportunity Syncnownthnrthnde.noooudt @hxacdcalwiithraatadonodrtun// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopportunttylScrProvideridcauls inportopportunity+ CCooeS? AdaotivNMMad Tosma 172110 ITS-9/ens/...
|
86604
|
NULL
|
NULL
|
NULL
|
|
86604
|
2973
|
19
|
2026-05-28T15:02:45.252725+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980565252_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5582423643801155883
|
-8994321436789994556
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logSF [minny@localhost)coneolpeMEINSTALLMOwalenaedvityCimbalo.ongyuimacumyociiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x©) Service.phoconsole (STAGING"M.INTERNALWEBHOOK SETU? maRocordselector.on:liminny storaceDo liminny vTacoone aetroseclass rrospecccacheARAZWA3BAV031 A9 A28 M 3 У108 A VMalicenses.maWHERE u.tean id = 187 and sa.provider = 'salesforce':public function findByProspectIdentifier(Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs maSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717select * fron activities where id = 31264367colont & Umn mntsnte whond dr kxzkzo.Sif Cenpty(array filter(SdbGache)))Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726colont & Eoan Annantunitjoe whono id -elzkne.'account id' = 4156632, 'contact id' = 6331639, 'opportunity id' = 4843610'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*reurn nuli sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNT17241729SdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. Saoesaselect * fron text relays where created at > '2026-05-01':Serr"oncevetes order oydescnt. Sytemallloranesv =0 Cemtches and Consolosv @ Database ConsolesV AEUSaheachelt" contact"sinstanceor Contactal=172eSerer"hon usens wher# console cUA DEAL RISKS (EUmeutsun3686899Saccount = Sahrachel'contact" o>ae+AccountolSaheachelt'accounte Saccount173d1731 2SELECT * FROM oppontunities WHERE uufd to bin(*06a9cfad-2687-4453-9672-28seb78c6f8d0) = uufd:3id = 555Sopportunity = Sthis->findüpportunityinContactRoles(SconsCuricaulSorOTaLeSarvicaeiтOС.лvontameACiatAt Mariano& console 1 $ 470 mgy2liminny@localhostA HSJJocalDriver MariaDR ConnactorAl lver 33.2 JORCAy лopon# ConsoloASTAGINGR Concala,noakorTO0У L7Inu co woy toukiServiceTest+0.Cecsdales Orcnnworceoeionhtoreachsoartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorvisreconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...): This say call Salesforce::matchByDomainfSteo 7: Domain Search Triaaers Doportunity Syncnownthnrthnde.noooudt @hxacdcalwhithraatadlonoortun.cascadeCommandScraservice-syncopportunttylScrProviderlocauls inportupportunttyS? AdaotivNMMuld Tosme1720:40 126 charelAens?...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86603
|
2973
|
18
|
2026-05-28T15:02:42.745766+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980562745_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20 rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logSF [minny@localhost)coneolpeMEINSTALLMOwalenaedvityCimbalo.ongyuimacumyociiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x(C)) Camrica chotconsole ISTAGING"M.INTERNALWEBHOOK SETU? maRocordselector.on:liminny storaceDo liminny vTacoone aetroseclass rrospecccacheCARAZWA3BAY031 A9 A28 M 3 У108 A VMalicenses.maWHERE u.tean id = 187 and sa.provider = 'salesforce':public function findByProspectIdentifier(Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs maSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717select * fron activities where id = 31264367colont & Umn mntsnte whond dr kxzkzo.Sif Cenpty(array filter(SdbGache)))Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726account id' = 4156632, 'contact id' = 6331639, "opportunity id' = 4843610'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*reurn nuli sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNT17241729SdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. Saoesaselect * fron text relays where created at > '2026-05-01':Serr"oncevetes order oydescht. Sytemallloraresv =0 Cemtches and Consolosv @ Database ConsolesV AEUSaheachelt" contact"sinstanceor Contactal=172eSerer"on usens where nareakesuirs# console cUA DEAL RISKS (EUmeutsun3686899Saccount = Sahrachel'contact" o>ae+AccountolSaheachelt'accounte Saccount=1731 vSELECT * FROM oppontunities WHERE uufd to bin(:04a9cfad-2c87-4453-9672-28seb78ccf8d*) = uufd:select * fron teane where 1id = 555:1Sopportunity = Sthis->findüpportunityinContactRoles(SconsCuricaulSorOTaLeSarvicaeiтOС.лvontameACiatAt Mariano& console 1 $ 470 mgy2liminny@localhostA HSJlocalDriver MariaDR ConnactorAl lver 33.2 JORCAy лopon# consoloASTAGINGR Concala,noakorTO0У L7Inu Lo woy touLServiceTest+0.Cecsdales Orceancworceoeionhtoreachsoartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorvisreconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...): This say call Salesforce::matchByDomainfSteo 7: Domain Search Triaaers Doportunity Syncnownthnrthnde.noooudt @hxacdcalwiithraatadonodrtunScraservice-syncopportunttylScrProviderlocauls inportupportuntty+ CCooeS? AdaotivNMMaid Tosme172128LTe-9Aens?...
|
NULL
|
-2872692865230650766
|
NULL
|
click
|
ocr
|
NULL
|
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20 rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logSF [minny@localhost)coneolpeMEINSTALLMOwalenaedvityCimbalo.ongyuimacumyociiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x(C)) Camrica chotconsole ISTAGING"M.INTERNALWEBHOOK SETU? maRocordselector.on:liminny storaceDo liminny vTacoone aetroseclass rrospecccacheCARAZWA3BAY031 A9 A28 M 3 У108 A VMalicenses.maWHERE u.tean id = 187 and sa.provider = 'salesforce':public function findByProspectIdentifier(Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs maSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717select * fron activities where id = 31264367colont & Umn mntsnte whond dr kxzkzo.Sif Cenpty(array filter(SdbGache)))Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726account id' = 4156632, 'contact id' = 6331639, "opportunity id' = 4843610'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*reurn nuli sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNT17241729SdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. Saoesaselect * fron text relays where created at > '2026-05-01':Serr"oncevetes order oydescht. Sytemallloraresv =0 Cemtches and Consolosv @ Database ConsolesV AEUSaheachelt" contact"sinstanceor Contactal=172eSerer"on usens where nareakesuirs# console cUA DEAL RISKS (EUmeutsun3686899Saccount = Sahrachel'contact" o>ae+AccountolSaheachelt'accounte Saccount=1731 vSELECT * FROM oppontunities WHERE uufd to bin(:04a9cfad-2c87-4453-9672-28seb78ccf8d*) = uufd:select * fron teane where 1id = 555:1Sopportunity = Sthis->findüpportunityinContactRoles(SconsCuricaulSorOTaLeSarvicaeiтOС.лvontameACiatAt Mariano& console 1 $ 470 mgy2liminny@localhostA HSJlocalDriver MariaDR ConnactorAl lver 33.2 JORCAy лopon# consoloASTAGINGR Concala,noakorTO0У L7Inu Lo woy touLServiceTest+0.Cecsdales Orceancworceoeionhtoreachsoartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorvisreconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...): This say call Salesforce::matchByDomainfSteo 7: Domain Search Triaaers Doportunity Syncnownthnrthnde.noooudt @hxacdcalwiithraatadonodrtunScraservice-syncopportunttylScrProviderlocauls inportupportuntty+ CCooeS? AdaotivNMMaid Tosme172128LTe-9Aens?...
|
86602
|
NULL
|
NULL
|
NULL
|
|
86602
|
2973
|
17
|
2026-05-28T15:02:38.796016+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980558796_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
9
28
3
108
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.37799203,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.38663563,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.39760637,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.40625,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.41489363,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.42586437,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"bounds":{"left":0.4368351,"top":0.09896249,"width":0.024268618,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.46343085,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"bounds":{"left":0.4744016,"top":0.09896249,"width":0.029587766,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.64261967,"top":0.09896249,"width":0.02825798,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"31","depth":4,"bounds":{"left":0.6007314,"top":0.123703115,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"9","depth":4,"bounds":{"left":0.61236703,"top":0.123703115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"28","depth":4,"bounds":{"left":0.62234044,"top":0.123703115,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.6343085,"top":0.123703115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"108","depth":4,"bounds":{"left":0.6442819,"top":0.123703115,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.65791225,"top":0.12210695,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.66522604,"top":0.12210695,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;\nselect * from teams where id = 555;","depth":4,"on_screen":true,"value":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;\nselect * from teams where id = 555;","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
814599322636983470
|
2074680717582186093
|
click
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
9
28
3
108
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86601
|
2973
|
16
|
2026-05-28T15:02:36.831164+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980556831_m2.jpg...
|
PhpStorm
|
faVsco.js – crm_configurations [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20 rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-lMEINSTALLMOM.INTERNALWEBHOOK SETU? maliminny storaceMalicenses.maMakere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs mai sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isMAWISAHOOK SinEoiNGMOSUnt. Sytemallloranesv =0 Cemtches and Consolosv @ Database ConsolesV AEU# console cUA DEAL RISKS (EUmeutsun6655888Sarvicaei+oc|exvontameA& console 1 $ 470 mguii crm_configurations 1 $ 326 mgylminnusoes naetA HSJJocalA SPV A PROD# ConcalaV A STAGINGH Concal"noakorInu co moy to:uLioServiceTest+0.custonlosteraveuosSF [minny@localhost)HS Jocal (jiminny@localhost)# console pronwwucrco Cimocwiccuccorolor.oh(C) ProspectCache.php x(C) Service-prp# console (EU"iii crm configurations (EU](X) A console [STAGING)HrowvyOU+=9g4DoLQшEOgclass rrospecccacheARAZWAK3BAVY• AHERE 0 = 47=• URUERBpublic function findByProspectIdentifier(SabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 2id(Duuid (UUID with time-low and tine-high swapped) :47531e98967-e616-4852-b7de-889bc3ed24baSif Cenpty(array filter(SdbGache)))Sthie-ssendDatadooStote( resulE CeLEC-LOOKUP PESULT MISS, Sconficuration-3oetProvtllanoiehoreuser3 providenneucn nulB editiontm instanceSabeachel"contacte SthisosstalebecordvalbidntonetenStaleScbeachelt contactSdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. SaceSer!D is sandboxI versionSdheachel" contact"sinstanceor Contactalinstalled_app_versionSaccount = Sahlachel'contact' o>ae-Accounto! sync_netadataSaheachelt'accounte SaccountAn sync obfect=euto sune ectivieoSopportunity = Sthis->findüpportunityinContactRoles(SconfsouracionSorOTaLe= crm_provider_id=crn_base_urtMiaet eunrah at(2826-85-28 18:02:301 Connected(2826-85-28 18:02:301 Jiminny> use Mininnv(2826-85-28 18:02-301 completed sin 61 ngFron jaminny.crn_conf-guracionsHERE OE47SLoa Sen[2826-85-28 18:02:31] 1 row retrieved starting fron 1 in 568 ms (execution: 82 ms, fetching: 486 ms)CnuLehubspotnultsnuLt45685385www.coonavecredtt.comSYLLDOeCecsdales OrceancworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorylrontSrecords = Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...): This say call Salesforce::matchByDomainfSteo 7: Domain Search Triaaers Doportunity Syncnownthnrthnde.nctoud? @lxaedcalwhithraatadlononretun// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopoortunttyScrProvideridcauls inportopportunity+ (Code S AdaotivGIU NAt nminh Maliod Windcud Tosn...
|
NULL
|
8098087482663890599
|
NULL
|
click
|
ocr
|
NULL
|
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20 rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-lMEINSTALLMOM.INTERNALWEBHOOK SETU? maliminny storaceMalicenses.maMakere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs mai sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isMAWISAHOOK SinEoiNGMOSUnt. Sytemallloranesv =0 Cemtches and Consolosv @ Database ConsolesV AEU# console cUA DEAL RISKS (EUmeutsun6655888Sarvicaei+oc|exvontameA& console 1 $ 470 mguii crm_configurations 1 $ 326 mgylminnusoes naetA HSJJocalA SPV A PROD# ConcalaV A STAGINGH Concal"noakorInu co moy to:uLioServiceTest+0.custonlosteraveuosSF [minny@localhost)HS Jocal (jiminny@localhost)# console pronwwucrco Cimocwiccuccorolor.oh(C) ProspectCache.php x(C) Service-prp# console (EU"iii crm configurations (EU](X) A console [STAGING)HrowvyOU+=9g4DoLQшEOgclass rrospecccacheARAZWAK3BAVY• AHERE 0 = 47=• URUERBpublic function findByProspectIdentifier(SabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 2id(Duuid (UUID with time-low and tine-high swapped) :47531e98967-e616-4852-b7de-889bc3ed24baSif Cenpty(array filter(SdbGache)))Sthie-ssendDatadooStote( resulE CeLEC-LOOKUP PESULT MISS, Sconficuration-3oetProvtllanoiehoreuser3 providenneucn nulB editiontm instanceSabeachel"contacte SthisosstalebecordvalbidntonetenStaleScbeachelt contactSdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. SaceSer!D is sandboxI versionSdheachel" contact"sinstanceor Contactalinstalled_app_versionSaccount = Sahlachel'contact' o>ae-Accounto! sync_netadataSaheachelt'accounte SaccountAn sync obfect=euto sune ectivieoSopportunity = Sthis->findüpportunityinContactRoles(SconfsouracionSorOTaLe= crm_provider_id=crn_base_urtMiaet eunrah at(2826-85-28 18:02:301 Connected(2826-85-28 18:02:301 Jiminny> use Mininnv(2826-85-28 18:02-301 completed sin 61 ngFron jaminny.crn_conf-guracionsHERE OE47SLoa Sen[2826-85-28 18:02:31] 1 row retrieved starting fron 1 in 568 ms (execution: 82 ms, fetching: 486 ms)CnuLehubspotnultsnuLt45685385www.coonavecredtt.comSYLLDOeCecsdales OrceancworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorylrontSrecords = Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...): This say call Salesforce::matchByDomainfSteo 7: Domain Search Triaaers Doportunity Syncnownthnrthnde.nctoud? @lxaedcalwhithraatadlononretun// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopoortunttyScrProvideridcauls inportopportunity+ (Code S AdaotivGIU NAt nminh Maliod Windcud Tosn...
|
86600
|
NULL
|
NULL
|
NULL
|
|
86600
|
2973
|
15
|
2026-05-28T15:02:33.029859+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980553029_m2.jpg...
|
PhpStorm
|
faVsco.js – crm_configurations [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
475
475
1
31e90967-e616-4852-b7de-889bc3ed24ba
31e90967-e616-4852-b7de-889bc3ed24ba
2026-05-28 15:02:20
555
555
1
<null>
<null>
1
hubspot
hubspot
2026-05-28 15:02:20
<null>
<null>
2026-05-28 15:02:20
<null>
<null>
2026-05-28 15:02:20
0
0
1
2
2
2026-05-28 15:02:20
<null>
<null>
2026-05-28 15:02:20
1
1...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"A","depth":4,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.0039893617,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Select All","depth":4,"bounds":{"left":0.37666222,"top":0.14365523,"width":0.1419548,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"475","depth":6,"bounds":{"left":0.51894945,"top":0.16520351,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"475","depth":7,"bounds":{"left":0.51894945,"top":0.16520351,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"1","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.098071806,"height":0.0},"on_screen":false,"value":"1","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"31e90967-e616-4852-b7de-889bc3ed24ba","depth":6,"bounds":{"left":0.51894945,"top":0.1867518,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"31e90967-e616-4852-b7de-889bc3ed24ba","depth":7,"bounds":{"left":0.51894945,"top":0.1867518,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"2026-05-28 15:02:20","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.098071806,"height":0.0},"on_screen":false,"value":"2026-05-28 15:02:20","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"555","depth":6,"bounds":{"left":0.51894945,"top":0.20830008,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"555","depth":7,"bounds":{"left":0.51894945,"top":0.20830008,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"1","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.098071806,"height":0.0},"on_screen":false,"value":"1","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.22984837,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.22984837,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"1","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.098071806,"height":0.0},"on_screen":false,"value":"1","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"hubspot","depth":6,"bounds":{"left":0.51894945,"top":0.25139666,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"hubspot","depth":7,"bounds":{"left":0.51894945,"top":0.25139666,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"2026-05-28 15:02:20","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.098071806,"height":0.0},"on_screen":false,"value":"2026-05-28 15:02:20","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.27294493,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.27294493,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"2026-05-28 15:02:20","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.098071806,"height":0.0},"on_screen":false,"value":"2026-05-28 15:02:20","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.29449323,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.29449323,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"2026-05-28 15:02:20","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.098071806,"height":0.0},"on_screen":false,"value":"2026-05-28 15:02:20","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"0","depth":6,"bounds":{"left":0.51894945,"top":0.3160415,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"0","depth":7,"bounds":{"left":0.51894945,"top":0.3160415,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"1","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.098071806,"height":0.0},"on_screen":false,"value":"1","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"2","depth":6,"bounds":{"left":0.51894945,"top":0.33758977,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"2","depth":7,"bounds":{"left":0.51894945,"top":0.33758977,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"2026-05-28 15:02:20","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.098071806,"height":0.0},"on_screen":false,"value":"2026-05-28 15:02:20","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"<null>","depth":6,"bounds":{"left":0.51894945,"top":0.35913807,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"<null>","depth":7,"bounds":{"left":0.51894945,"top":0.35913807,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"2026-05-28 15:02:20","depth":8,"bounds":{"left":0.27027926,"top":1.0,"width":0.098071806,"height":0.0},"on_screen":false,"value":"2026-05-28 15:02:20","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCell","text":"1","depth":6,"bounds":{"left":0.51894945,"top":0.38068634,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"cell"},{"role":"AXStaticText","text":"1","depth":7,"bounds":{"left":0.51894945,"top":0.38068634,"width":0.10006649,"height":0.0207502},"on_screen":true,"role_description":"text"}]...
|
1716292670373789226
|
334494331094926055
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
A
1
Select All
475
475
1
31e90967-e616-4852-b7de-889bc3ed24ba
31e90967-e616-4852-b7de-889bc3ed24ba
2026-05-28 15:02:20
555
555
1
<null>
<null>
1
hubspot
hubspot
2026-05-28 15:02:20
<null>
<null>
2026-05-28 15:02:20
<null>
<null>
2026-05-28 15:02:20
0
0
1
2
2
2026-05-28 15:02:20
<null>
<null>
2026-05-28 15:02:20
1
1...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86599
|
2973
|
14
|
2026-05-28T15:02:29.891387+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980549891_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20 rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logSF [minny@localhost)MEINSTALLMOwolcnnedvilycrmbalo.ongy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x# console (EU) »console (STAGiNG"M.INTERNALWEBHOOK SETU? maRecordselector.phpDo liminny viminny storaceclass rrospecccache0182 436 ^ 4031 49 A28 У 3 У 108 A VMalicenses.maWHERE u.tean id = 187 and sa.provider = 'salesforce':public function findByProspectIdentifier(Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs maSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717select * fron activities where id = 31264367select * fron contacts where id = 6331639;Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726reurn nul172117221723select * fron opportunities where id = 4843610:"account id' = 4156632, 'contact id' = 6331639, 'opportunity id' = 4843610'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*i sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNTselect * fron text relays where created at > '2026-05-01*SdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. SaoesaSere"onmeweres order owo desthnt. Sytemallloranesv =0 Cemtches and Consolosv @ Database ConsolesSaheachelt" contact"sinstanceor Contactal=172eSerer"on usens where nareakesuirSaccount = Sahlachel'contact' o>ae-AccountoTaby to comoleteW WindeurtSELECT * FROM onpontunitaies NHERE USaheachelt'accounte SaccountvAtUE1752 Vselect* Ton tesre were de 555select * fron onpontunitics whene Sid = 7842553)# console cUA DEAL RISKS (EUSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationmeutsunПІШІЕ ПЧИНSarvicaeivontameA& console 1 $ 470 mgy2liminny@localhostA HSJJocalyhopon# consoloV A STAGINGR Concala,noakorServiceTestTO0У L7inu co woy touk+0.Cecsdales OrceancworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrconsM d This nay call Salesforce::matchByDomain()Steo 7: Domain Search Traaers Doportunity Syndnownthnrthnde.noooudt @hxacdcalwiithraatadonodrtunScraservice-syncopportunttylScrProviderid# Calls importOpportunityd+ ( CodeS? Adaotiv7) Output1.jiminny.teamsTx,i W1rowv5OUSG+ TcAuto'4QM0A0OidMuuid CuuToronnen jalDstatusAn partner ic) namoIsluaunhota nathtransparent_photo_path( conference_ photo_pathstripe id1 eonsioI default plavbook socalendar providereimannenlt cancont marIR sanl2 tenant id(Dnotification providerMiscin proviiderSSS4a69546S-aeSf-4b8f-b107-abAccfA62b8d88n.ActveCognftive Creditcocnte ve-credhsnull>cnul la4752134googleslack• :CSV.TT.O0raw rotriovod ctartina tram n 075 me lordaitiw Oi me totd...
|
NULL
|
-2297755915996929358
|
NULL
|
visual_change
|
ocr
|
NULL
|
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20 rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logSF [minny@localhost)MEINSTALLMOwolcnnedvilycrmbalo.ongy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x# console (EU) »console (STAGiNG"M.INTERNALWEBHOOK SETU? maRecordselector.phpDo liminny viminny storaceclass rrospecccache0182 436 ^ 4031 49 A28 У 3 У 108 A VMalicenses.maWHERE u.tean id = 187 and sa.provider = 'salesforce':public function findByProspectIdentifier(Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs maSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717select * fron activities where id = 31264367select * fron contacts where id = 6331639;Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726reurn nul172117221723select * fron opportunities where id = 4843610:"account id' = 4156632, 'contact id' = 6331639, 'opportunity id' = 4843610'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*i sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNTselect * fron text relays where created at > '2026-05-01*SdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. SaoesaSere"onmeweres order owo desthnt. Sytemallloranesv =0 Cemtches and Consolosv @ Database ConsolesSaheachelt" contact"sinstanceor Contactal=172eSerer"on usens where nareakesuirSaccount = Sahlachel'contact' o>ae-AccountoTaby to comoleteW WindeurtSELECT * FROM onpontunitaies NHERE USaheachelt'accounte SaccountvAtUE1752 Vselect* Ton tesre were de 555select * fron onpontunitics whene Sid = 7842553)# console cUA DEAL RISKS (EUSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationmeutsunПІШІЕ ПЧИНSarvicaeivontameA& console 1 $ 470 mgy2liminny@localhostA HSJJocalyhopon# consoloV A STAGINGR Concala,noakorServiceTestTO0У L7inu co woy touk+0.Cecsdales OrceancworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrconsM d This nay call Salesforce::matchByDomain()Steo 7: Domain Search Traaers Doportunity Syndnownthnrthnde.noooudt @hxacdcalwiithraatadonodrtunScraservice-syncopportunttylScrProviderid# Calls importOpportunityd+ ( CodeS? Adaotiv7) Output1.jiminny.teamsTx,i W1rowv5OUSG+ TcAuto'4QM0A0OidMuuid CuuToronnen jalDstatusAn partner ic) namoIsluaunhota nathtransparent_photo_path( conference_ photo_pathstripe id1 eonsioI default plavbook socalendar providereimannenlt cancont marIR sanl2 tenant id(Dnotification providerMiscin proviiderSSS4a69546S-aeSf-4b8f-b107-abAccfA62b8d88n.ActveCognftive Creditcocnte ve-credhsnull>cnul la4752134googleslack• :CSV.TT.O0raw rotriovod ctartina tram n 075 me lordaitiw Oi me totd...
|
86598
|
NULL
|
NULL
|
NULL
|
|
86597
|
2972
|
5
|
2026-05-28T15:02:27.673692+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980547673_m1.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
IAlSlackFileEditViewGoHistoryWindowActivity Monito IAlSlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess Name% CPUPhpStormkernel_taskreplaydscreenpipeSlack Helper (Renderer)WindowServerFirefoxCP Isolated Web ContentcoreaudiodFirefoxCP Isolated Web ContentSlacklaunchservicesdbluetoothdActivity MonitorFirefoxtccdSlack HelperFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentsyspolicydFirefoxCP Isolated Web Contentlanguage_server_macos_armFirefoxCP Isolated Web ContentWispr FlowiTerm2ClaudeFirefoxCP Isolated Web ContentWispr Flow Helper (Renderer)trustd126,4116,864,452,339,935,28,96,86,25,04,84,34,24,14,03,93,63,53,13,13,02,52,21,91,91,91,51,5HelpCPU Time3:36:20,4623:31:09,636:25:25,813:41:58,3759:36,227:56:58,1938:23,031:00:10,5731:32,7013:38,411:03:24,1120:03,938:30,331:48:40,179:02,6215:28,9413:14,732:28,7217:12,3716:19,7210:18,7119:23,873:48,441:04:29,6128:49,705:44,655:17,285:14,11System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKD •HomeDMsActivityFilesLater..•More+26,62%32,97%40,41%CPUED→Jiminny ...# infrastructure_dev# jbu-team-info# jiminny-bg# platform-team# platform-tickets# product_launches# random# releases# support# thank-yous# the_people_of jimi...Direct messagesEL. Iliyana NetsevaEo Vasil Vasilev&. Stefka Stoyanovao Stoyan TomovEo Petko Kashinski. Galya Dimitrova: Todor StamatovRo Steliyan Georgievto Ves% MiraP.. Nikolay Yankovdo James GrahamE Lukas Kovalik y...i:: AppsJira Cloud0labl100% С8•Thu 28 May 18:02:27Describe what you are looking forlliyana Netseva6 0• MessagesAdd canvas+myand ivetseva SUeriMiima li prichina tolToday ~ raveno po tozi nachin iliprosto taka e napraveno nakogaLukas Kovalik 3:05 PMне знам, композитен филтьр е може би трябвада си настроиш нещата и после да направишедна заявка (Asked by например)тука не сьм сигурен, по-скоро е за продуктlliyana Netseva 4:00 PMok, thank youlliyana Netseva 5:45 PMИмам питане и се чудя към кого мога да сеобърна?става дума за deal insightsLukas Kovalik 5:54 PMПитай, ако мога ще отговоряlliyana Netseva 5:56 PMимам сделка която е със статус won но е вclosed losttova e ID-to 04a9cfad-2c87-4453-9e72-20aeb78ccf?*Lukas Koval.US или EU (edited)lliyana Netseva 6:01 PMeuMessage Iliyana Netseva...
|
NULL
|
-3493240217913396603
|
NULL
|
click
|
ocr
|
NULL
|
IAlSlackFileEditViewGoHistoryWindowActivity Monito IAlSlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess Name% CPUPhpStormkernel_taskreplaydscreenpipeSlack Helper (Renderer)WindowServerFirefoxCP Isolated Web ContentcoreaudiodFirefoxCP Isolated Web ContentSlacklaunchservicesdbluetoothdActivity MonitorFirefoxtccdSlack HelperFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentsyspolicydFirefoxCP Isolated Web Contentlanguage_server_macos_armFirefoxCP Isolated Web ContentWispr FlowiTerm2ClaudeFirefoxCP Isolated Web ContentWispr Flow Helper (Renderer)trustd126,4116,864,452,339,935,28,96,86,25,04,84,34,24,14,03,93,63,53,13,13,02,52,21,91,91,91,51,5HelpCPU Time3:36:20,4623:31:09,636:25:25,813:41:58,3759:36,227:56:58,1938:23,031:00:10,5731:32,7013:38,411:03:24,1120:03,938:30,331:48:40,179:02,6215:28,9413:14,732:28,7217:12,3716:19,7210:18,7119:23,873:48,441:04:29,6128:49,705:44,655:17,285:14,11System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKD •HomeDMsActivityFilesLater..•More+26,62%32,97%40,41%CPUED→Jiminny ...# infrastructure_dev# jbu-team-info# jiminny-bg# platform-team# platform-tickets# product_launches# random# releases# support# thank-yous# the_people_of jimi...Direct messagesEL. Iliyana NetsevaEo Vasil Vasilev&. Stefka Stoyanovao Stoyan TomovEo Petko Kashinski. Galya Dimitrova: Todor StamatovRo Steliyan Georgievto Ves% MiraP.. Nikolay Yankovdo James GrahamE Lukas Kovalik y...i:: AppsJira Cloud0labl100% С8•Thu 28 May 18:02:27Describe what you are looking forlliyana Netseva6 0• MessagesAdd canvas+myand ivetseva SUeriMiima li prichina tolToday ~ raveno po tozi nachin iliprosto taka e napraveno nakogaLukas Kovalik 3:05 PMне знам, композитен филтьр е може би трябвада си настроиш нещата и после да направишедна заявка (Asked by например)тука не сьм сигурен, по-скоро е за продуктlliyana Netseva 4:00 PMok, thank youlliyana Netseva 5:45 PMИмам питане и се чудя към кого мога да сеобърна?става дума за deal insightsLukas Kovalik 5:54 PMПитай, ако мога ще отговоряlliyana Netseva 5:56 PMимам сделка която е със статус won но е вclosed losttova e ID-to 04a9cfad-2c87-4453-9e72-20aeb78ccf?*Lukas Koval.US или EU (edited)lliyana Netseva 6:01 PMeuMessage Iliyana Netseva...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86598
|
2973
|
13
|
2026-05-28T15:02:27.558188+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980547558_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rnostolFV faVsco.is ~#12121 on JY-20963-fx-inProin rnostolFV faVsco.is ~#12121 on JY-20963-fx-inProinet vMEINSTALLMOwolcnnedvityCimbald.ongy uimaeumyociwiceonC CachedCrmServiceDecorator.phg(C) ProspectCache.php xM.INTERNALWEBHOOK SETU? maliminny storaceACUViy.onclass rrospecccache0182 436 ^ 4Malicenses.mapublic function findByProspectIdentifier(—1716Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMARSNAIMS M.SabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726reurn nul172117221723i sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isMAWISAHOOK SinEoiNGMOSUSdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. Saoesanh Sytemall Uibrariesv =0 Cemtches and Consolesv @ Database ConsolesSaheachelt" contact"sinstanceor Contactal=172eSaccount = Sahrachel'contact" o>ae+AccountolSaheachelt'account"e SaccountvAtUE1752 V# console cUA DEAL RISKS (EUSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationmeutsunSarvicaei7 Outpurjiminny.teams xTx,vontameAi W1rowv5OUTre Aientn# Q Q8A®& console 1 $ 470 mgy2liminny@localhostA HSJlocalA SCyhoponOidMuuid CuuTorSSS4a69566S-aeSf-4686-b107-abAccfA62b8donnen jal88n.Dstatusactve# ConsoloV A STAGINGR Concala,noakorAn partner ic) nangCognitive CreditIsluacocnte ve-credhunhota nathtransparent_photo_path( conference_ photo_pathstripe id<null>cnulla1 eon.io475I default plavbook 3idl2134calendar providergooglenicrosoft consent modeIR sanl2 tenant idtontts(Dnotification providerslackMiscin proviiderKnuleSF [minny@localhost)console (STAGiNG"Do liminny v031 A9 A28 M 3 У108 A VWHERE u.tean id = 187 and sa.provider = 'salesforce':select * fron activities where id = 31264367select * fron contacts where id = 6331639;annantunitiod whono id helzkie."account id' = 4156632, 'contact id' = 6331639, 'opportunity id = 4843610updated at' = 2026-05-22 87:16:17 where "id' = 31264367)*select * fron text relays where created at > '2026-05-01':Serr"oncevetes order oydescSerer"on usens where nareakesuirTaby to comoleteW WindeurtSELECT * FROM onpontunitaies NHERE Uselect* Ton tesre were de 555select * fron onpontunitics whene Sid = 7842553)ПОИТЕ ПІ4ЕНЕCecsdales OrcnnworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...):Md This eay call Salesforce::matchByDomaindSteo 7: Domain Search Tragers Doportunity Synenownthnrthnde.noooudt @hxacdcalwiithraatadonodrtun// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopportunttylScrProviderlocauls inportopportunity+ CCooeS? AdaotivInu zo moy lorukiL+0.CSV.TTTO0123126UTE.8...
|
NULL
|
-8645794776715047665
|
NULL
|
click
|
ocr
|
NULL
|
rnostolFV faVsco.is ~#12121 on JY-20963-fx-inProin rnostolFV faVsco.is ~#12121 on JY-20963-fx-inProinet vMEINSTALLMOwolcnnedvityCimbald.ongy uimaeumyociwiceonC CachedCrmServiceDecorator.phg(C) ProspectCache.php xM.INTERNALWEBHOOK SETU? maliminny storaceACUViy.onclass rrospecccache0182 436 ^ 4Malicenses.mapublic function findByProspectIdentifier(—1716Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMARSNAIMS M.SabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726reurn nul172117221723i sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isMAWISAHOOK SinEoiNGMOSUSdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. Saoesanh Sytemall Uibrariesv =0 Cemtches and Consolesv @ Database ConsolesSaheachelt" contact"sinstanceor Contactal=172eSaccount = Sahrachel'contact" o>ae+AccountolSaheachelt'account"e SaccountvAtUE1752 V# console cUA DEAL RISKS (EUSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationmeutsunSarvicaei7 Outpurjiminny.teams xTx,vontameAi W1rowv5OUTre Aientn# Q Q8A®& console 1 $ 470 mgy2liminny@localhostA HSJlocalA SCyhoponOidMuuid CuuTorSSS4a69566S-aeSf-4686-b107-abAccfA62b8donnen jal88n.Dstatusactve# ConsoloV A STAGINGR Concala,noakorAn partner ic) nangCognitive CreditIsluacocnte ve-credhunhota nathtransparent_photo_path( conference_ photo_pathstripe id<null>cnulla1 eon.io475I default plavbook 3idl2134calendar providergooglenicrosoft consent modeIR sanl2 tenant idtontts(Dnotification providerslackMiscin proviiderKnuleSF [minny@localhost)console (STAGiNG"Do liminny v031 A9 A28 M 3 У108 A VWHERE u.tean id = 187 and sa.provider = 'salesforce':select * fron activities where id = 31264367select * fron contacts where id = 6331639;annantunitiod whono id helzkie."account id' = 4156632, 'contact id' = 6331639, 'opportunity id = 4843610updated at' = 2026-05-22 87:16:17 where "id' = 31264367)*select * fron text relays where created at > '2026-05-01':Serr"oncevetes order oydescSerer"on usens where nareakesuirTaby to comoleteW WindeurtSELECT * FROM onpontunitaies NHERE Uselect* Ton tesre were de 555select * fron onpontunitics whene Sid = 7842553)ПОИТЕ ПІ4ЕНЕCecsdales OrcnnworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...):Md This eay call Salesforce::matchByDomaindSteo 7: Domain Search Tragers Doportunity Synenownthnrthnde.noooudt @hxacdcalwiithraatadonodrtun// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopportunttylScrProviderlocauls inportopportunity+ CCooeS? AdaotivInu zo moy lorukiL+0.CSV.TTTO0123126UTE.8...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86596
|
2972
|
4
|
2026-05-28T15:02:18.784211+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980538784_m1.jpg...
|
Slack
|
Iliyana Netseva (DM) - Jiminny Inc - 2 new items - Iliyana Netseva (DM) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
platform-backend-engineers
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
donut_time
engineering
general
happy_birthday
infosec_internal_all
infra-changes
infrastructure_dev
jbu-team-info
jiminny-bg
platform-team
platform-tickets
product_launches
random
releases
support
thank-yous
the_people_of_jiminny
Iliyana Netseva
Vasil Vasilev
Stefka Stoyanova
Stoyan Tomov
Petko Kashinski
Galya Dimitrova
Todor Stamatov
Steliyan Georgiev
Ves
Mira
Nikolay Yankov
James Graham
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Today at 2:53:22 PM
2:53
под този кейс имам предвид
https://jiminny.atlassian.net/browse/SRD-6881
https://jiminny.atlassian.net/browse/SRD-6881
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6881 [On demand] Transcription in saved search disappears Bug SRD-6881 in Jira Cloud Preview in Slack Status Ready for customer Assignee Lukas Kovalik(you) As of today at 2:53 PM Refresh Open in Jira ✨ Summarize
[On demand] Transcription in saved search disappears
Bug SRD-6881 in Jira Cloud
Preview in Slack
Status
Ready for customer
Assignee
Lukas Kovalik
(you)
As of today at 2:53 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6881
View conversations
More actions
Today at 2:54:12 PM
2:54
виж коментари и ако трябва нещо друго може да се чуем
Iliyana Netseva
Today at 2:56:40 PM
2:56 PM
vidqh kakvo si napisal, neshtoto koeto mi e stranno e che razlikata mejdu tova koeto pravi tq i tova koeto si napisal ti e natiskaneto na enter-a za da izpulni search-a
Today at 2:56:55 PM
2:56
popravi me ako gresha
Lukas Kovalik
Today at 2:57:27 PM
2:57 PM
да, или лупата
Today at 2:57:41 PM
2:57
да се търси по transcript
Iliyana Netseva
Today at 3:04:04 PM
3:04 PM
ima li prichina tova da e napraveno po tozi nachin ili prosto taka e napraveno nqkoga
Lukas Kovalik...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":6,"bounds":{"left":0.51180553,"top":0.08111111,"width":0.025,"height":0.04},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":6,"bounds":{"left":0.50625,"top":0.14,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":8,"bounds":{"left":0.5138889,"top":0.19222222,"width":0.020833334,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":6,"bounds":{"left":0.50625,"top":0.21555555,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":8,"bounds":{"left":0.5159722,"top":0.26777777,"width":0.016666668,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":6,"bounds":{"left":0.50625,"top":0.2911111,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":8,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.027083334,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.0055555557,"height":0.015555556}},{"char_start":1,"char_count":7,"bounds":{"left":0.5159722,"top":0.34333333,"width":0.022222223,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":6,"bounds":{"left":0.50625,"top":0.36666667,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":8,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.015972223,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.004166667,"height":0.015555556}},{"char_start":1,"char_count":4,"bounds":{"left":0.5208333,"top":0.4188889,"width":0.011805556,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":6,"bounds":{"left":0.50625,"top":0.4422222,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":8,"bounds":{"left":0.5152778,"top":0.49444443,"width":0.018055556,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":6,"bounds":{"left":0.50625,"top":0.5177778,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":8,"bounds":{"left":0.5152778,"top":0.57,"width":0.01875,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":13,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":13,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.036805555,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":13,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":13,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.06111111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":13,"bounds":{"left":0.68472224,"top":0.12777779,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":13,"bounds":{"left":0.57708335,"top":0.12777779,"width":0.050694443,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-backend-engineers","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.09236111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.093055554,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.046527777,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.025694445,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.038194444,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.072222225,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"donut_time","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.05277778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.054166667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.034027778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.07083333,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"infosec_internal_all","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.0875,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"infra-changes","depth":15,"bounds":{"left":0.58819443,"top":0.12777779,"width":0.061805554,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"infrastructure_dev","depth":15,"bounds":{"left":0.58819443,"top":0.13555555,"width":0.084027775,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jbu-team-info","depth":15,"bounds":{"left":0.58819443,"top":0.16666667,"width":0.0625,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":15,"bounds":{"left":0.58819443,"top":0.19777778,"width":0.048611112,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-team","depth":15,"bounds":{"left":0.58819443,"top":0.22888888,"width":0.065972224,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":15,"bounds":{"left":0.58819443,"top":0.26,"width":0.072916664,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.26,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":15,"bounds":{"left":0.59444445,"top":0.26,"width":0.06666667,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":15,"bounds":{"left":0.58819443,"top":0.2911111,"width":0.08055556,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":15,"bounds":{"left":0.58819443,"top":0.32222223,"width":0.035416666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":15,"bounds":{"left":0.58819443,"top":0.35333332,"width":0.036805555,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":15,"bounds":{"left":0.58819443,"top":0.38444445,"width":0.036111113,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":15,"bounds":{"left":0.58819443,"top":0.41555557,"width":0.05138889,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":15,"bounds":{"left":0.58819443,"top":0.44666666,"width":0.094444446,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.44666666,"width":0.004166667,"height":0.02}},{"char_start":1,"char_count":20,"bounds":{"left":0.5923611,"top":0.44666666,"width":0.09861111,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Iliyana Netseva","depth":16,"bounds":{"left":0.58819443,"top":0.52,"width":0.06944445,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":15,"bounds":{"left":0.58819443,"top":0.5511111,"width":0.055555556,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.5511111,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":12,"bounds":{"left":0.59444445,"top":0.5511111,"width":0.048611112,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":15,"bounds":{"left":0.58819443,"top":0.5822222,"width":0.079166666,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":15,"bounds":{"left":0.58819443,"top":0.61333334,"width":0.06458333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Petko Kashinski","depth":15,"bounds":{"left":0.58819443,"top":0.64444447,"width":0.072222225,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":15,"bounds":{"left":0.58819443,"top":0.6755555,"width":0.07361111,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":15,"bounds":{"left":0.58819443,"top":0.70666665,"width":0.072222225,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":15,"bounds":{"left":0.58819443,"top":0.73777777,"width":0.07986111,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":15,"bounds":{"left":0.58819443,"top":0.7688889,"width":0.016666668,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Mira","depth":15,"bounds":{"left":0.58819443,"top":0.8,"width":0.021527778,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":15,"bounds":{"left":0.58819443,"top":0.83111113,"width":0.06875,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":15,"bounds":{"left":0.58819443,"top":0.8622222,"width":0.06666667,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":15,"bounds":{"left":0.58819443,"top":0.8933333,"width":0.061805554,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":15,"bounds":{"left":0.65555555,"top":0.8933333,"width":0.013194445,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.65555555,"top":0.8933333,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":2,"bounds":{"left":0.66041666,"top":0.8933333,"width":0.011805556,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":15,"bounds":{"left":0.58819443,"top":0.96666664,"width":0.045833334,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":9,"bounds":{"left":0.71319443,"top":0.12777779,"width":0.06458333,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":11,"bounds":{"left":0.7326389,"top":0.14,"width":0.039583333,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":10,"bounds":{"left":0.7798611,"top":0.12777779,"width":0.07152778,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":12,"bounds":{"left":0.79930556,"top":0.14,"width":0.046527777,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":9,"bounds":{"left":0.85347223,"top":0.12777779,"width":0.022916667,"height":0.04222222},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":15,"bounds":{"left":0.8229167,"top":0.17666666,"width":0.05277778,"height":0.031111112},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:53:22 PM","depth":17,"bounds":{"left":0.72430557,"top":0.16111112,"width":0.016666668,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:53","depth":18,"bounds":{"left":0.72430557,"top":0.16111112,"width":0.016666668,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"под този кейс имам предвид","depth":17,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.13958333,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/SRD-6881","depth":17,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.21597221,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://jiminny.atlassian.net/browse/SRD-6881","depth":18,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.21597221,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":16,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.039583333,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Jira Cloud","depth":16,"bounds":{"left":0.7888889,"top":0.16111112,"width":0.011111111,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Remove preview","depth":18,"bounds":{"left":0.7326389,"top":0.16111112,"width":0.013888889,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Jira Cloud Bug SRD-6881 [On demand] Transcription in saved search disappears Bug SRD-6881 in Jira Cloud Preview in Slack Status Ready for customer Assignee Lukas Kovalik(you) As of today at 2:53 PM Refresh Open in Jira ✨ Summarize","depth":18,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.2361111,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"[On demand] Transcription in saved search disappears","depth":19,"bounds":{"left":0.7888889,"top":0.16111112,"width":0.18472221,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Bug SRD-6881 in Jira Cloud","depth":20,"bounds":{"left":0.7888889,"top":0.16111112,"width":0.11180556,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Preview in Slack","depth":20,"bounds":{"left":0.7888889,"top":0.16111112,"width":0.06527778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Status","depth":19,"bounds":{"left":0.7888889,"top":0.16111112,"width":0.025,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Ready for customer","depth":19,"bounds":{"left":0.7916667,"top":0.16111112,"width":0.072916664,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Assignee","depth":19,"bounds":{"left":0.88958335,"top":0.16111112,"width":0.035416666,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":20,"bounds":{"left":0.9111111,"top":0.16111112,"width":0.05486111,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"(you)","depth":20,"bounds":{"left":0.9138889,"top":0.16111112,"width":0.02013889,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"As of today at 2:53 PM","depth":20,"bounds":{"left":0.75555557,"top":0.16111112,"width":0.09166667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Refresh","depth":20,"bounds":{"left":0.84930557,"top":0.16111112,"width":0.030555556,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Jira","depth":20,"bounds":{"left":0.75555557,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"✨ Summarize","depth":20,"bounds":{"left":0.8229167,"top":0.16111112,"width":0.07361111,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Open in browser","depth":20,"bounds":{"left":0.8819444,"top":0.16111112,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share Bug SRD-6881","depth":19,"bounds":{"left":0.90416664,"top":0.16111112,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View conversations","depth":19,"bounds":{"left":0.92638886,"top":0.16111112,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More actions","depth":19,"bounds":{"left":0.94861114,"top":0.16111112,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Today at 2:54:12 PM","depth":17,"bounds":{"left":0.72430557,"top":0.16111112,"width":0.016666668,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:54","depth":18,"bounds":{"left":0.72430557,"top":0.16111112,"width":0.016666668,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"виж коментари и ако трябва нещо друго може да се чуем","depth":17,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.22569445,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Iliyana Netseva","depth":16,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.072222225,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":16,"bounds":{"left":0.81805557,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:56:40 PM","depth":16,"bounds":{"left":0.82361114,"top":0.16111112,"width":0.031944446,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:56 PM","depth":17,"bounds":{"left":0.82361114,"top":0.16111112,"width":0.031944446,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"vidqh kakvo si napisal, neshtoto koeto mi e stranno e che razlikata mejdu tova koeto pravi tq i tova koeto si napisal ti e natiskaneto na enter-a za da izpulni search-a","depth":17,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.2326389,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:56:55 PM","depth":17,"bounds":{"left":0.72430557,"top":0.16111112,"width":0.016666668,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:56","depth":18,"bounds":{"left":0.72430557,"top":0.16111112,"width":0.016666668,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"popravi me ako gresha","depth":17,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.10277778,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":16,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.06458333,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":16,"bounds":{"left":0.8111111,"top":0.16111112,"width":0.0055555557,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:57:27 PM","depth":16,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.03125,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:57 PM","depth":17,"bounds":{"left":0.81666666,"top":0.16111112,"width":0.03125,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"да, или лупата","depth":17,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.07083333,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 2:57:41 PM","depth":17,"bounds":{"left":0.72430557,"top":0.16111112,"width":0.016666668,"height":0.0011111111},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2:57","depth":18,"bounds":{"left":0.72430557,"top":0.16111112,"width":0.016666668,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"да се търси по transcript","depth":17,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.11666667,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Iliyana Netseva","depth":16,"bounds":{"left":0.7465278,"top":0.16111112,"width":0.072222225,"height":0.02},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":16,"bounds":{"left":0.81805557,"top":0.16111112,"width":0.0055555557,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Today at 3:04:04 PM","depth":16,"bounds":{"left":0.82361114,"top":0.16222222,"width":0.031944446,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3:04 PM","depth":17,"bounds":{"left":0.82361114,"top":0.16222222,"width":0.031944446,"height":0.016666668},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ima li prichina tova da e napraveno po tozi nachin ili prosto taka e napraveno nqkoga","depth":17,"bounds":{"left":0.7465278,"top":0.18333334,"width":0.23541667,"height":0.044444446},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7465278,"top":0.18333334,"width":0.0027777778,"height":0.02}},{"char_start":1,"char_count":84,"bounds":{"left":0.7465278,"top":0.18333334,"width":0.23472223,"height":0.044444446}}],"role_description":"text"},{"role":"AXButton","text":"Lukas Kovalik","depth":16,"bounds":{"left":0.7465278,"top":0.23888889,"width":0.06458333,"height":0.024444444},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":16,"bounds":{"left":0.8111111,"top":0.24111111,"width":0.0055555557,"height":0.02},"on_screen":true,"role_description":"text"}]...
|
4090628649877018978
|
-3933577468454596422
|
visual_change
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
platform-backend-engineers
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
donut_time
engineering
general
happy_birthday
infosec_internal_all
infra-changes
infrastructure_dev
jbu-team-info
jiminny-bg
platform-team
platform-tickets
product_launches
random
releases
support
thank-yous
the_people_of_jiminny
Iliyana Netseva
Vasil Vasilev
Stefka Stoyanova
Stoyan Tomov
Petko Kashinski
Galya Dimitrova
Todor Stamatov
Steliyan Georgiev
Ves
Mira
Nikolay Yankov
James Graham
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Today at 2:53:22 PM
2:53
под този кейс имам предвид
https://jiminny.atlassian.net/browse/SRD-6881
https://jiminny.atlassian.net/browse/SRD-6881
Jira Cloud
Jira Cloud
Remove preview
Jira Cloud Bug SRD-6881 [On demand] Transcription in saved search disappears Bug SRD-6881 in Jira Cloud Preview in Slack Status Ready for customer Assignee Lukas Kovalik(you) As of today at 2:53 PM Refresh Open in Jira ✨ Summarize
[On demand] Transcription in saved search disappears
Bug SRD-6881 in Jira Cloud
Preview in Slack
Status
Ready for customer
Assignee
Lukas Kovalik
(you)
As of today at 2:53 PM
Refresh
Open in Jira
✨ Summarize
Open in browser
Share Bug SRD-6881
View conversations
More actions
Today at 2:54:12 PM
2:54
виж коментари и ако трябва нещо друго може да се чуем
Iliyana Netseva
Today at 2:56:40 PM
2:56 PM
vidqh kakvo si napisal, neshtoto koeto mi e stranno e che razlikata mejdu tova koeto pravi tq i tova koeto si napisal ti e natiskaneto na enter-a za da izpulni search-a
Today at 2:56:55 PM
2:56
popravi me ako gresha
Lukas Kovalik
Today at 2:57:27 PM
2:57 PM
да, или лупата
Today at 2:57:41 PM
2:57
да се търси по transcript
Iliyana Netseva
Today at 3:04:04 PM
3:04 PM
ima li prichina tova da e napraveno po tozi nachin ili prosto taka e napraveno nqkoga
Lukas Kovalik
1AlIAISlackFileEditViewGoWindowActivity MonitorAll ProcessesProcess Namekernel_taskPhpStormWindowServerreplaydscreenpipeSlack Helper (Renderer)FirefoxCP Isolated Web ContentcoreaudiodClaudeSlackActivity MonitorbluetoothdControl Centrelanguage_server_macos_armSlack HelperFirefoxCP Isolated Web ContentiTerm2FirefoxCP Isolated Web ContentWispr FlowFirefoxWispr FlowKarabiner-Core-ServiceBitwardenHistoryHelp% CPUCPU TimeCursorUlViewService (Not Responding)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentWispr Flow Helper (Renderer)163,323:31:03,50155,469,03:36:13,837:56:56,346:25:22,4345,323,03:41:55,6212,459:34,1338:22,571:00:10,2128:49,6013:38,158:30,1120:03,7120:26,7410:18,5515:28,7319:23,741:04:29,5116:19,561:23,101:48:39,963:48,3320:29,252:21,225:54,0942:45,6110:07,6631:32,375:17,20System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKD •HomeDMsActivityFilesLater..•More+48,25%50,34%1,41%CPUED→Jiminny ...# infrastructure_dev# jbu-team-info# jiminny-bg# platform-team# platform-tickets# product_launches# random# releases# support# thank-yous# the_people_of jimi...Direct messagesEL. Iliyana NetsevaEo Vasil Vasilev&. Stefka Stoyanovao Stoyan Tomovo Petko Kashinski. Galya Dimitrova: Todor StamatovRo Steliyan GeorgievCo Ves% MiraP.. Nikolay Yankov4o James GrahamE Lukas Kovalik y...::: AppsJira Cloud0labl100% С8•Thu 28 May 18:02:18Describe what you are looking forlliyana Netseva6 0• MessagesAdd canvas+myand ivetseva SUeriMiima li prichina tolToday ~ raveno po tozi nachin iliprosto taka e napraveno nakogaLukas Kovalik 3:05 PMне знам, композитен филтьр е може би трябвада си настроиш нещата и после да направишедна заявка (Asked by например)тука не сьм сигурен, по-скоро е за продуктlliyana Netseva 4:00 PMok, thank youlliyana Netseva 5:45 PMИмам питане и се чудя към кого мога да сеобърна?става дума за deal insightsLukas Kovalik 5:54 PMПитай, ако мога ще отговоряlliyana Netseva 5:56 PMимам сделка която е със статус won но е вclosed losttova e ID-to 04a9cfad-2c87-4453-9e72-20aeb78ccf?*Lukas Koval.US или EU (edited)lliyana Netseva 6:01 PMeuMessage Iliyana Netseva...
|
86594
|
NULL
|
NULL
|
NULL
|
|
86594
|
2972
|
3
|
2026-05-28T15:02:16.741788+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980536741_m1.jpg...
|
Slack
|
platform-inner-team (Channel) - Jiminny Inc - 2 ne platform-inner-team (Channel) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
SlackFileEditViewGoHistoryWindowActivity MonitorAl SlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess Name% CPUPhpStormkernel_taskreplaydWindowServerscreenpipelanguage_server_macos_armlaunchservicesdFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentcoreaudiodActivity MonitorlaunchdbluetoothdjavaCursorUlViewService (Not Responding)opendirectorydWispr FlowFirefoxcef_server Helper (Renderer)FirefoxCP Isolated Web ContentiTerm2Notion Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentWispr Flow Helper (Renderer)Slack Helper (Renderer)Claude305,5131,865,625,720,314,48,88,48,07,46,23,93,73,63,42,82,52,12,02,01,81,71,51,51,51,51,51,4HelpCPU Time3:36:05,5423:30:54,786:25:20,017:56:52,663:41:54,4010:18,381:03:23,8238:22,1542:45,5331:32,301:00:09,888:29,8719:14,4720:03,482,785:54,0011:08,593:48,231:48:39,848:25,3016:19,431:04:29,3824:41,2819:23,6013:14,485:17,1259:33,4628:49,29System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKp HomeDMsActivityFilesLater..•More+42,07%46,48%11,46%CPUED→Jiminny ...# infrastructure_dev# jbu-team-info# jiminny-bg# platform-team# platform-tickets# product_launches# random# releases# support# thank-yous# the_people_of jimi...Direct messages. Iliyana NetsevaGo Vasil Vasilev&. Stefka Stoyanovao Stoyan TomovEo Petko KashinskiGalya Dimitrova: Todor StamatovRo Steliyan GeorgievRo Ves% MiraP.. Nikolay Yankov4o James GrahamLukas Kovalik y... O#: AppsJira Cloud100% C8• Thu 28 May 18:02:16Describe what you are looking for* A platform-inner-team& 106 0• MessagesP Channel OverviewMore v+As of yesterdayOpen in JiraYesterday ~3 SummarizeToday ~Nikolay Nikolov 10:52 AMФикс за пускане на remote commands за staging:https://github.com/jiminny/app/pull/12132#12132 Fix stage profile for remote commandsrunJIRA: JY-XXXXDeployment notes:• NoneComments1V1jiminny/app| May 26th Added by GitHubNikolay Nikolov 5:27 PMClaude Desktop почна много да ме льже, че имаconnection проблеми, а в логовете виждам, ченяма. Може би промяната по туловете гообъркаха. Найкрая след много настояване почнада врьща данниNikolay Yankov 5:43 PMкаква промянаMessage & platform-inner-team+...
|
NULL
|
-5353786077866304485
|
NULL
|
click
|
ocr
|
NULL
|
SlackFileEditViewGoHistoryWindowActivity MonitorAl SlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess Name% CPUPhpStormkernel_taskreplaydWindowServerscreenpipelanguage_server_macos_armlaunchservicesdFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentcoreaudiodActivity MonitorlaunchdbluetoothdjavaCursorUlViewService (Not Responding)opendirectorydWispr FlowFirefoxcef_server Helper (Renderer)FirefoxCP Isolated Web ContentiTerm2Notion Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentWispr Flow Helper (Renderer)Slack Helper (Renderer)Claude305,5131,865,625,720,314,48,88,48,07,46,23,93,73,63,42,82,52,12,02,01,81,71,51,51,51,51,51,4HelpCPU Time3:36:05,5423:30:54,786:25:20,017:56:52,663:41:54,4010:18,381:03:23,8238:22,1542:45,5331:32,301:00:09,888:29,8719:14,4720:03,482,785:54,0011:08,593:48,231:48:39,848:25,3016:19,431:04:29,3824:41,2819:23,6013:14,485:17,1259:33,4628:49,29System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKp HomeDMsActivityFilesLater..•More+42,07%46,48%11,46%CPUED→Jiminny ...# infrastructure_dev# jbu-team-info# jiminny-bg# platform-team# platform-tickets# product_launches# random# releases# support# thank-yous# the_people_of jimi...Direct messages. Iliyana NetsevaGo Vasil Vasilev&. Stefka Stoyanovao Stoyan TomovEo Petko KashinskiGalya Dimitrova: Todor StamatovRo Steliyan GeorgievRo Ves% MiraP.. Nikolay Yankov4o James GrahamLukas Kovalik y... O#: AppsJira Cloud100% C8• Thu 28 May 18:02:16Describe what you are looking for* A platform-inner-team& 106 0• MessagesP Channel OverviewMore v+As of yesterdayOpen in JiraYesterday ~3 SummarizeToday ~Nikolay Nikolov 10:52 AMФикс за пускане на remote commands за staging:https://github.com/jiminny/app/pull/12132#12132 Fix stage profile for remote commandsrunJIRA: JY-XXXXDeployment notes:• NoneComments1V1jiminny/app| May 26th Added by GitHubNikolay Nikolov 5:27 PMClaude Desktop почна много да ме льже, че имаconnection проблеми, а в логовете виждам, ченяма. Може би промяната по туловете гообъркаха. Найкрая след много настояване почнада врьща данниNikolay Yankov 5:43 PMкаква промянаMessage & platform-inner-team+...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86595
|
2973
|
12
|
2026-05-28T15:02:16.601870+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980536601_m2.jpg...
|
Slack
|
platform-inner-team (Channel) - Jiminny Inc - 2 ne platform-inner-team (Channel) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20 rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logMEINSTALLMOwolcnnedvilycrmbalo.ongy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php xM.INTERNALWEBHOOK SETU? maRecordselector.phpACUViy.oniminny storaceclass rrospecccache0182 436 A VMalicenses.mapublic function findByProspectIdentifier(—1716Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs maSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726reurn nul172117221723i sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNTSdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. Saoesant. Sytemallloranesv =0 Cemtches and Consolosv @ Database ConsolesSaheachelt" contact"sinstanceor Contactal=172eSaccount = Sahrachel'contact" o>ae+AccountolSaheachelt'accounte SaccountvAtUE1752 V# console cUA DEAL RISKS (EUSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationmeutsunSarvicaei7) Outputjiminny.teams xTx,vontameAi W1rowv5OUTre Aientn# Q Q8A®& console 1 $ 470 mgy2liminny@localhostA HSJlocalOidMuuid CuuTorSSS4a69566S-aeSf-4686-b107-abAccfA62b8donnen jal88n.yhoponDstatusactve# ConsoloV A STAGINGR Concala,noakorAn partner ic) nangCognitive CreditIsluacocnte ve-credhunhota nathtransparent_photo_path( conference_ photo_pathstripe id<null>cnulla1 eon.io475I default plavbook 3idl2134calendar providergooglenicrosoft consent modeIR sanl2 tenant id(Dnotification providerslackMiscin proviiderCnuzaTO0У L7ino co wey touclServiceTest+0.SF [minny@localhost)console (STAGiNG"Do liminny v031 49 A28 У 3 У 108 A VWHERE u.tean id = 187 and sa.provider = 'salesforce':select * fron activities where id = 31264367select * fron contacts where id = 6331639;annantunitiod whono id helzkie."account id' = 4156632, 'contact id' = 6331639, 'opportunity id = 4843610updated at' = 2026-05-22 87:16:17 where "id' = 31264367)*select * fron text relays where created at > '2026-05-01*:Serr"oncevetes order oydescselect * fron usens where nane Like "gSubrase,Taby to comoleteW WindeurtSELECT * FROM onpontunitaies NHERE Uselect * fron teane where 1id = 555:1select * fron onpontunitics whene Sid = 7842553:ПОИТЕ ПІ4ЕНЕCecsdales Orceancworceoeionhtoreachsoartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorvisreconsM d This nay call Salesforce::matchByDomain()Steo 7: Domain Search Tragers Doportunity Synenownthnrthnde.noooudt @hxacdcalwiithraatadonodrtunScraservice-syncopportunttylScrProviderlo# Calls inportOpportunityd+ ( CodeS? Adaotivraw rotriovod ctartina tram n 075 me lordaitiw Oi me totd...
|
NULL
|
-7808772426800690738
|
NULL
|
click
|
ocr
|
NULL
|
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20 rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logMEINSTALLMOwolcnnedvilycrmbalo.ongy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php xM.INTERNALWEBHOOK SETU? maRecordselector.phpACUViy.oniminny storaceclass rrospecccache0182 436 A VMalicenses.mapublic function findByProspectIdentifier(—1716Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs maSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726reurn nul172117221723i sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNTSdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. Saoesant. Sytemallloranesv =0 Cemtches and Consolosv @ Database ConsolesSaheachelt" contact"sinstanceor Contactal=172eSaccount = Sahrachel'contact" o>ae+AccountolSaheachelt'accounte SaccountvAtUE1752 V# console cUA DEAL RISKS (EUSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationmeutsunSarvicaei7) Outputjiminny.teams xTx,vontameAi W1rowv5OUTre Aientn# Q Q8A®& console 1 $ 470 mgy2liminny@localhostA HSJlocalOidMuuid CuuTorSSS4a69566S-aeSf-4686-b107-abAccfA62b8donnen jal88n.yhoponDstatusactve# ConsoloV A STAGINGR Concala,noakorAn partner ic) nangCognitive CreditIsluacocnte ve-credhunhota nathtransparent_photo_path( conference_ photo_pathstripe id<null>cnulla1 eon.io475I default plavbook 3idl2134calendar providergooglenicrosoft consent modeIR sanl2 tenant id(Dnotification providerslackMiscin proviiderCnuzaTO0У L7ino co wey touclServiceTest+0.SF [minny@localhost)console (STAGiNG"Do liminny v031 49 A28 У 3 У 108 A VWHERE u.tean id = 187 and sa.provider = 'salesforce':select * fron activities where id = 31264367select * fron contacts where id = 6331639;annantunitiod whono id helzkie."account id' = 4156632, 'contact id' = 6331639, 'opportunity id = 4843610updated at' = 2026-05-22 87:16:17 where "id' = 31264367)*select * fron text relays where created at > '2026-05-01*:Serr"oncevetes order oydescselect * fron usens where nane Like "gSubrase,Taby to comoleteW WindeurtSELECT * FROM onpontunitaies NHERE Uselect * fron teane where 1id = 555:1select * fron onpontunitics whene Sid = 7842553:ПОИТЕ ПІ4ЕНЕCecsdales Orceancworceoeionhtoreachsoartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorvisreconsM d This nay call Salesforce::matchByDomain()Steo 7: Domain Search Tragers Doportunity Synenownthnrthnde.noooudt @hxacdcalwiithraatadonodrtunScraservice-syncopportunttylScrProviderlo# Calls inportOpportunityd+ ( CodeS? Adaotivraw rotriovod ctartina tram n 075 me lordaitiw Oi me totd...
|
86592
|
NULL
|
NULL
|
NULL
|
|
86593
|
2972
|
2
|
2026-05-28T15:02:14.609919+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980534609_m1.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
9
28
3
108
Previous Highlighted Error
Next Highlighted Error...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"31","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"9","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"28","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"108","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1150564665101776912
|
46189188152495079
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
9
28
3
108
Previous Highlighted Error
Next Highlighted Error...
|
86584
|
NULL
|
NULL
|
NULL
|
|
86592
|
2973
|
11
|
2026-05-28T15:02:11.407862+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980531407_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
9
28
3
108
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.37799203,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.38663563,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.39760637,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.40625,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.41489363,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.42586437,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"bounds":{"left":0.4368351,"top":0.09896249,"width":0.024268618,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.46343085,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"bounds":{"left":0.4744016,"top":0.09896249,"width":0.029587766,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.64261967,"top":0.09896249,"width":0.02825798,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"31","depth":4,"bounds":{"left":0.6007314,"top":0.123703115,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"9","depth":4,"bounds":{"left":0.61236703,"top":0.123703115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"28","depth":4,"bounds":{"left":0.62234044,"top":0.123703115,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.6343085,"top":0.123703115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"108","depth":4,"bounds":{"left":0.6442819,"top":0.123703115,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.65791225,"top":0.12210695,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.66522604,"top":0.12210695,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;\nselect * from teams where id = 555;","depth":4,"on_screen":true,"value":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;\nselect * from teams where id = 555;","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
814599322636983470
|
2074680717582186093
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
9
28
3
108
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86591
|
2973
|
10
|
2026-05-28T15:02:08.935089+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980528935_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.37799203,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.38663563,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.39760637,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.40625,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.41489363,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.42586437,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
9103580097153587736
|
46329942820717543
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results...
|
86590
|
NULL
|
NULL
|
NULL
|
|
86590
|
2973
|
9
|
2026-05-28T15:02:07.892074+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980527892_m2.jpg...
|
PhpStorm
|
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Search
select * from teams where id = 555
SELECT * Search
select * from teams where id = 555
SELECT * FROM team_features where team_id = 1; SEL...
Customize
Statements...
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"Search","depth":1,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"select * from teams where id = 555","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.116023935,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SELECT * FROM team_features where team_id = 1; SEL...","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.116023935,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Customize","depth":1,"bounds":{"left":0.49135637,"top":0.4980048,"width":0.12666224,"height":0.015163607},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Statements","depth":1,"bounds":{"left":0.49468085,"top":0.4301676,"width":0.1200133,"height":0.026336791},"on_screen":true,"role_description":"text"}]...
|
-1018014685999429037
|
7552311582613414984
|
typing_pause
|
accessibility
|
NULL
|
Search
select * from teams where id = 555
SELECT * Search
select * from teams where id = 555
SELECT * FROM team_features where team_id = 1; SEL...
Customize
Statements...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86589
|
2973
|
8
|
2026-05-28T15:02:06.864734+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980526864_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.37799203,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.38663563,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.39760637,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.40625,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.41489363,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.42586437,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
9103580097153587736
|
46329942820717543
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results...
|
86588
|
NULL
|
NULL
|
NULL
|
|
86588
|
2973
|
7
|
2026-05-28T15:02:05.855388+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980525855_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
32
9
28
3
108
Previous Highlighted Error...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.37799203,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.38663563,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.39760637,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.40625,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.41489363,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.42586437,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"bounds":{"left":0.4368351,"top":0.09896249,"width":0.024268618,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.46343085,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"bounds":{"left":0.4744016,"top":0.09896249,"width":0.029587766,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.64261967,"top":0.09896249,"width":0.02825798,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"32","depth":4,"bounds":{"left":0.6000665,"top":0.123703115,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"9","depth":4,"bounds":{"left":0.61236703,"top":0.123703115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"28","depth":4,"bounds":{"left":0.62234044,"top":0.123703115,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.6343085,"top":0.123703115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"108","depth":4,"bounds":{"left":0.6442819,"top":0.123703115,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.65791225,"top":0.12210695,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
6641065132799943545
|
46189205332362215
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
32
9
28
3
108
Previous Highlighted Error...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86587
|
2973
|
6
|
2026-05-28T15:02:04.021927+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980524021_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.37799203,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.38663563,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.39760637,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.40625,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.41489363,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.42586437,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"bounds":{"left":0.4368351,"top":0.09896249,"width":0.024268618,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.46343085,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"bounds":{"left":0.4744016,"top":0.09896249,"width":0.029587766,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.64261967,"top":0.09896249,"width":0.02825798,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2043043601995049886
|
46400311564895207
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide...
|
86586
|
NULL
|
NULL
|
NULL
|
|
86586
|
2973
|
5
|
2026-05-28T15:02:01.398108+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980521398_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
32
9
28
3
108
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.37799203,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.38663563,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.39760637,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.40625,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.41489363,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.42586437,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"bounds":{"left":0.4368351,"top":0.09896249,"width":0.024268618,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.46343085,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"bounds":{"left":0.4744016,"top":0.09896249,"width":0.029587766,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.64261967,"top":0.09896249,"width":0.02825798,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"32","depth":4,"bounds":{"left":0.6000665,"top":0.123703115,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"9","depth":4,"bounds":{"left":0.61236703,"top":0.123703115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"28","depth":4,"bounds":{"left":0.62234044,"top":0.123703115,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.6343085,"top":0.123703115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"108","depth":4,"bounds":{"left":0.6442819,"top":0.123703115,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.65791225,"top":0.12210695,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.66522604,"top":0.12210695,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;\nselect","depth":4,"on_screen":true,"value":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;\nselect","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
1517898926579350806
|
2074680717582186093
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
32
9
28
3
108
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86585
|
2973
|
4
|
2026-05-28T15:01:57.491473+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980517491_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.37799203,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.38663563,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.39760637,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.40625,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.41489363,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.42586437,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"bounds":{"left":0.4368351,"top":0.09896249,"width":0.024268618,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.46343085,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-627366218139740968
|
46329925640848359
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements...
|
86583
|
NULL
|
NULL
|
NULL
|
|
86584
|
2972
|
1
|
2026-05-28T15:01:57.305124+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980517305_m1.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
9
28
3
108
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"31","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"9","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"28","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"108","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;\nselect","depth":4,"on_screen":true,"value":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;\nselect","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
814599322636983470
|
2074680717582186093
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
9
28
3
108
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86583
|
2973
|
3
|
2026-05-28T15:01:56.320792+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980516320_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
9
28
3
108
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.3693484,"top":0.123703115,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.37799203,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.38663563,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.39760637,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.40625,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.41489363,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.42586437,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"bounds":{"left":0.4368351,"top":0.09896249,"width":0.024268618,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.46343085,"top":0.09896249,"width":0.008643617,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"bounds":{"left":0.4744016,"top":0.09896249,"width":0.029587766,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.64261967,"top":0.09896249,"width":0.02825798,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"31","depth":4,"bounds":{"left":0.6007314,"top":0.123703115,"width":0.009640957,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"9","depth":4,"bounds":{"left":0.61236703,"top":0.123703115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"28","depth":4,"bounds":{"left":0.62234044,"top":0.123703115,"width":0.009973404,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.6343085,"top":0.123703115,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"108","depth":4,"bounds":{"left":0.6442819,"top":0.123703115,"width":0.011968086,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.65791225,"top":0.12210695,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.66522604,"top":0.12210695,"width":0.006981383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;\nse","depth":4,"on_screen":true,"value":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;\nse","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.011968086,"top":0.047885075,"width":0.024268618,"height":0.024740623},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
814599322636983470
|
2074680717582186093
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
9
28
3
108
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86582
|
2973
|
2
|
2026-05-28T15:01:51.778854+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980511778_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
9087091289234339902
|
-4023455704353896256
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logSF [minny@localhost)coneolperMEINSTALLMOwolcnnedvilycimbato.ongy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x(C)) Camrica choconsole (EU X A console (STAGING"M.INTERNALWEBHOOK SETU? maRecordselector.phpliminny storaceACUViy.onTacoone aetroseclass rrospecccachepublic function findByProspectIdentifier(0182 436 ^ 4Oojiminny031 49 A28 У 3 У 108 A VWHERE u.tean id = 187 and sa.provider = 'salesforce':Malicenses.maMakere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs mai sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNTSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,17261721select * fron activities where id = 31264367select * fron contacts where id = 6331639;select * fron accounts where id = 4156632:select * fron opportunities where id = 4843610:"account id' = 4156632, 'contact id' = 6331639, 'opportunity id = 4843610• 'stage id' = 13273"'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*neucn nul17231724select * fron text relays where created at > '2026-05-01':SdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"1. SccesaSere"onmeweres order owo desthmh Sytemal Ubrariesv =0 Cemtches and Consolosv @ Database ConsolesV AEU# console cUA DEAL RISKS (EUSaheachel" contact"instanceor contactl=172eSerer"on usens where nreakeuinsSaccount = Sahlachel'contact' o>ae-Accounto17RASELECT * FROM oppontunitaies WHERE uufd to bin(:04a9cfad-2c87-4453-9672-28seb78ccf8d*) = uufd:Saheachelt'accounte SaccountSopportunity = Sthis->findüpportunityinContactRoles(Sconfiquration111111meutsunСАКОЛАКАТІАААФАЛФІЇ ІЛАФТАТSarvicaei+oc|ex7) Output.jiminny.opportunitiesvontameA1rowv5OuTre Aea4QM0A0& console 11 gy2liminny@localhostA HSJJocalA SCyhopon# ConsoloV A STAGINGR Concala,noakorAD 1d7681423uuid (uuTd with time-low and tine-hich swapoed)l84a9c6ad-2c87-4453-9c72-20aeb78cc68d12 t00n sal1sss1Caccade 3e15Command 3etcrn_configuration_id175)044019Ar accountidAt stage_idBstage_updated.at286167876-85-2818736754Le record_type_1dcrn_provider..ouser id(8) ounenidnaneM valueM cunnency. codd1812138848855Centaiva Capiital - EU HY/TGпаваB.В:Bis closecDis won1 close datenonkros.neMorobabilityraw rotriouad ctartina from in e 800 meloroatim167 me otrhina: 14722 maServiceTestTO0У L7ind co mey toulio+0.ТШ И пниНCecsdales OrceancworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorvisreconsMd This eay call Salesforce::matchByDomaindSteo 7: Domain Search Traaers Doportunity Syndnownthnrthnde.noooudt @hxacdcalwiithraatadonodrtun// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopportunttylScrProvideridcauls inportupportuntty+O code lS? AdaotivCSVvTT.O0SUM:555 3:1 WWindsurf Teams172004 lliTe e ensd...
|
86581
|
NULL
|
NULL
|
NULL
|
|
86581
|
2973
|
1
|
2026-05-28T15:01:46.773146+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980506773_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.042220745,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.27027926,"top":1.0,"width":0.008643617,"height":0.0},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.3307846,"top":0.12529927,"width":0.00731383,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.34009308,"top":0.12529927,"width":0.007978723,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"bounds":{"left":0.35006648,"top":0.12529927,"width":0.010305851,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3620346,"top":0.123703115,"width":0.00731383,"height":0.018355945},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-166854925347046
|
-8997958655044121664
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logSF [minny@localhost)coneolperMEINSTALLMOwolcnnedvilycimbato.ongy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x(C)) Camrica chocoocole fEulXd console (STAGING"M.INTERNALWEBHOOK SETU? maRecordselector.phpliminny storaceACUViy.onDo liminny vTacoone aetroseclass rrospecccachepublic function findByProspectIdentifier(0182 436 ^ 4031 49 A28 У 3 У 108 A VWHERE u.tean id = 187 and sa.provider = 'salesforce':Malicenses.maMakere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sal.query.saMAesNeiMs maSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,17261721select * fron activities where id = 31264367select * fron contacts where id = 6331639;select * fron accounts where id = 4156632:select * fron opportunities where id = 4843610:'account id' = 4156632, 'contact id' = 6331639, 'opportunity id = 4843610'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*neucn nuli sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNT17231724select * fron text relays where created at > '2026-05-01':SdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"1. SccesaSere"onmeweres order owo desthmh Sytemal Ubrariesv =0 Cemtches and Consolosv @ Database ConsolesV AEU# console cUA DEAL RISKS (EUSaheachel" contact"instanceor contactl=172eSerer"on usens where nreakeuinsSaccount = Sahlachel'contact' o>ae-Accounto17RASELECT * FROM oppontunitaies WHERE uufd to bin(:04a9cfad-2c87-4453-9672-28seb78ccf8d*) = uufdSaheachelt'accounte SaccountSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationmeutsunСАКОЛАКАТІАААФАЛФІЇ ІЛАФТАТSarvicaei+oc|ex7) Output.jiminny.opportunitiesvontameA1rowvOUTre Aieat4QMAAO& console 11 gy2liminny@localhostA HSJlocalA SCyhopon# ConsoloV A STAGINGR Concala,noakorAD 1d7681423Muuid (uuTd with time-low and tine-hich swapoed)l84a9c6ad-2c87-4453-9c72-20acb78cc68d12 t00n saltcrn_configuration_idAr accountidO4019/AAt stage_id28616Bstage_updated.at7876-85-2818736754Le record_type_1dcrn_provider..ouser id(8) ounenidnaneM valueM cunnency. codd1812138848855Centaiva Capiital - EU HY/TGпаваB.В:B is closedDis won1 close datenonkros.neM orobabiLityraw rotriouad ctartina from in e 800 meloroatim167 me otrhina: 14722 maTO0У L7ino co wey toulaeServiceTest+0.ВНMП HIICecsdales OrceancworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...): This say call Salesforce::matchByDomainfSteo 7: Domain Search Triaaers Doportunity Syncnownthnrthnde.noooudt @hxacdcalwiithraatadonodrtun// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopportunttylScrProvideridcauls inportupportuntty+ CCooeS? AdaotivCSVvTT.O03:1 W Windsurf Team172004 liTe ehensd...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86580
|
2972
|
0
|
2026-05-28T15:01:45.605424+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980505605_m1.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
IAlSlackFileEditViewGoHistoryWindowActivity Monito IAlSlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess NamePhpStormkernel_taskWindowServerreplaydscreenpipeFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentcoreaudiodSlackClaudelaunchservicesdlanguage_server_macos_armActivity MonitorbluetoothdSlack HelperFirefoxFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentWispr FlowFirefoxCP Isolated Web ContentKarabiner-Core-ServiceiTerm2Wispr Flow Helper (Renderer)FirefoxCP Isolated Web Contentlogd% CPUThemeWidgetControlViewService (Slack)172,2112,067,463,314,210,19,38,38,26,16,05,75,15,04,64,12,82,82,42,01,91,81,71,61,51,41,21,2HelpCPU Time3:34:42,3023:30:13,507:56:41,746:25:01,783:41:45,5625:05,7759:28,3938:19,3831:31,641:00:07,9013:36,9928:48,541:03:22,1710:08,298:28,6120:02,3515:28,291:48:38,7919:22,9316:18,653:47,516:21,5120:28,741:04:28,765:16,6623:54,6316:50,6129,01System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKD •HomeDMsActivityFilesLater..•More+34,17%47,79%18,04%CPUED→Jiminny ...C9 UnreadsThreadsHuddlesDrafts & sentDirectoriesabExternal connections* Starred8platform-backend-...platform-inner-teamChannels# ai-chapter# alerts# backend# bugs# confusion-clinic# donut_time# engineering# general# happy_birthday& infosec_internal_all# infra-changes# infrastructure_dev# jbu-team-info# jiminny-bg# platform-team# platform-tickets010labl100% С8• Thu 28 May 18:01:45Describe what you are looking for* A platform-inner-team& 106 0• MessagesP Channel OverviewMore v+As of yesterdayOpen in JiraYesterday ~3 SummarizeToday ~Nikolay Nikolov 10:52 AMФикс за пускане на remote commands за staging:https://github.com/jiminny/app/pull/12132#12132 Fix stage profile for remote commandsrunJIRA: JY-XXXXDeployment notes:• NoneComments1V1jiminny/app| May 26th| Added by GitHubNikolay Nikolov 5:27 PMClaude Desktop почна много да ме льже, че имаconnection проблеми, а в логовете виждам, ченяма. Може би промяната по туловете гообъркаха. Найкрая след много настояване почнада врьща данниNikolay Yankov 5:43 PMкаква промянаMessage & platform-inner-team+...
|
NULL
|
-7962528695976148223
|
NULL
|
click
|
ocr
|
NULL
|
IAlSlackFileEditViewGoHistoryWindowActivity Monito IAlSlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess NamePhpStormkernel_taskWindowServerreplaydscreenpipeFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentcoreaudiodSlackClaudelaunchservicesdlanguage_server_macos_armActivity MonitorbluetoothdSlack HelperFirefoxFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentWispr FlowFirefoxCP Isolated Web ContentKarabiner-Core-ServiceiTerm2Wispr Flow Helper (Renderer)FirefoxCP Isolated Web Contentlogd% CPUThemeWidgetControlViewService (Slack)172,2112,067,463,314,210,19,38,38,26,16,05,75,15,04,64,12,82,82,42,01,91,81,71,61,51,41,21,2HelpCPU Time3:34:42,3023:30:13,507:56:41,746:25:01,783:41:45,5625:05,7759:28,3938:19,3831:31,641:00:07,9013:36,9928:48,541:03:22,1710:08,298:28,6120:02,3515:28,291:48:38,7919:22,9316:18,653:47,516:21,5120:28,741:04:28,765:16,6623:54,6316:50,6129,01System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKD •HomeDMsActivityFilesLater..•More+34,17%47,79%18,04%CPUED→Jiminny ...C9 UnreadsThreadsHuddlesDrafts & sentDirectoriesabExternal connections* Starred8platform-backend-...platform-inner-teamChannels# ai-chapter# alerts# backend# bugs# confusion-clinic# donut_time# engineering# general# happy_birthday& infosec_internal_all# infra-changes# infrastructure_dev# jbu-team-info# jiminny-bg# platform-team# platform-tickets010labl100% С8• Thu 28 May 18:01:45Describe what you are looking for* A platform-inner-team& 106 0• MessagesP Channel OverviewMore v+As of yesterdayOpen in JiraYesterday ~3 SummarizeToday ~Nikolay Nikolov 10:52 AMФикс за пускане на remote commands за staging:https://github.com/jiminny/app/pull/12132#12132 Fix stage profile for remote commandsrunJIRA: JY-XXXXDeployment notes:• NoneComments1V1jiminny/app| May 26th| Added by GitHubNikolay Nikolov 5:27 PMClaude Desktop почна много да ме льже, че имаconnection проблеми, а в логовете виждам, ченяма. Може би промяната по туловете гообъркаха. Найкрая след много настояване почнада врьща данниNikolay Yankov 5:43 PMкаква промянаMessage & platform-inner-team+...
|
86578
|
NULL
|
NULL
|
NULL
|
|
86579
|
2973
|
0
|
2026-05-28T15:01:44.614005+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980504614_m2.jpg...
|
Slack
|
platform-inner-team (Channel) - Jiminny Inc - 2 ne platform-inner-team (Channel) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
platform-backend-engineers
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
donut_time
engineering
general
happy_birthday
infosec_internal_all...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":6,"bounds":{"left":0.5152925,"top":1.0,"width":0.011968086,"height":-0.058260202},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":6,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":8,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":6,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":8,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":6,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":8,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":6,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":8,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":6,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":8,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":6,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":8,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":13,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":13,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":13,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":13,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":13,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":13,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-backend-engineers","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"donut_time","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"infosec_internal_all","depth":15,"on_screen":true,"role_description":"text"}]...
|
4370913600885512532
|
-5767819227997978889
|
click
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
platform-backend-engineers
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
donut_time
engineering
general
happy_birthday
infosec_internal_all
rnostolProinet vFV faVsco.is ~#12121 on JY-20963-fx-in= custom.logSF [minny@localhost)conealapeMEINSTALLMOwolcnnedvityCimbald.ongy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x(C)) Camrica chocoocole fEulXd console (STAGING"M.INTERNALWEBHOOK SETU? maliminny storaceACUViy.onTacoone aetroseclass rrospecccachepublic function findByProspectIdentifier(0182 436 ^ 4Do liminny v031 49 A28 У 3 У 108 A VWHERE u.tean id = 187 and sa.provider = 'salesforce':Malicenses.maMakere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sol query.saMAesNeiMs maSabCache = Sthis->dbCache-›findPro spect(Sconfiguration, [SidentifierType »> Sidentit 1717Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,17261721select * fron activities where id = 31264367select * fron contacts where id = 6331639;select * fron accounts whereselect * fron opportunities where id = 4843610:'account id' = 4156632, 'contact id' = 6331639, 'opportunity id' = 4843610'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*reurn nuli sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNT17231724select * fron text relays where created at > '2026-05-01':SdbCachef"contact'l = Sthis->staleRecondVaLidatonesfiltenStale/Sabbachef"contact"l.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. SaoesaSerr"oncevetes order oydescmh Sytemal Ubrariesv =0 Cemtches and Consolosv @ Database ConsolesV AEU# console cUA DEAL RISKS (EUSaheachelt" contact"sinstanceor Contactal=172eSerer"on usens where nareakesuirsSaccount = Sahrachel'contact" o>ae+Accountol17RASELECT * FROM oppontunitaies WHERE uufd to bin(:04a9cfad-2c87-4453-9672-28seb78ccf8d*) = uufd:Saheachelt'account"e SaccountSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationmeutsunСАКОЛАКАТІАААФАЛФІЇ ІЛАФТАТSarvicaei7 Outpur1jiminny.opportunities xvontameA1rowvOUTre Aieal4QM0A0& console 11 gy2liminny@localhostA HSJJocalA SCyhopon# ConsoloV A STAGINGA consolo,noakorOid7681423uuid (uuTd with time-low and tine-hich swapoed)l84a9c6ad-2c87-4453-9c72-20acb78cc68d112 to0n salSSStcrn_configuration_idAr accountid1014019At stage_id28616Bstage_updated.at7826-85-2818736759Le record_type_1dcrn_provider..ouser id(8) ounenidnaneM valueM cunnency. codd1812138848855Centaiva Capiital - EU HY/TGправавив:Bis closecDis won1 close datenonkros.neMlorobabiLityo Inu co moy 1o:01.44+0.ВНMП HIICecsdales OrceancworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...):Md This eay call Salesforce::matchByDomaindSteo 7: Domain Search Tragers Doportunity Synenownthnrthnde.noooudt @hxacdcalwiithraatadonodrtunScraservice-syncopportunttylScrProviderlo#/ Calls importOpportunityd+0cooeS? Adaotiv1220.04UTE.8...
|
86575
|
NULL
|
NULL
|
NULL
|
|
86578
|
NULL
|
0
|
2026-05-28T15:01:42.897028+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980502897_m1.jpg...
|
Slack
|
platform-tickets (Channel) - Jiminny Inc - 2 new i platform-tickets (Channel) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
platform-backend-engineers
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
donut_time
engineering
general
happy_birthday
infosec_internal_all
infra-changes
infrastructure_dev
jbu-team-info
jiminny-bg
platform-team
platform-tickets
product_launches
random
releases
support
thank-yous
the_people_of_jiminny
Iliyana Netseva
Vasil Vasilev
Stefka Stoyanova
Stoyan Tomov
Petko Kashinski
Galya Dimitrova
Todor Stamatov
Steliyan Georgiev
Ves
Mira
Nikolay Yankov
James Graham
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":6,"bounds":{"left":0.51180553,"top":0.08111111,"width":0.025,"height":0.04},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":6,"bounds":{"left":0.50625,"top":0.14,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":8,"bounds":{"left":0.5138889,"top":0.19222222,"width":0.020833334,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":6,"bounds":{"left":0.50625,"top":0.21555555,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":8,"bounds":{"left":0.5159722,"top":0.26777777,"width":0.016666668,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":6,"bounds":{"left":0.50625,"top":0.2911111,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":8,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.027083334,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.0055555557,"height":0.015555556}},{"char_start":1,"char_count":7,"bounds":{"left":0.5159722,"top":0.34333333,"width":0.022222223,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":6,"bounds":{"left":0.50625,"top":0.36666667,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":8,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.015972223,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.004166667,"height":0.015555556}},{"char_start":1,"char_count":4,"bounds":{"left":0.5208333,"top":0.4188889,"width":0.011805556,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":6,"bounds":{"left":0.50625,"top":0.4422222,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":8,"bounds":{"left":0.5152778,"top":0.49444443,"width":0.018055556,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":6,"bounds":{"left":0.50625,"top":0.5177778,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":8,"bounds":{"left":0.5152778,"top":0.57,"width":0.01875,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":13,"bounds":{"left":0.57708335,"top":0.14,"width":0.038194444,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":13,"bounds":{"left":0.57708335,"top":0.1711111,"width":0.036805555,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":13,"bounds":{"left":0.57708335,"top":0.20222223,"width":0.038194444,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":13,"bounds":{"left":0.57708335,"top":0.23333333,"width":0.06111111,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":13,"bounds":{"left":0.68472224,"top":0.23444444,"width":0.0055555557,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":13,"bounds":{"left":0.57708335,"top":0.26444444,"width":0.050694443,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-backend-engineers","depth":15,"bounds":{"left":0.58819443,"top":0.39555556,"width":0.09236111,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.39555556,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":25,"bounds":{"left":0.59444445,"top":0.39555556,"width":0.12291667,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":16,"bounds":{"left":0.58819443,"top":0.42666668,"width":0.093055554,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":15,"bounds":{"left":0.58819443,"top":0.5,"width":0.046527777,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":15,"bounds":{"left":0.58819443,"top":0.5311111,"width":0.025694445,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.5311111,"width":0.0055555557,"height":0.02}},{"char_start":1,"char_count":5,"bounds":{"left":0.59375,"top":0.5311111,"width":0.019444445,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":15,"bounds":{"left":0.58819443,"top":0.56222224,"width":0.038194444,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":15,"bounds":{"left":0.58819443,"top":0.5933333,"width":0.022222223,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":15,"bounds":{"left":0.58819443,"top":0.6244444,"width":0.072222225,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.6244444,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":15,"bounds":{"left":0.59305555,"top":0.6244444,"width":0.06736111,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"donut_time","depth":15,"bounds":{"left":0.58819443,"top":0.65555555,"width":0.05277778,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":15,"bounds":{"left":0.58819443,"top":0.68666667,"width":0.054166667,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":15,"bounds":{"left":0.58819443,"top":0.7177778,"width":0.034027778,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":15,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.07083333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"infosec_internal_all","depth":15,"bounds":{"left":0.58819443,"top":0.78,"width":0.0875,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.78,"width":0.0027777778,"height":0.02}},{"char_start":1,"char_count":19,"bounds":{"left":0.59097224,"top":0.78,"width":0.084027775,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"infra-changes","depth":15,"bounds":{"left":0.58819443,"top":0.8111111,"width":0.061805554,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"infrastructure_dev","depth":15,"bounds":{"left":0.58819443,"top":0.8422222,"width":0.084027775,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jbu-team-info","depth":15,"bounds":{"left":0.58819443,"top":0.87333333,"width":0.0625,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":15,"bounds":{"left":0.58819443,"top":0.90444446,"width":0.048611112,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-team","depth":15,"bounds":{"left":0.58819443,"top":0.9355556,"width":0.065972224,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":15,"bounds":{"left":0.58819443,"top":0.96666664,"width":0.072916664,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.96666664,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":15,"bounds":{"left":0.59444445,"top":0.96666664,"width":0.06666667,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Iliyana Netseva","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stefka Stoyanova","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Stoyan Tomov","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Petko Kashinski","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Todor Stamatov","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Ves","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Mira","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"James Graham","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":9,"bounds":{"left":0.71319443,"top":0.12777779,"width":0.06458333,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":11,"bounds":{"left":0.7326389,"top":0.14,"width":0.039583333,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Add canvas","depth":10,"bounds":{"left":0.7798611,"top":0.12777779,"width":0.07152778,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add canvas","depth":12,"bounds":{"left":0.79930556,"top":0.14,"width":0.046527777,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":9,"bounds":{"left":0.85347223,"top":0.12777779,"width":0.04375,"height":0.04222222},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":11,"bounds":{"left":0.87291664,"top":0.14,"width":0.01875,"height":0.017777778},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.87291664,"top":0.14,"width":0.0055555557,"height":0.017777778}},{"char_start":1,"char_count":4,"bounds":{"left":0.8784722,"top":0.14,"width":0.013194445,"height":0.017777778}}],"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":9,"bounds":{"left":0.9,"top":0.12777779,"width":0.022222223,"height":0.04222222},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":9,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":9,"on_screen":false,"role_description":"text"}]...
|
-496622931568197805
|
-3514615380885433746
|
click
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
platform-backend-engineers
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
donut_time
engineering
general
happy_birthday
infosec_internal_all
infra-changes
infrastructure_dev
jbu-team-info
jiminny-bg
platform-team
platform-tickets
product_launches
random
releases
support
thank-yous
the_people_of_jiminny
Iliyana Netseva
Vasil Vasilev
Stefka Stoyanova
Stoyan Tomov
Petko Kashinski
Galya Dimitrova
Todor Stamatov
Steliyan Georgiev
Ves
Mira
Nikolay Yankov
James Graham
Lukas Kovalik
you
Jira Cloud
Toast
Messages
Messages
Add canvas
Add canvas
Files
Files
Add and Edit Channel Tabs
Canvas
List
Folder
IAlSlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess NamePhpStormkernel_taskWindowServerreplaydscreenpipeFirefoxCP Isolated Web ContentSlack Helper (Renderer)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentcoreaudiodSlackClaudelaunchservicesdlanguage_server_macos_armActivity MonitorbluetoothdSlack HelperFirefoxFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentWispr FlowFirefoxCP Isolated Web ContentKarabiner-Core-ServiceiTerm2Wispr Flow Helper (Renderer)FirefoxCP Isolated Web Contentlogd% CPUThemeWidgetControlViewService (Slack)172,2112,067,463,314,210,19,38,38,26,16,05,75,15,04,64,12,82,82,42,01,91,81,71,61,51,41,21,2HelpCPU Time3:34:42,3023:30:13,507:56:41,746:25:01,783:41:45,5625:05,7759:28,3938:19,3831:31,641:00:07,9013:36,9928:48,541:03:22,1710:08,298:28,6120:02,3515:28,291:48:38,7919:22,9316:18,653:47,516:21,5120:28,741:04:28,765:16,6623:54,6316:50,6129,01System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKD ,27%49,34%27,39%CPU••EDHomeDMsActivityFilesLater..•More+→Jiminny ...C9 UnreadsThreadsHuddlesDrafts & sentDirectoriesabExternal connections* Starred8platform-backend-...platform-inner-teamChannels# ai-chapter# alerts# backend# bugs# confusion-clinic# donut_time# engineering# general# happy_birthday& infosec_internal_all# infra-changes# infrastructure_dev# jbu-team-info# jiminny-bg# platform-team#platform-tickets01• 0labl100% С8• Thu 28 May 18:01:42Describe what you are looking for# platform-tickets8146 0• Messagest Add canvasO Files+Monday, May 18th ~Automation for Jira APP10:55 AMSRD-6862 'User does not have any of thenecessary access rights' when trying to see anotherteam's performance scored with the Al ACS in teaminsights. has been raised with Platform team andassigned to Stoyan Tomov. The Priority is P2MediumAutomation for Jira APP6:13 PMSRD-6865 [Coaching and Framework] user is notable to save their work. has been raised withPlatform team and assigned to **. The Priority is **Thursday, May 21st ~Automation for Jira APP 11:29 AMSRD-6871 Sensi.Ai - Call data not logging toHubSpot activity has been raised with Platformteam and assigned to Stoyan Tomov. The Priority isP2 MediumYesterday~Automation for Jira APP 8:10 PMSRD-6881 [On demand] Transcription in savedsearch disappears has been raised with Platformteam and assigned to **. The Priority is **Message #platform-tickets...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86577
|
2970
|
34
|
2026-05-28T15:01:32.757362+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980492757_m1.jpg...
|
Slack
|
platform-tickets (Channel) - Jiminny Inc - 2 new i platform-tickets (Channel) - Jiminny Inc - 2 new items - Slack...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
platform-backend-engineers
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
donut_time
engineering
general
happy_birthday
infosec_internal_all
infra-changes...
|
[{"role":"AXPopUpButton","text [{"role":"AXPopUpButton","text":"Switch workspaces… (Jiminny Inc) Has new messages","depth":6,"bounds":{"left":0.51180553,"top":0.08111111,"width":0.025,"height":0.04},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":6,"bounds":{"left":0.50625,"top":0.14,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":8,"bounds":{"left":0.5138889,"top":0.19222222,"width":0.020833334,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":6,"bounds":{"left":0.50625,"top":0.21555555,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":8,"bounds":{"left":0.5159722,"top":0.26777777,"width":0.016666668,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":6,"bounds":{"left":0.50625,"top":0.2911111,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":8,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.027083334,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51111114,"top":0.34333333,"width":0.0055555557,"height":0.015555556}},{"char_start":1,"char_count":7,"bounds":{"left":0.5159722,"top":0.34333333,"width":0.022222223,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":6,"bounds":{"left":0.50625,"top":0.36666667,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":8,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.015972223,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51666665,"top":0.4188889,"width":0.004166667,"height":0.015555556}},{"char_start":1,"char_count":4,"bounds":{"left":0.5208333,"top":0.4188889,"width":0.011805556,"height":0.015555556}}],"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":6,"bounds":{"left":0.50625,"top":0.4422222,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":8,"bounds":{"left":0.5152778,"top":0.49444443,"width":0.018055556,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":6,"bounds":{"left":0.50625,"top":0.5177778,"width":0.036111113,"height":0.075555556},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":8,"bounds":{"left":0.5152778,"top":0.57,"width":0.01875,"height":0.015555556},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":13,"bounds":{"left":0.57708335,"top":0.14,"width":0.038194444,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":13,"bounds":{"left":0.57708335,"top":0.1711111,"width":0.036805555,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":13,"bounds":{"left":0.57708335,"top":0.20222223,"width":0.038194444,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":13,"bounds":{"left":0.57708335,"top":0.23333333,"width":0.06111111,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":13,"bounds":{"left":0.68472224,"top":0.23444444,"width":0.0055555557,"height":0.017777778},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":13,"bounds":{"left":0.57708335,"top":0.26444444,"width":0.050694443,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"platform-backend-engineers","depth":15,"bounds":{"left":0.58819443,"top":0.39555556,"width":0.09236111,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.39555556,"width":0.00625,"height":0.02}},{"char_start":1,"char_count":25,"bounds":{"left":0.59444445,"top":0.39555556,"width":0.12291667,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":15,"bounds":{"left":0.58819443,"top":0.42666668,"width":0.093055554,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":15,"bounds":{"left":0.58819443,"top":0.5,"width":0.046527777,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":15,"bounds":{"left":0.58819443,"top":0.5311111,"width":0.025694445,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.5311111,"width":0.0055555557,"height":0.02}},{"char_start":1,"char_count":5,"bounds":{"left":0.59375,"top":0.5311111,"width":0.019444445,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":15,"bounds":{"left":0.58819443,"top":0.56222224,"width":0.038194444,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"bugs","depth":15,"bounds":{"left":0.58819443,"top":0.5933333,"width":0.022222223,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":15,"bounds":{"left":0.58819443,"top":0.6244444,"width":0.072222225,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.6244444,"width":0.0048611113,"height":0.02}},{"char_start":1,"char_count":15,"bounds":{"left":0.59305555,"top":0.6244444,"width":0.06736111,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"donut_time","depth":15,"bounds":{"left":0.58819443,"top":0.65555555,"width":0.05277778,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":15,"bounds":{"left":0.58819443,"top":0.68666667,"width":0.054166667,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":15,"bounds":{"left":0.58819443,"top":0.7177778,"width":0.034027778,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"happy_birthday","depth":15,"bounds":{"left":0.58819443,"top":0.7488889,"width":0.07083333,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"infosec_internal_all","depth":15,"bounds":{"left":0.58819443,"top":0.78,"width":0.0875,"height":0.02},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.58819443,"top":0.78,"width":0.0027777778,"height":0.02}},{"char_start":1,"char_count":19,"bounds":{"left":0.59097224,"top":0.78,"width":0.084027775,"height":0.02}}],"role_description":"text"},{"role":"AXStaticText","text":"infra-changes","depth":15,"bounds":{"left":0.58819443,"top":0.8111111,"width":0.061805554,"height":0.02},"on_screen":true,"role_description":"text"}]...
|
4619749245387042439
|
-5812855224271683849
|
visual_change
|
hybrid
|
NULL
|
Switch workspaces… (Jiminny Inc) Has new messages
Switch workspaces… (Jiminny Inc) Has new messages
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
1
Directories
platform-backend-engineers
platform-inner-team
ai-chapter
alerts
backend
bugs
confusion-clinic
donut_time
engineering
general
happy_birthday
infosec_internal_all
infra-changes
IAlSlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess Name% CPUPhpStormkernel_taskWindowServerreplaydscreenpipelavaFirefoxCP Isolated Web ContentSlack Helper (Renderer)launchservicesdcoreaudiodFirefoxCP Isolated Web ContentActivity MonitorbluetoothdClaudeFirefoxCP Isolated Web Contentlanguage_server_macos_armSlackFirefoxCP Isolated Web ContentFirefoxRaycastFirefoxCP Isolated Web ContentiTerm2FirefoxCP Isolated Web ContentWispr FlowFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentSlack Helperopendirectoryd199,4198,079,965,664,617,111,09,38,37,44,94,74,73,83,53,12,82,72,72,52,52,32,32,22,22,22,22,1HelpCPU Time3:34:26,5823:29:56,607:56:34,146:24:55,273:41:41,472,0638:18,3559:25,061:03:21,871:00:07,1925:05,008:28,0720:01,9028:48,1119:22,6410:07,0913:36,2016:18,401:48:38,474:12,4111:39,291:04:28,5423:54,491:22,454:05,8431:31,0215:27,8311:08,38System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKD •HomeDMsActivityFilesLater..•More+45,67%51,75%2,57%CPUED→Jiminny ...C9 UnreadsThreadsHuddlesDrafts & sentDirectoriesabExternal connections* Starredplatform-backend-...platform-inner-teamChannels# ai-chapter# alerts# backend# bugs# confusion-clinic# donut_time# engineering# general# happy_birthday& infosec_internal_all# infra-changes# infrastructure_dev# jbu-team-info# jiminny-bg# platform-team#platform-tickets01• 0labl100% С8• Thu 28 May 18:01:32Describe what you are looking for# platform-tickets8146 0• Messagest Add canvasO Files+Monday, May 18th ~Automation for Jira APP10:55 AMSRD-6862 'User does not have any of thenecessary access rights' when trying to see anotherteam's performance scored with the Al ACS in teaminsights. has been raised with Platform team andassigned to Stoyan Tomov. The Priority is P2MediumAutomation for Jira APP6:13 PMSRD-6865 [Coaching and Framework] user is notable to save their work. has been raised withPlatform team and assigned to **. The Priority is **Thursday, May 21st ~Automation for Jira APP 11:29 AMSRD-6871 Sensi.Ai - Call data not logging toHubSpot activity has been raised with Platformteam and assigned to Stoyan Tomov. The Priority isP2 MediumYesterday~Automation for Jira APP 8:10 PMSRD-6881 [On demand] Transcription in savedsearch disappears has been raised with Platformteam and assigned to **. The Priority is **Message #platform-tickets...
|
86576
|
NULL
|
NULL
|
NULL
|
|
86576
|
2970
|
33
|
2026-05-28T15:01:29.368671+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980489368_m1.jpg...
|
Slack
|
! Iliyana Netseva (DM) - Jiminny Inc - 3 new items ! Iliyana Netseva (DM) - Jiminny Inc - 3 new items - Slack...
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
SlackFileEditViewGoHistoryWindowActivity MonitorAl SlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess Name% CPUPhpStormkernel_taskscreenpipereplaydlanguage_server_macos_armWindowServerFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentcoreaudiodActivity Monitorbluetoothdlaunchservicesdcef_server Helper (Renderer)CursorUlViewService (Not Responding)opendirectorydSlack Helper (Renderer)FirefoxCP Isolated Web ContentWispr FlowFirefoxiTerm2Control CentreSlacklogdlaunchdWispr Flow Helper (Renderer)cef_servermds_storescef_server Helper (GPU)320,2157,047,537,225,118,412,510,18,24,4HelpCPU Time3:34:16,0223:29:46,113:41:38,046:24:51,7910:06,937:56:29,9119:22,4638:17,771:00:06,808:27,8220:01,661:03:21,438:25,055:53,4911:08,2659:24,5716:18,263:47,181:48:38,331:04:28,4220:25,8013:36,0516:50,3819:13,865:16,413:50,711:09:41,387:42,01System:User:Idle:Threads CPUMemoryIdie Wake-Ups EnelKp47,54%52,12%0,35%CPUHomeDMsActivityFilesLater..•More+ED→Jiminny...@ UnreadsThreads6d Huddles• Drafts & sentDirectoriesabExternal connections* Starredplatform-backend-...platform-inner-teamChannels# ai-chapter# alerts# backend# bugs# confusion-clinic# donut_time# engineering# general# happy_birthday8 infosec_internal_all# infra-changes# infrastructure_dev# jbu-team-info# jiminny-bg#platform-team& Unread mentions01(alo)100% CThu 28 May 18:01:28Describe what you are looking forlliyana Netseva• MessagesAdd canvas+myand ivetseva Ju4rMiima li prichv 4 new messagesprosto taka e napraveno nakogaXpo tozi nachin iliLukas Kovalik 3:05 PMне знам, композитен филтьр е може би трябвада си настроиш нещата и после да направишедна заявка (Asked by например)тука не сьм сигурен, по-скоро е за продуктlliyana Netseva 4:00 PMok, thank youlliyana Netseva 5:45 PMИмам питане и се чудя към кого мога да сеобърна?става дума за deal insightsLukas Kovalik 5:54 PMПитай, ако мога ще отговоряNewlliyana Netseva 5:56 PMимам сделка която е със статус won но е вclosed losttova e ID-to 04a9cfad-2c87-4453-9e72-20aeb78ccf8d na sdelkataLukas Kovalik 6:00 PMUS или EU (edited)lliyana Netseva 6:01 PMeuMessage Iliyana Netseva...
|
NULL
|
6907110044472499457
|
NULL
|
click
|
ocr
|
NULL
|
SlackFileEditViewGoHistoryWindowActivity MonitorAl SlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess Name% CPUPhpStormkernel_taskscreenpipereplaydlanguage_server_macos_armWindowServerFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentcoreaudiodActivity Monitorbluetoothdlaunchservicesdcef_server Helper (Renderer)CursorUlViewService (Not Responding)opendirectorydSlack Helper (Renderer)FirefoxCP Isolated Web ContentWispr FlowFirefoxiTerm2Control CentreSlacklogdlaunchdWispr Flow Helper (Renderer)cef_servermds_storescef_server Helper (GPU)320,2157,047,537,225,118,412,510,18,24,4HelpCPU Time3:34:16,0223:29:46,113:41:38,046:24:51,7910:06,937:56:29,9119:22,4638:17,771:00:06,808:27,8220:01,661:03:21,438:25,055:53,4911:08,2659:24,5716:18,263:47,181:48:38,331:04:28,4220:25,8013:36,0516:50,3819:13,865:16,413:50,711:09:41,387:42,01System:User:Idle:Threads CPUMemoryIdie Wake-Ups EnelKp47,54%52,12%0,35%CPUHomeDMsActivityFilesLater..•More+ED→Jiminny...@ UnreadsThreads6d Huddles• Drafts & sentDirectoriesabExternal connections* Starredplatform-backend-...platform-inner-teamChannels# ai-chapter# alerts# backend# bugs# confusion-clinic# donut_time# engineering# general# happy_birthday8 infosec_internal_all# infra-changes# infrastructure_dev# jbu-team-info# jiminny-bg#platform-team& Unread mentions01(alo)100% CThu 28 May 18:01:28Describe what you are looking forlliyana Netseva• MessagesAdd canvas+myand ivetseva Ju4rMiima li prichv 4 new messagesprosto taka e napraveno nakogaXpo tozi nachin iliLukas Kovalik 3:05 PMне знам, композитен филтьр е може би трябвада си настроиш нещата и после да направишедна заявка (Asked by например)тука не сьм сигурен, по-скоро е за продуктlliyana Netseva 4:00 PMok, thank youlliyana Netseva 5:45 PMИмам питане и се чудя към кого мога да сеобърна?става дума за deal insightsLukas Kovalik 5:54 PMПитай, ако мога ще отговоряNewlliyana Netseva 5:56 PMимам сделка която е със статус won но е вclosed losttova e ID-to 04a9cfad-2c87-4453-9e72-20aeb78ccf8d na sdelkataLukas Kovalik 6:00 PMUS или EU (edited)lliyana Netseva 6:01 PMeuMessage Iliyana Netseva...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86575
|
NULL
|
0
|
2026-05-28T15:01:29.199500+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980489199_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_expanded":false}]...
|
1101258516708334978
|
-9211620050090884732
|
click
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-l= custom.logIaravellodSF [minny@localhost)coneolpeMEINSTALLMOwalcnnedvityChmbalo.omgy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x©) Service.pho# console (EU) X)tconsole ISTAGING"M.INTERNALWEBHOOK SETU? maRocoraselector.ongliminny storaceDo liminny vTEnCoan aetroseclass rrospecccacheMalicenses.mapublic function findByProspectIdentifier(ARAZWA3BAV1715—1716031 49 A28 У 3 У 108 A VWHERE u.tean id = 187 and sa.provider = 'salesforce':Makere0 package-lock.jsonphpstan.neon.distF phpstan-baseline.neon4>phpunit.xmlraw.sal.query.saMAesNeiMs maSabCache = Sthis->dbCache->findPro spect(Sconfiguration, [SidentifierType *> Sidents 2727Sif Cenpty(array filter(SdbGache)))Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,1726select * fron activities where id = 31264367select * fron contacts where id = 6331639;select * fron accounts where id = 4156632:colont & Eoan Annantunitjoe whono id-helzknesreurn nul172117221723'Ir74"account id' = 4156632, 'contact id' = 6331639, 'opportunity id = 4843610"'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*i sonar-project propertiesEtest.py<> Untitied Diagram.xmlus vetur.config.isAWISANOOK SITSOINGMOSUNTselect * fron text relays where created at > '2026-05-01':SdbCachef "contact'l = Sthis->staleRecondVaLidatonesfiltenStale(Sabbachef'contact"1.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"1. SccesaSere"onmeweres order owo desthnt. Sytemallloranesv =0 Cemtches and Consolesv @ Database ConsolesV AEUSaheachel" contact"instanceor contactl=112eSerer"on usens where nreakesuir# console cUA DEAL RISKS (EUmeutsun3686899Saccount = Sahlachel'contact' o>ae-Accounto17R9SELECT * FROM oppontunitaies WHERE uufd to bin('04a9cfad-2687-4453-9672-28seb78ccf8d') = uufdel 75Saheachelt'accounte SaccountSopportunity = Sthis->findüpportunityinContactRoles(Sconts aurats.onСАКОЛАКАТІАААФАЛФІЇ ІЛАФТАТSarvicaeiE Outpurtl fiminny.opportunitiesvontameAOrows v of0+5@* TcAutov V 2DDLдаMaA0am id Tam uuidyin team id y : ie crn confiquration id yR account id : nstage id : (m)stage updated at a In record type 1d v:Am ern provider id Tuser idconeoln?y2liminny@localhostA HSJJocalу Лopon# ConsoloASTAGINGA consolo,noakorCecsdales Orcnnworceoeionhtoreachsoartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrconsMd This eay call Salesforce::matchByDomaindSteo 7: Domain Search Triaaers Doportunity Syncnownthirthnoenotoudt@hyatdca"wiithrantadonodrtunScraservice-syncopportunttylScrProviderid#/ Calls importOpportunity(+O code lS? Adaotivim ouner. idyTO0У L7inu co woy to.ulServiceTest+0.CSVvum is closedmts won TN MMaur Tosme 173004liTe8 ensd...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86574
|
2970
|
32
|
2026-05-28T15:01:26.425890+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980486425_m1.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-824022620702545522
|
-9103533727753729596
|
visual_change
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
SlackFileEditViewGoHistoryWindowActivity MonitorAll ProcessesProcess Name% CPUPhpStormkernel_taskscreenpipereplaydlanguage_server_macos_armWindowServerFirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentcoreaudiodActivity Monitorbluetoothdlaunchservicesdcef_server Helper (Renderer)CursorUlViewService (Not Responding)opendirectorydSlack Helper (Renderer)FirefoxCP Isolated Web ContentWispr FlowFirefoxiTerm2Control CentreSlacklogdlaunchdWispr Flow Helper (Renderer)cef_servermds_storescef_server Helper (GPU)320,2157,047,537,225,118,412,510,18,24,4HelpCPU Time3:34:16,0223:29:46,113:41:38,046:24:51,7910:06,937:56:29,9119:22,4638:17,771:00:06,808:27,8220:01,661:03:21,438:25,055:53,4911:08,2659:24,5716:18,263:47,181:48:38,331:04:28,4220:25,8013:36,0516:50,3819:13,865:16,413:50,711:09:41,387:42,01System:User:Idle:Threads CPUMemoryIdie Wake-Ups EnelKp46,78%52,64%0,59%CPU:HomeDMsActivityFilesLater..•More+ED→Jiminny...@ UnreadsThreadsHuddles• Drafts & sentDirectoriesabExternal connections* Starredplatform-backend-...platform-inner-teamChannels# ai-chapter# alerts# backend# bugs# confusion-clinic# donut_time# engineering# general# happy_birthday8 infosec_internal_all# infra-changes# infrastructure_dev# jbu-team-info# jiminny-bg#platform-team& Unread mentions01(alo)100% CThu 28 May 18:01:26Describe what you are looking forlliyana Netseva• MessagesAdd canvas+myand ivetseva JuarMiima li prichv 4 new messagesprosto taka e napraveno nakogaXpo tozi nachin iliLukas Kovalik 3:05 PMне знам, композитен филтьр е може би трябвада си настроиш нещата и после да направишедна заявка (Asked by например)тука не сьм сигурен, по-скоро е за продуктlliyana Netseva 4:00 PMok, thank youlliyana Netseva 5:45 PMИмам питане и се чудя към кого мога да сеобърна?става дума за deal insightsLukas Kovalik 5:54 PMПитай, ако мога ще отговоряNewlliyana Netseva 5:56 PMимам сделка която е със статус won но е вclosed losttova e ID-to 04a9cfad-2c87-4453-9e72-20aeb78ccf8d na sdelkataLukas Kovalik 6:00 PMUS или EU (edited)lliyana Netseva 6:01 PMeuMessage Iliyana Netseva...
|
86571
|
NULL
|
NULL
|
NULL
|
|
86573
|
2971
|
27
|
2026-05-28T15:01:25.152345+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980485152_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20 rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-lProinet vEonv locallE.env.migrateE.env.nikilocalE .env.otherE env.productionE env.production-euE .env.qaE env.galE env.root—enusacineE ditattributeseitienoreE oho-cs-fixer cachephp oho-cs-ixer distchophp.phpstorm.meta.phpchounitresult cacheE.prettierignorewindsurirlesmhode helcer.onoMotriesmMNlns macomnaeneieoncomnaeneideiSarvicaeivontameAconeoln?y2liminny@localhostyhoponIconcaldV A STAGINGA consolo,noakor= custom.logIaravellodSF [minny@localhost)coneolpewolennedvitycimbalo.ongy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x©) Service.phoconsole (EU X A console (STAGING"imiamyTEnCoan aetroseclass rrospecccacheCAAZRANBAV031A6 A28110AWHERE u.tean id = 187 and sa.provider = 'salesforce':public function findByProspectIdentifier(SabCache = Sthis->dbCache->findPro spect(Sconfiguration, [SidentifierType *> Sidents 2727select * fron activities where id = 31264367colont & tmn Mntsnte whond dr kockzo.Sif Cenpty(array filter(SdbGache)))Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,172617151721select * fron accounts where id = 4156632;colont & Eoan Annantunitjoe whono id -elzkne.• 'stage id' = 13273"account id' = 4156632, 'contact id' = 6331639, 'opportunity id' = 4843610'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*reurn nul1723'Ir74select * fron text relays where created at > '2026-05-01':SdbCachef "contact'l = Sthis->staleRecondVaLidatonesfiltenStale(Sabbachef'contact"1.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. SaonsaSere"onmeweres order owo desthSaheachelt" contact"sinstanceor Contactal=1izeSerer"on usens where nareakesuirsSaccount = Sahlachel'contact' o>ae-Accounto17R9ENSELECT * FROM oppontunitaies WHERE uufd to bin('04a9cfad-2687-4453-9672-28seb78ccf8d') = uufdil 3 sSaheachelt'accounte SaccountSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationСАКОЛАКАТІАААФАЛФІЇ ІЛАФТАТE Outpurtl fiminny.opportunitiesOrows v of0+5@* TcAutov V 2DDLam id Tam uuidyin team id y : ie crn confiquration id yaccount idy : nstage id w :m) stage updated atin record type. idcrn provider 1id Vi2user idTCecsdales Orcnnworceoeionhtoreachsoartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorvisreconsMd This eay call Salesforce::matchByDomaindSteo 7: Domain Search Triaaers Doportunity Syncnownthirthnoenotoudt@hyatdca"wiithrantadonodrtunScraservice-syncopportunttylScrProviderid#/ Calls importOpportunity(+O code l$ Adaotivim ouner. idyServiceTestTO0У L7inu co mey toul+0.CSV v:umis closed:is won YN MMaur Tosme 173004liTe8 ensd...
|
NULL
|
7329670987493842019
|
NULL
|
visual_change
|
ocr
|
NULL
|
rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20 rapstomViewCoocWindowFV faVsco.|s ~#12121 on JY-20963-fx-lProinet vEonv locallE.env.migrateE.env.nikilocalE .env.otherE env.productionE env.production-euE .env.qaE env.galE env.root—enusacineE ditattributeseitienoreE oho-cs-fixer cachephp oho-cs-ixer distchophp.phpstorm.meta.phpchounitresult cacheE.prettierignorewindsurirlesmhode helcer.onoMotriesmMNlns macomnaeneieoncomnaeneideiSarvicaeivontameAconeoln?y2liminny@localhostyhoponIconcaldV A STAGINGA consolo,noakor= custom.logIaravellodSF [minny@localhost)coneolpewolennedvitycimbalo.ongy uimaeumyociwiceonyvucrct uimocwecuccorolo.on(C) ProspectCache.php x©) Service.phoconsole (EU X A console (STAGING"imiamyTEnCoan aetroseclass rrospecccacheCAAZRANBAV031A6 A28110AWHERE u.tean id = 187 and sa.provider = 'salesforce':public function findByProspectIdentifier(SabCache = Sthis->dbCache->findPro spect(Sconfiguration, [SidentifierType *> Sidents 2727select * fron activities where id = 31264367colont & tmn Mntsnte whond dr kockzo.Sif Cenpty(array filter(SdbGache)))Sthie-ssendDatadooStote( resulE CeL&C-LOOKUP PESULT MISS, Sconficuration-300tProv,172617151721select * fron accounts where id = 4156632;colont & Eoan Annantunitjoe whono id -elzkne.• 'stage id' = 13273"account id' = 4156632, 'contact id' = 6331639, 'opportunity id' = 4843610'updated at' = 2026-85-22 87:16:17 where "id' = 31264367)*reurn nul1723'Ir74select * fron text relays where created at > '2026-05-01':SdbCachef "contact'l = Sthis->staleRecondVaLidatonesfiltenStale(Sabbachef'contact"1.SdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"I. SaonsaSere"onmeweres order owo desthSaheachelt" contact"sinstanceor Contactal=1izeSerer"on usens where nareakesuirsSaccount = Sahlachel'contact' o>ae-Accounto17R9ENSELECT * FROM oppontunitaies WHERE uufd to bin('04a9cfad-2687-4453-9672-28seb78ccf8d') = uufdil 3 sSaheachelt'accounte SaccountSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationСАКОЛАКАТІАААФАЛФІЇ ІЛАФТАТE Outpurtl fiminny.opportunitiesOrows v of0+5@* TcAutov V 2DDLam id Tam uuidyin team id y : ie crn confiquration id yaccount idy : nstage id w :m) stage updated atin record type. idcrn provider 1id Vi2user idTCecsdales Orcnnworceoeionhtoreachsoartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleorvisreconsMd This eay call Salesforce::matchByDomaindSteo 7: Domain Search Triaaers Doportunity Syncnownthirthnoenotoudt@hyatdca"wiithrantadonodrtunScraservice-syncopportunttylScrProviderid#/ Calls importOpportunity(+O code l$ Adaotivim ouner. idyServiceTestTO0У L7inu co mey toul+0.CSV v:umis closed:is won YN MMaur Tosme 173004liTe8 ensd...
|
86572
|
NULL
|
NULL
|
NULL
|
|
86571
|
2970
|
31
|
2026-05-28T15:01:21.742529+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980481742_m1.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
IAlSlackFileEditViewGoHistoryWindowHelpActivity Mo IAlSlackFileEditViewGoHistoryWindowHelpActivity MonitorAll ProcessesProcess Name% CPUCPU TimePhpStormkernel_taskreplaydscreenpipelanguage_server_macos_armWindowServerFirefoxCP Isolated Web Contentcoreaudiodlaunchservicesdcef_server Helper (Renderer)Activity Monitorbluetoothdcef_servertccdsyspolicydWispr Flowcef_server Helper (GPU)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentSlack Helper (Renderer)Notion Helper (Renderer)RaycastiTerm2Wispr Flow Helper (Renderer)FirefoxWispr FlowKarabiner-Core-Servicetrustd294,23:33:59,12141,663,723:29:37,8351,76:24:49,833:41:35,5310:05,607:56:28,9438:17,241:00:06,361:03:21,228:24,858:27,5920:01,443:50,649:02,0717:11,793:47,057:41,9416:18,1219:21,8059:24,4024:40,604:12,261:04:28,315:16,331:48:38,211:22,2620:28,4314:50,55System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKp ,72%58,75%3,52%CPUHomeDMsActivityFilesLater..•More+ED→Jiminny ...@ UnreadsThreads6d Huddles• Drafts & sentDirectoriesabExternal connections* Starredplatform-backend-...platform-inner-teamChannels# ai-chapter# alerts# backend# bugs# confusion-clinic# donut_time# engineering# general# happy_birthday& infosec_internal_all# infra-changes# infrastructure_dev# jbu-team-info# jiminny-bg#platform-team& Unread mentions01(alo)100% C8.Thu 28 May 18:01:21Describe what you are looking forlliyana Netseva• MessagesAdd canvas+myand ivetseva JuarMima li prichv 4 new messagesprosto taka e napraveno nakogaXpo tozi nachin iliLukas Kovalik 3:05 PMне знам, композитен филтьр е може би трябвада си настроиш нещата и после да направишедна заявка (Asked by например)тука не сьм сигурен, по-скоро е за продуктlliyana Netseva 4:00 PMok, thank youlliyana Netseva 5:45 PMИмам питане и се чудя към кого мога да сеобърна?става дума за deal insightsLukas Kovalik 5:54 PMПитай, ако мога ще отговоряNewlliyana Netseva 5:56 PMимам сделка която е със статус won но е вclosed losttova e ID-to 04a9cfad-2c87-4453-9e72-20aeb78ccf8d na sdelkataLukas Kovalik 6:00 PMUS или EU (edited)lliyana Netseva 6:01 PMeuMessage Iliyana Netseva...
|
NULL
|
-217107226687931283
|
NULL
|
typing_pause
|
ocr
|
NULL
|
IAlSlackFileEditViewGoHistoryWindowHelpActivity Mo IAlSlackFileEditViewGoHistoryWindowHelpActivity MonitorAll ProcessesProcess Name% CPUCPU TimePhpStormkernel_taskreplaydscreenpipelanguage_server_macos_armWindowServerFirefoxCP Isolated Web Contentcoreaudiodlaunchservicesdcef_server Helper (Renderer)Activity Monitorbluetoothdcef_servertccdsyspolicydWispr Flowcef_server Helper (GPU)FirefoxCP Isolated Web ContentFirefoxCP Isolated Web ContentSlack Helper (Renderer)Notion Helper (Renderer)RaycastiTerm2Wispr Flow Helper (Renderer)FirefoxWispr FlowKarabiner-Core-Servicetrustd294,23:33:59,12141,663,723:29:37,8351,76:24:49,833:41:35,5310:05,607:56:28,9438:17,241:00:06,361:03:21,228:24,858:27,5920:01,443:50,649:02,0717:11,793:47,057:41,9416:18,1219:21,8059:24,4024:40,604:12,261:04:28,315:16,331:48:38,211:22,2620:28,4314:50,55System:User:Idle:Threads CPUMemoryEnelIdle Wake-UpsKp ,72%58,75%3,52%CPUHomeDMsActivityFilesLater..•More+ED→Jiminny ...@ UnreadsThreads6d Huddles• Drafts & sentDirectoriesabExternal connections* Starredplatform-backend-...platform-inner-teamChannels# ai-chapter# alerts# backend# bugs# confusion-clinic# donut_time# engineering# general# happy_birthday& infosec_internal_all# infra-changes# infrastructure_dev# jbu-team-info# jiminny-bg#platform-team& Unread mentions01(alo)100% C8.Thu 28 May 18:01:21Describe what you are looking forlliyana Netseva• MessagesAdd canvas+myand ivetseva JuarMima li prichv 4 new messagesprosto taka e napraveno nakogaXpo tozi nachin iliLukas Kovalik 3:05 PMне знам, композитен филтьр е може би трябвада си настроиш нещата и после да направишедна заявка (Asked by например)тука не сьм сигурен, по-скоро е за продуктlliyana Netseva 4:00 PMok, thank youlliyana Netseva 5:45 PMИмам питане и се чудя към кого мога да сеобърна?става дума за deal insightsLukas Kovalik 5:54 PMПитай, ако мога ще отговоряNewlliyana Netseva 5:56 PMимам сделка която е със статус won но е вclosed losttova e ID-to 04a9cfad-2c87-4453-9e72-20aeb78ccf8d na sdelkataLukas Kovalik 6:00 PMUS или EU (edited)lliyana Netseva 6:01 PMeuMessage Iliyana Netseva...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86572
|
2971
|
26
|
2026-05-28T15:01:21.288099+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980481288_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
rnpstomViewCoocKelucioWindowFV faVsco.|s ~#12121 o rnpstomViewCoocKelucioWindowFV faVsco.|s ~#12121 on JY-20963-fx-Proinet vEonv locallE.env.migrateE.env.nikilocalE .env.otherE env.productionE env.production-euE.env.qaE env.galE env.rootE env stagingE ditattributeseitenoreE oho-cs-fixer cachephp oho-cs-ixer distchowolcnnedvilycimbato.ongUucriot Cimocwiccuccorolo.oh© ProspectCache.php xclass rrospecccache0142php.phpstorm.meta.phpchounitresult cacheE.prettierignorewindsurirlesWotriesnMNlns macomnaenieoncomnaeneidedanandoneucchachtarehodou lentFidety5infontion iean die.MINCYALIMAMAINTSONAL MERHOOK CSYIID MA|iminny_storagewliconcos maM Makefilepackage-lock jsonEchostan.neon.distE chostan-baseline.neor<> phounit.xmlawversMNOSAOM E mosoi sonar-proiect propertiesEtestiov<Unttled osaram.xmllI vetur. config.isMIWEBHOOK FILTEIING IMOLENENTATБББBEВGEEЕВВЕСGUЙ85Ü38322tih Excemsl tibrarev =9 Scratchas and Consolosyaatabase Consoleeconealo istiANGAL PIGKC IEITAGuteunpublic function findByProspectIdentifier(Socectho e Stnia- sotache fihetre spet(fenrtisureten, (Sisentflon yo » Sitentita1689Sif Cenpty(array filter(SdbGache)))Sthis->sendDatadogStats( result: self::LO0KUP_RESULT_MISS, $configuration->getProvir169116931695Sabeachercontacte StheesstnlebecordyaldidatonetenStale Scbrachell contact"roySdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead" I. SaceSer 169%if (SdbCache['contact') instanceof Contact) 1Saccount = Sahlachel'contact' o>ae-AccountoSaheachelt'account"e SaccountSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationSprofile,SdbCache ('contact')->getidoSopportunity = Sthis->staleRecordValidator->filterStale(Sopportunity. ScrnService178517081716[1711if (Sopportunity instanceof Opportunity) 4Sthis->Logger->info('ProspectCache - Found opportunities by contact roles'. 1712=sopporcunzty->oec.dID:SdbCache(['account') = Sopportunity->getAccounto} elseif (Saccount instanceof Account)Soppontunity = Sthis->act0poontunftyFno-Database171412151716E177contactld: Sdbfachef "contact" b>octido.1720usenidr suseriSahcachelt"onnortunity"n Saodortuntty?Sdhlachet'stane'le Sahtachel"annontunt ty" Do%oetStade Or= 1728-1730* CTkPORTANT The keus euet ainaus he sn this eyoct onde.inu co mey toule+0.4 console (EU) X0 0 €imiomwAND 1d IN (691,select * fron teans;SELECT DISTINCT u.id, u.enail, u.nane, u.softphone_number, COUNT(a.1d) as sms_countINNER JOIN activities a 1<->i.n: ON U.id = a.user_idWHERE a.type LIKE 'sms%lnerastarnt mis SAmawaEPVAXATINAYGROUP BY v.id, v.email, u.nane, u.softphone_numberMonse Ayene thint nesSELECT DISTINCT u.id, v.email, u.nane, u.team id, t.name as tean name.t.tuiliosms sid, t.twilio nessaging sidFROM users uINNER JOIN teans t 1.n<->1: ON u.team id = t.idWHERE (t.twilio sms sid IS NOT NULL OR t.twilio messaging sid IS NOT NULL)AND U.status = 1ORDER BY t.nane, u,enail:SELECT * FROM teans WHERE nane LTKE "%Tourlanes': # 187, 299. 8159.salesfonce-adninetourlane.comSELECTCONCAT(U.1d, CASE WHEN u.id = t.ouner_id THEN ' (ouner)' ELSE ** END) AS user_idsa.*,thonnen 1d FROM social accounts salJOIN users u on u.id = sa.sociable_idJOTM teane + 1.ncost: on tuid = u.team sidWHERE U.tean_id = 187 and sa.provider = 'salesforce':salect*hon nctivi aies where 1d = 377643671salect*tnon contacts wherd 1d = 63311639select x fron accounts where id = 4156632;sollect * tnon onnortuni dies where sid = 48lko1e:set 'account id' = 4156632, "contact id' = 6331639antwtloeundotorot292k-95.72 97:14017 Thand"opportunity id' = 4843610select * fron text relays where created at > '2026-05-01*:select * fron activities order by id desc:select * fron users where nane Like "%Subra%':GGIECT & SO0M ANnANtInS+10G NHEDE MIEN TAUNAN/IOROGAEOR,2A92.1/G7.0072.2000628AAG900)ETIRRD-ds tntmCecsdales OrceancworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...):M d This nay call Salesforce::matchByDomain()Steo 7: Domain Search Triaaers Doportunity Syncnownthirthnoenotoudt@hyatdc"wiithrantadonodrtunIl To get cocortunity details, it calls:// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopoortunttyScrProviderid// Calls importOpportunity()Step 8: The Bug - ImportOpportunitvß) Creates Temporary RecorcTaloh.a/users/was/Toinay/aoo/apn/Services/cra/Salestorce/Service.ono:143%-1448private function inportOpportunity(ScreData): ?OpportunityM 8s. Restore tron trash Cline 1430)Sthis->restoreAnyTrashedEntity(Sthis→>config=>opportunities(), ScrmData('Id']):// 80. CREATE/UPDATE - 0gSoptuniity now sri with valleoo innasochetSopportunity = sthis→config-sopportunities)JCAt thie Caaat CAMArtnTUNAC VALTO TAA 17095257Mthoor ed artnsind the th ebns 1442Sthicastemethooortntterfioldhata /Cerhath ComBlalde. ConnoctunttvesfaleI1 8A. MOM Celeta se nonín (ina 1444)Sthis=shandle0biectDeletion(Sopportunity, Scrnbata)I/ 8e. Return null (Lines 1446-1448)socoortuny-o"rashece)Ctan a.tha Cheesdad nalatadttnisoue to/detviCANAN Maur Tosm17200lITG-e...
|
NULL
|
635137643361505631
|
NULL
|
typing_pause
|
ocr
|
NULL
|
rnpstomViewCoocKelucioWindowFV faVsco.|s ~#12121 o rnpstomViewCoocKelucioWindowFV faVsco.|s ~#12121 on JY-20963-fx-Proinet vEonv locallE.env.migrateE.env.nikilocalE .env.otherE env.productionE env.production-euE.env.qaE env.galE env.rootE env stagingE ditattributeseitenoreE oho-cs-fixer cachephp oho-cs-ixer distchowolcnnedvilycimbato.ongUucriot Cimocwiccuccorolo.oh© ProspectCache.php xclass rrospecccache0142php.phpstorm.meta.phpchounitresult cacheE.prettierignorewindsurirlesWotriesnMNlns macomnaenieoncomnaeneidedanandoneucchachtarehodou lentFidety5infontion iean die.MINCYALIMAMAINTSONAL MERHOOK CSYIID MA|iminny_storagewliconcos maM Makefilepackage-lock jsonEchostan.neon.distE chostan-baseline.neor<> phounit.xmlawversMNOSAOM E mosoi sonar-proiect propertiesEtestiov<Unttled osaram.xmllI vetur. config.isMIWEBHOOK FILTEIING IMOLENENTATБББBEВGEEЕВВЕСGUЙ85Ü38322tih Excemsl tibrarev =9 Scratchas and Consolosyaatabase Consoleeconealo istiANGAL PIGKC IEITAGuteunpublic function findByProspectIdentifier(Socectho e Stnia- sotache fihetre spet(fenrtisureten, (Sisentflon yo » Sitentita1689Sif Cenpty(array filter(SdbGache)))Sthis->sendDatadogStats( result: self::LO0KUP_RESULT_MISS, $configuration->getProvir169116931695Sabeachercontacte StheesstnlebecordyaldidatonetenStale Scbrachell contact"roySdbCachef "lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead" I. SaceSer 169%if (SdbCache['contact') instanceof Contact) 1Saccount = Sahlachel'contact' o>ae-AccountoSaheachelt'account"e SaccountSopportunity = Sthis->findüpportunityinContactRoles(SconfiqurationSprofile,SdbCache ('contact')->getidoSopportunity = Sthis->staleRecordValidator->filterStale(Sopportunity. ScrnService178517081716[1711if (Sopportunity instanceof Opportunity) 4Sthis->Logger->info('ProspectCache - Found opportunities by contact roles'. 1712=sopporcunzty->oec.dID:SdbCache(['account') = Sopportunity->getAccounto} elseif (Saccount instanceof Account)Soppontunity = Sthis->act0poontunftyFno-Database171412151716E177contactld: Sdbfachef "contact" b>octido.1720usenidr suseriSahcachelt"onnortunity"n Saodortuntty?Sdhlachet'stane'le Sahtachel"annontunt ty" Do%oetStade Or= 1728-1730* CTkPORTANT The keus euet ainaus he sn this eyoct onde.inu co mey toule+0.4 console (EU) X0 0 €imiomwAND 1d IN (691,select * fron teans;SELECT DISTINCT u.id, u.enail, u.nane, u.softphone_number, COUNT(a.1d) as sms_countINNER JOIN activities a 1<->i.n: ON U.id = a.user_idWHERE a.type LIKE 'sms%lnerastarnt mis SAmawaEPVAXATINAYGROUP BY v.id, v.email, u.nane, u.softphone_numberMonse Ayene thint nesSELECT DISTINCT u.id, v.email, u.nane, u.team id, t.name as tean name.t.tuiliosms sid, t.twilio nessaging sidFROM users uINNER JOIN teans t 1.n<->1: ON u.team id = t.idWHERE (t.twilio sms sid IS NOT NULL OR t.twilio messaging sid IS NOT NULL)AND U.status = 1ORDER BY t.nane, u,enail:SELECT * FROM teans WHERE nane LTKE "%Tourlanes': # 187, 299. 8159.salesfonce-adninetourlane.comSELECTCONCAT(U.1d, CASE WHEN u.id = t.ouner_id THEN ' (ouner)' ELSE ** END) AS user_idsa.*,thonnen 1d FROM social accounts salJOIN users u on u.id = sa.sociable_idJOTM teane + 1.ncost: on tuid = u.team sidWHERE U.tean_id = 187 and sa.provider = 'salesforce':salect*hon nctivi aies where 1d = 377643671salect*tnon contacts wherd 1d = 63311639select x fron accounts where id = 4156632;sollect * tnon onnortuni dies where sid = 48lko1e:set 'account id' = 4156632, "contact id' = 6331639antwtloeundotorot292k-95.72 97:14017 Thand"opportunity id' = 4843610select * fron text relays where created at > '2026-05-01*:select * fron activities order by id desc:select * fron users where nane Like "%Subra%':GGIECT & SO0M ANnANtInS+10G NHEDE MIEN TAUNAN/IOROGAEOR,2A92.1/G7.0072.2000628AAG900)ETIRRD-ds tntmCecsdales OrceancworceoeionhToreach seartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...):M d This nay call Salesforce::matchByDomain()Steo 7: Domain Search Triaaers Doportunity Syncnownthirthnoenotoudt@hyatdc"wiithrantadonodrtunIl To get cocortunity details, it calls:// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopoortunttyScrProviderid// Calls importOpportunity()Step 8: The Bug - ImportOpportunitvß) Creates Temporary RecorcTaloh.a/users/was/Toinay/aoo/apn/Services/cra/Salestorce/Service.ono:143%-1448private function inportOpportunity(ScreData): ?OpportunityM 8s. Restore tron trash Cline 1430)Sthis->restoreAnyTrashedEntity(Sthis→>config=>opportunities(), ScrmData('Id']):// 80. CREATE/UPDATE - 0gSoptuniity now sri with valleoo innasochetSopportunity = sthis→config-sopportunities)JCAt thie Caaat CAMArtnTUNAC VALTO TAA 17095257Mthoor ed artnsind the th ebns 1442Sthicastemethooortntterfioldhata /Cerhath ComBlalde. ConnoctunttvesfaleI1 8A. MOM Celeta se nonín (ina 1444)Sthis=shandle0biectDeletion(Sopportunity, Scrnbata)I/ 8e. Return null (Lines 1446-1448)socoortuny-o"rashece)Ctan a.tha Cheesdad nalatadttnisoue to/detviCANAN Maur Tosm17200lITG-e...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
86570
|
2971
|
25
|
2026-05-28T15:01:20.704425+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980480704_m2.jpg...
|
PhpStorm
|
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Search
SELECT * FROM opportunities WHERE uuid_to_b Search
SELECT * FROM opportunities WHERE uuid_to_bin('04a...
SELECT * FROM team_features where team_id = 1; SEL...
Customize
Statements...
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"Search","depth":1,"on_screen":false,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"SELECT * FROM opportunities WHERE uuid_to_bin('04a...","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.11635638,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"SELECT * FROM team_features where team_id = 1; SEL...","depth":5,"bounds":{"left":0.27027926,"top":1.0,"width":0.11635638,"height":0.0},"on_screen":false,"role_description":"text"},{"role":"AXLink","text":"Customize","depth":1,"bounds":{"left":0.64162236,"top":0.95690346,"width":0.12699468,"height":0.015163607},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Statements","depth":1,"bounds":{"left":0.6449468,"top":0.8890662,"width":0.12034574,"height":0.026336791},"on_screen":true,"role_description":"text"}]...
|
1173058480188737870
|
5386339903226283232
|
typing_pause
|
accessibility
|
NULL
|
Search
SELECT * FROM opportunities WHERE uuid_to_b Search
SELECT * FROM opportunities WHERE uuid_to_bin('04a...
SELECT * FROM team_features where team_id = 1; SEL...
Customize
Statements...
|
86568
|
NULL
|
NULL
|
NULL
|
|
86569
|
2970
|
30
|
2026-05-28T15:01:19.701783+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980479701_m1.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
5
28
19
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and cr...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"36","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","depth":4,"on_screen":true,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm;\n\nuse ChaseConey\\LaravelDatadogHelper\\Datadog;\nuse Illuminate\\Contracts\\Cache\\Repository;\nuse Illuminate\\Support\\Facades\\App;\nuse Jiminny\\Contracts\\Services\\Crm\\SyncCrmEntitiesInterface;\nuse Jiminny\\Events\\Crm\\ProspectUpdated;\nuse Jiminny\\Models\\Account;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\Configuration;\nuse Jiminny\\Models\\Crm\\Profile;\nuse Jiminny\\Models\\Lead;\nuse Jiminny\\Models\\Opportunity;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\ContactRoleRepository;\nuse Jiminny\\Repositories\\Crm\\OpportunityRepository;\nuse Jiminny\\Services\\Crm\\CrmObjects\\Validators\\StaleRecordValidator;\nuse Jiminny\\Services\\Crm\\Salesforce\\OpportunityMatcher\\MatchBusinessAccount;\nuse Psr\\Log\\LoggerInterface;\n\nclass ProspectCache\n{\n public const string PROSPECT_TYPE_EMAIL = 'email';\n public const string PROSPECT_TYPE_PHONE = 'phone';\n\n public const string PROSPECT_TYPE_DOMAIN = 'domain';\n private const int TTL_SECONDS = 900;\n private const int TTL_SECONDS_DEV = 30;\n private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';\n private const string LOOKUP_RESULT_INTERNAL = 'internal';\n private const string LOOKUP_RESULT_CACHE = 'cache';\n private const string LOOKUP_RESULT_DB = 'db';\n private const string LOOKUP_RESULT_MISS = 'miss';\n\n public function __construct(\n private readonly FindsProspectInterface $dbCache,\n private readonly Repository $cache,\n private readonly OpportunityRepository $opportunityRepository,\n private readonly EmailHelper $emailHelper,\n private readonly LoggerInterface $logger,\n private readonly StaleRecordValidator $staleRecordValidator,\n ) {\n }\n\n /**\n * @return null|array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * }\n */\n public function findByProspectIdentifier(\n Configuration $configuration,\n ?Profile $profile,\n string $identifierType,\n string $identifierValue,\n ?int $userId = null,\n ?SyncCrmEntitiesInterface $crmService = null\n ): ?array {\n $cachedValue = $this->get($configuration, $identifierValue, $userId);\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());\n\n return $cachedValue;\n }\n\n if ($identifierType == self::PROSPECT_TYPE_EMAIL\n && $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)\n ) {\n // Set the cache to avoid querying the database for internal participants\n $prospectData = [null, null, null, null, null, null];\n $this->set($configuration, $identifierValue, $prospectData, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());\n\n return $prospectData;\n }\n\n $dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);\n\n if (empty(array_filter($dbCache))) {\n $this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());\n\n return null;\n }\n\n $dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);\n $dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);\n\n if ($dbCache['contact'] instanceof Contact) {\n $account = $dbCache['contact']->getAccount();\n $dbCache['account'] = $account;\n\n $opportunity = $this->findOpportunityInContactRoles(\n $configuration,\n $profile,\n $dbCache['contact']->getId()\n );\n\n $opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);\n\n if ($opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Found opportunities by contact roles', [\n 'opportunity_id' => $opportunity->getId(),\n ]);\n $dbCache['account'] = $opportunity->getAccount();\n } elseif ($account instanceof Account) {\n $opportunity = $this->getOpportunityFromDatabase(\n configuration: $configuration,\n account: $account,\n contactId: $dbCache['contact']->getId(),\n userId: $userId\n );\n }\n\n $dbCache['opportunity'] = $opportunity;\n $dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);\n\n $dbCache['stage'] = $dbCache['opportunity']?->getStage();\n }\n\n /**\n * @IMPORTANT The keys must always be in this exact order\n *\n * @var array{\n * ?Lead,\n * ?Account,\n * ?Opportunity,\n * ?Contact,\n * ?Stage,\n * string|null\n * } $result\n */\n $result = [\n $dbCache['lead'] ?? null,\n $dbCache['account'] ?? null,\n $dbCache['opportunity'] ?? null,\n $dbCache['contact'] ?? null,\n $dbCache['stage'] ?? null,\n null,\n ];\n\n $this->set($configuration, $identifierValue, $result, $userId);\n $this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());\n\n return $result;\n }\n\n public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n $cachedValue = $this->get(\n configuration: $configuration,\n identifier: $identifier,\n userId: $userId\n );\n\n if ($cachedValue !== null) {\n $this->sendDatadogStats(\n self::LOOKUP_RESULT_CACHE,\n $configuration->getProviderName()\n );\n\n return $cachedValue;\n }\n\n // Log cache miss\n $this->logger->info('[Prospect match] Cache miss', [\n 'identifier_type' => self::PROSPECT_TYPE_DOMAIN,\n 'identifier' => $identifier,\n 'crm' => $configuration->getProviderName(),\n ]);\n\n // not in the cache\n return null;\n }\n\n public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void\n {\n $this->cache->tags($this->getTags($configuration, $identifier))->put(\n $this->generateKey($configuration, $identifier, $userId),\n $prospectData,\n $this->getCacheTtl()\n );\n }\n\n public function handleProspectUpdated(ProspectUpdated $event): void\n {\n $prospect = $event->getProspect();\n $configuration = $prospect->getCrmConfiguration();\n\n if ($configuration === null) {\n return;\n }\n\n if ($prospect->getEmail() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();\n }\n\n if ($prospect->getPhone() !== null) {\n $normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());\n $this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();\n }\n\n if ($prospect->getName() !== null) {\n $this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();\n }\n }\n\n public function normalizePhoneNumber(string $phone): string\n {\n // Remove all non-digit characters first\n $digitsOnly = preg_replace('/[^\\d]/', '', $phone);\n\n // Remove a single leading zero if present\n $digitsOnly = ltrim($digitsOnly, '0');\n\n // Add E.164 prefix\n return '+' . $digitsOnly;\n }\n\n private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array\n {\n return $this->cache->tags($this->getTags($configuration, $identifier))\n ->get($this->generateKey($configuration, $identifier, $userId));\n }\n\n private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string\n {\n $keySuffix = $userId === null ? '' : ':user:' . $userId;\n\n return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);\n }\n\n private function sendDatadogStats(string $result, string $crm): void\n {\n Datadog::increment(self::DATADOG_STAT_NAME, 1, [\n 'result' => $result,\n 'crm' => $crm,\n ]);\n }\n\n private function getCacheTtl(): int\n {\n if (! App::environment('production', 'production-eu')) {\n return self::TTL_SECONDS_DEV;\n }\n\n return self::TTL_SECONDS;\n }\n\n private function findOpportunityInContactRoles(\n Configuration $configuration,\n ?Profile $profile,\n int $contactId\n ): ?Opportunity {\n $contactRoleRepository = app(ContactRoleRepository::class);\n\n $contactRoles = $contactRoleRepository->getByCrmContactId(\n $configuration,\n $contactId,\n );\n\n if (! $contactRoles->isEmpty()) {\n $opportunityId = app(MatchBusinessAccount::class)->resolve(\n $contactRoles,\n $profile?->getCrmProviderId(),\n );\n\n $opportunity = $this->opportunityRepository->find($opportunityId);\n }\n\n return $opportunity ?? null;\n }\n\n private function getOpportunityFromDatabase(\n Configuration $configuration,\n Account $account,\n int $contactId,\n ?int $userId = null\n ): ?Opportunity {\n $opportunity = null;\n\n if ($userId) {\n $this->logger->info('ProspectCache - Searching DB for opportunity by owner', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'owner_id' => $userId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(\n $configuration,\n $account,\n $userId,\n $contactId\n );\n }\n\n if (! $opportunity instanceof Opportunity) {\n $this->logger->info('ProspectCache - Fallback DB opportunity search', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n ]);\n $opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(\n $configuration,\n $account,\n $contactId\n );\n }\n\n $this->logger->info('ProspectCache - Opportunity DB search results', [\n 'account_id' => $account->getId(),\n 'contact_id' => $contactId,\n 'opportunity_id' => $opportunity?->getId(),\n ]);\n\n return $opportunity;\n }\n\n private function generateProspectTag(Configuration $configuration, string $identifier): string\n {\n return 'prospect:' . $configuration->getId() . ':' . $identifier;\n }\n\n private function getTags(Configuration $configuration, string $identifier): array\n {\n return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"31","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"5","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"28","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"19","depth":4,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;","depth":4,"on_screen":true,"value":"SELECT * FROM team_features where team_id = 1;\n\nSELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922\nSELECT * FROM users WHERE team_id = 340; # 12015\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 340\nand sa.provider = 'salesforce';\n# and sa.provider = 'salesloft';\n\nselect * from crm_fields where crm_configuration_id = 270 and object_type = 'event';\n# 125558 - Event Type - Event_Type__c\n# 125552 - Event Status - Event_Status__c\n\nSELECT * FROM sidekick_settings WHERE team_id = 340;\n\nSELECT * FROM crm_field_values WHERE crm_field_id in (125552);\n\nselect * from activities where crm_configuration_id = 270\nand type = 'conference' and crm_provider_id IS NOT NULL\nand actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;\n\nSELECT * FROM activities WHERE id = 20871677;\nSELECT * FROM crm_field_data WHERE activity_id = 20871677;\n\nselect * from crm_layouts where crm_configuration_id = 270;\nselect * from crm_layout_entities where crm_layout_id in (886,887);\n\nSELECT * FROM crm_configurations WHERE id = 270;\n\nselect * from playbooks where team_id = 340; # 1514\nselect * from groups where team_id = 340;\nSELECT * FROM crm_fields WHERE id IN (125393, 125401);\n\nselect g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g\njoin playbooks p on g.playbook_id = p.id\njoin crm_fields f on p.activity_field_id = f.id\nwhere g.team_id = 340;\n\nSELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716\nselect * from crm_field_data where object_id = 20448716;\n\nselect * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008\nselect * from opportunities where team_id = 343;\nselect * from opportunities where team_id = 343 and crm_provider_id = '18099102526';\nselect * from opportunities where team_id = 343 and account_id = 945217482;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from accounts where team_id = 343 order by name asc;\n\nselect * from stages where crm_configuration_id = 273 and type = 'opportunity';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143\nSELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;\nSELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';\nSELECT * FROM activities WHERE id = 20717903;\n\nselect * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 353\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, l.atkinson@mwbsolutions.co.uk\nSELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;\n# id: 20940638, user: 12022, contact: 5305871\nSELECT * FROM activity_summary_logs WHERE activity_id = 20940638;\nselect * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 345\nand sa.provider = 'hubspot';\n\nselect * from users where team_id = 345 and id = 12022;\nSELECT * FROM crm_profiles WHERE user_id = 12022;\nSELECT * FROM participants WHERE activity_id = 20940638;\nSELECT * FROM users u\nJOIN crm_profiles cp ON u.id = cp.user_id\nWHERE u.team_id = 345;\n\nselect * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871\n\nselect * from team_features where team_id = 345;\nSELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197\nSELECT * FROM participants WHERE activity_id = 20897406;\n\n\n\nSELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912\nSELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';\n\n\nSELECT * FROM activities WHERE id = 20946641;\nSELECT * FROM crm_profiles WHERE user_id = 10211;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, triger@lunio.ai\nSELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';\nselect * from stages where crm_configuration_id = 97 and type = 'opportunity';\nselect * from opportunities where team_id = 120;\n\n\nselect * from crm_configurations crm join teams t on crm.id = t.crm_id\nwhere 1=1\nAND t.current_billing_plan IS NOT NULL\nAND crm.auto_sync_activity = 0\nand crm.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,james.lewendon@exclaimer.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 270\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956\nSELECT * FROM crm_profiles WHERE user_id = 11446;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, alex.chikly@cygnetise.com\nselect * from playbooks where team_id = 372;\nselect * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340\nSELECT * FROM crm_field_values WHERE crm_field_id = 141340;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 372\nand sa.provider = 'salesforce';\n\nselect * from crm_profiles where crm_configuration_id = 300;\nSELECT * FROM crm_configurations WHERE team_id = 372;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,mfa@planday.com\nSELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756\nselect * from crm_field_data where object_id = 3207756;\nSELECT * FROM crm_fields WHERE id = 111834;\n\nselect f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value\nFROM crm_fields f\nJOIN crm_field_data fd ON f.id = fd.crm_field_id\nWHERE f.crm_configuration_id = 242\nAND f.object_type = 'opportunity'\nAND fd.object_id IN (3207756)\nORDER BY fd.object_id, fd.updated_at;\n\nSELECT * FROM crm_configurations WHERE auto_connect = 1;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,salesforce-admin@tourlane.com\nselect * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id\nwhere g.team_id = 187;\n\nselect * from `groups` where team_id = 187;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 187\nand sa.provider = 'salesforce';\n\n# Destination - 98870 - Destination__c\n# Stage - 79014 - StageName\n# Land Arrangement - 98856 - Land_Arrangement__c\n# Flight - 98848 - Flight__c\n# Last activity date - 98812 - LastActivityDate\n# Last modified date - 98809 - LastModifiedDate\n# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c\n# next call - 98864 - Next_Call__c\n\nselect * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\nselect * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';\nselect * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;\nselect * from activities where opportunity_id = 3538248;\n\nSELECT * FROM crm_profiles WHERE user_id = 8150;\n\nselect * from deal_risks where opportunity_id = 3538248;\n\nselect * from teams where crm_id IS NULL;\n\nSELECT opp.id AS opportunity_id,\n u.group_id AS group_id,\n MAX(\n CASE\n WHEN a.type IN (\"sms-inbound\", \"sms-outbound\") THEN a.created_at\n ELSE a.actual_end_time\n END) as last_date\nFROM opportunities opp\nleft join activities a on a.opportunity_id = opp.id\ninner join users u on opp.user_id = u.id\nwhere opp.user_id IN (9951)\n\nAND opp.is_closed = 0\nand a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL\ngroup by opp.id;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,polly.morphew@cybsafe.com\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 301;\nSELECT * FROM contacts WHERE id = 6612363;\nSELECT * FROM accounts WHERE id = 4235676;\nSELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;\nselect * from opportunity_stages where opportunity_id = 4503759;\n# SELECT * FROM opportunities WHERE id = 4569937;\n\nselect * from activities where crm_configuration_id = 301;\nSELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370\nSELECT * FROM participants WHERE activity_id = 26330370;\n\nSELECT * FROM teams WHERE id = 375;\nselect * from playbooks where team_id = 375;\n\nselect * from stages where crm_configuration_id = 301 and type = 'opportunity';\n\nselect * from teams;\nselect * from contact_roles;\n\nSELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';\n\nselect * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;\n\nSELECT * FROM crm_field_data WHERE object_id = 3771706;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'\nand crm_provider_id LIKE \"%traffic_light%\";\nSELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);\n\nSELECT fd.* FROM opportunities o\nJOIN crm_field_data fd ON o.id = fd.object_id\nWHERE o.team_id = 343\n# and o.user_id IS NOT NULL\nand fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)\nand fd.value != ''\norder by value desc\n# group by o.id\n;\n\nSELECT * FROM opportunities WHERE id = 3769843;\n\nSELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, salesforce-admin@tourlane.com\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 209;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,aswini.mishra@fundingcircle.com\nSELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839\n\n\nSELECT * FROM opportunities WHERE id = 3855992;\n\nSELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988\n\nSELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';\n\nselect * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507\nSELECT * FROM crm_field_data WHERE object_id = 5874411;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379\nand sa.provider = 'hubspot';\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, nikhil.kumar@mention-me.com\nSELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793\nselect * from generic_ai_prompts where subject_id = 3537793;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, triger@lunio.ai\nSELECT * FROM crm_configurations WHERE id = 97;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 97;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;\nSELECT * FROM crm_fields WHERE id = 32682;\n\nselect cfd.value, o.* from opportunities o\njoin crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682\nwhere team_id = 120\nand cfd.value != ''\n;\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 120\nand sa.provider = 'salesforce';\n\nselect * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';\nSELECT * FROM crm_field_data WHERE object_id = 2313439;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 410;\nSELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';\nselect * from scorecards where team_id = 410;\nselect * from scorecard_rules;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, aswini.mishra@fundingcircle.com\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\njoin users u on o.user_id = u.id\nwhere a.crm_configuration_id = 177 and a.type LIKE '%email-out%'\n# and a.actual_end_time > '2024-12-16 00:00:00'\n# and o.remotely_created_at > '2024-12-01 00:00:00'\n# and u.group_id = 1014\nand u.id = 9021\norder by a.id desc;\nSELECT * FROM opportunities WHERE id in (3981384,4017346);\nSELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);\n\nselect * from users where id = 9021;\nselect * from inboxes where user_id = 9021;\n\nselect * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';\n\nselect * from email_messages where team_id = 220\nand orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'\nand subject LIKE '%Personal%'\n# and 'from' = 'credit@fundingcircle.com'\n;\n\nselect * from activities a\njoin opportunities o on a.opportunity_id = o.id\nwhere a.user_id = 9021 and a.type LIKE '%email-out%'\nand a.actual_end_time > '2024-12-18 00:00:00'\nand o.user_id IS NOT NULL\nand o.remotely_created_at > '2024-12-01 00:00:00'\norder by a.id desc;\n\nSELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;\nselect * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;\n\nselect * from team_settings where name IN ('useCloseDate');\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, jfarrell@hurree.co\nSELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 104\nand sa.provider = 'hubspot';\n\nselect * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'\nselect * from teams where crm_id IS NULL;\n\nselect t.name as 'team', u.name as 'owner', u.email, u.phone\nfrom teams t\njoin activity_providers ap on t.id = ap.team_id\njoin users u on t.owner_id = u.id\nwhere 1=1\n and t.status = 'active'\n and ap.is_enabled = 1\n# and u.status = 1\n and ap.provider = 'ms-teams';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nSELECT * FROM teams WHERE id = 442; # 14293\nselect * from users where team_id = 442;\nselect * from social_accounts sa where sa.sociable_id = 14293;\nselect * from invitations where team_id = 442;\n\n# ********************************************************************************************************\nSELECT * FROM users WHERE email LIKE '%nea.liikamaa@eletive.com%'; # 14022\nSELECT * FROM teams WHERE id = 429;\nselect * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);\nselect * from activities where opportunity_id in (4340436,4353519);\n\nselect * from transcription where activity_id IN (25630961,25381771);\nselect * from generic_ai_prompts where subject_id IN (4353519);\n\nSELECT\n a.id as activity_id,\n a.opportunity_id,\n a.type as activity_type,\n a.language,\n CONCAT(a.title, a.description) AS mail_content,\n e.from AS mail_from,\n e.to AS mail_to,\n e.subject AS mail_subject,\n e.body AS mail_body,\n p.type as prompt_type,\n p.status as prompt_status,\n p.content AS prompt_content,\n a.actual_start_time as created_at\nFROM activities a\n LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL\n LEFT JOIN email_messages e ON a.id = e.activity_id\nWHERE a.actual_start_time > '2024-01-01 00:00:00'\n AND a.opportunity_id IN (4353519)\n AND a.status IN ('completed', 'received', 'delivered')\n AND a.deleted_at IS NULL\n AND a.type NOT IN ('sms-inbound', 'sms-outbound')\nORDER BY a.opportunity_id ASC, a.id ASC;\n\nSELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293\nSELECT * FROM teams WHERE id = 442;\nSELECT * FROM crm_configurations WHERE id = 344;\nselect * from team_features where team_id = 442;\nselect * from groups where team_id = 442;\nselect * from playbooks where team_id = 442;\nselect * from playbook_categories where playbook_id = 1729;\nselect * from crm_fields where crm_configuration_id = 344 and id = 172024;\nSELECT * FROM crm_field_values WHERE crm_field_id = 172024;\nselect * from crm_layouts where crm_configuration_id = 344;\nselect * from playbook_layouts where playbook_id = 1729;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444\n\nselect s.*\n# , s.sent_at, u.name, a.*\nfrom activity_summary_logs s\ninner join activities a on a.id = s.activity_id\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 356\nand s.sent_at > date_sub(now(), interval 60 day)\norder by a.actual_end_time desc;\n\nselect * from activities a\n# inner join activity_summary_logs s on s.activity_id = a.id\nwhere a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)\n# and a.crm_provider_id is not null\n# and provider <> 'ringcentral'\nand status = 'completed'\norder by a.actual_end_time desc;\n\nselect * from teams order by id desc; # 17328, 32, 17830, integration-account@jiminny.com\nSELECT * FROM users;\nSELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active\nSELECT * FROM teams WHERE id = 260;\nselect * from team_settings where team_id = 260;\nselect * from crm_configurations where team_id = 260;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 356;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;\n\nselect * from accounts where crm_configuration_id = 221 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 221 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 221 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 221 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 221;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 221 order by id desc;\nselect * from stages where crm_configuration_id = 221 order by id desc;\n\nselect * from accounts where crm_configuration_id = 356 order by id desc; # 7000\nselect * from leads where crm_configuration_id = 356 order by id desc; # 0\nselect * from contacts where crm_configuration_id = 356 order by id desc; # 200 000\nselect * from opportunities where crm_configuration_id = 356 order by id desc; # 0\nselect * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23\nselect * from crm_fields where crm_configuration_id = 356;\nselect * from crm_field_values where crm_field_id = 5302 order by id desc;\nselect * from crm_layouts where crm_configuration_id = 356 order by id desc;\nselect * from stages where crm_configuration_id = 356 order by id desc;\n\nselect * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)\nselect * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)\nselect * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4\nselect ce.* from calendars c\njoin users u on c.user_id = u.id\njoin calendar_events ce on c.id = ce.calendar_id\nwhere u.team_id = 260\nand (ce.start_time > '2025-02-21 00:00:00')\n;\n# calendar events 1207\n#\n\nselect * from opportunities where team_id = 260;\nSELECT * FROM crm_field_data WHERE object_id = 4696496;\n\nselect * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;\nselect * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')\n# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0\nand created_at > '2024-03-01 00:00:00'\norder by id desc; # 880 000, ringcentral, avaya\nSELECT * FROM participants WHERE activity_id = 26371744;\n\n# all activities 942 000 +\n# conference 7385 - scheduled 984 - external 343\n\nselect * from activities where id = 26321812;\nselect * from participants where activity_id = 26321812;\nselect * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);\nselect * from leads where id in (720428,689175,731546,645866,621037);\n\nselect * from users where id = 13841;\nselect * from opportunities where user_id = 9541;\nselect * from stages where id = 15900;\n\nselect * from accounts where\n# id IN (4160055,5053725,4965303,4896434)\nid in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)\n;\n\nselect * from activities where id = 26654935;\nSELECT * FROM opportunities WHERE id = 4803458;\n\nSELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;\nSELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time\nFROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);\n\nSELECT DISTINCT\n o.id, o.stage_id, s.name, a.title,\n a.*\nFROM activities a\n# INNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nINNER JOIN groups g ON u.group_id = g.id\nINNER JOIN opportunities o ON a.opportunity_id = o.id\nINNER JOIN stages s ON o.stage_id = s.id\nWHERE\n a.crm_configuration_id = 356\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 13841\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')\n AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')\n\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')\n )\n )\n AND (\n# s.id = 15900\n s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')\n OR s.uuid IS NULL -- Include records without opportunity stage\n )\n\nORDER BY a.actual_end_time DESC;\n# ********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, willsc@leadforensics.com\nSELECT * FROM users WHERE team_id = 190;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 190\nand sa.provider = 'hubspot';\n\nselect * from role_user where user_id = 8474;\n\nselect * from crm_configurations where provider = 'bullhorn';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;\nSELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;\n\nSELECT * FROM opportunities WHERE id = 4732493;\nselect * from activities where opportunity_id = 4732493;\n\n# ********************************************************************************************************\nSELECT * FROM teams WHERE id = 443; # 358, 14315, andrea.romano@correrenaturale.com\nSELECT * FROM opportunities WHERE team_id = 443;\n\nSELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id\nFROM activities AS a\nJOIN stages AS s ON a.stage_id = s.id\nJOIN users AS u ON u.id = a.user_id\nJOIN teams AS t ON t.id = s.team_id\nWHERE u.team_id <> s.team_id and t.id > 135;\n\n\nSELECT\n crm_configuration_id,\n crm_provider_id,\n COUNT(*) as duplicate_count,\n GROUP_CONCAT(id) as stage_ids,\n GROUP_CONCAT(name) as stage_names\nFROM stages\nGROUP BY crm_configuration_id, crm_provider_id\nHAVING COUNT(*) > 1\nORDER BY duplicate_count DESC;\n\nselect * from stages where id IN (14898,14907);\n\nselect * from business_processes;\n\nSELECT *\nFROM crm_configurations\nWHERE team_id IN (\n SELECT team_id\n FROM crm_configurations\n GROUP BY team_id\n HAVING COUNT(*) > 1\n)\nORDER BY team_id;\n\nSELECT *\nFROM teams\nWHERE crm_id IN (\n SELECT crm_id\n FROM teams\n GROUP BY crm_id\n HAVING COUNT(*) > 1\n)\nORDER BY crm_id;\n\n# ***************************************************************************\nselect * from crm_configurations where provider = 'integration-app';\nSELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 andrea.romano@correrenaturale.com\nselect * from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;\nselect * from team_features where team_id = 358;\nselect * from activity_summary_logs;\n\nselect * from teams where id = 406;\n\n# ************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, srv.salesforce@sportfive.com\nselect * from activities where crm_configuration_id = 202 order by actual_end_time desc;\n\nSELECT * FROM users where id = 14637;\nSELECT * FROM teams where id = 267;\nSELECT * FROM groups where id = 1118;\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM activities\nWHERE crm_configuration_id = 202\n AND status IN ('completed', 'failed')\n AND recording_state != 'stopped'\n AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n AND (is_private = 0 OR user_id = 14637)\n AND (\n (\n actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n ) OR (\n actual_start_time IS NULL\n AND type IN ('sms-outbound', 'sms-inbound')\n AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND NOT EXISTS (\n SELECT 1\n FROM tracks\n WHERE\n tracks.activity_id = activities.id\n AND tracks.type IN ('audio', 'video')\n )\nORDER BY actual_end_time DESC;\n\nSELECT DISTINCT\n a.*\nFROM activities a\nINNER JOIN tracks t ON a.id = t.activity_id\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams team ON u.team_id = team.id\nWHERE\n a.crm_configuration_id = 202\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n# and a.user_id = 14637\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND t.type IN ('audio', 'video')\n AND (\n (a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')\n OR\n (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'\n )\n )\n AND (\n a.is_private = 0\n OR (\n a.is_private = 1\n AND a.user_id = 14637\n )\n )\n\nORDER BY a.actual_end_time DESC\n;\n\nSELECT DISTINCT a.*\nFROM activities a\nINNER JOIN users u ON a.user_id = u.id\nINNER JOIN teams t ON u.team_id = t.id\n# INNER JOIN tracks tr ON a.id = tr.activity_id\n# INNER JOIN groups g ON u.group_id = g.id\nWHERE 1=1\n AND t.id = 267\n# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')\n AND a.status IN ('completed', 'failed')\n AND a.recording_state != 'stopped'\n AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n# AND tr.type NOT IN ('audio', 'video')\n AND (\n a.is_private = 0\n OR a.user_id = 14637\n )\n AND (\n (a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')\n OR (\n a.actual_start_time IS NULL\n AND a.type IN ('sms-outbound', 'sms-inbound')\n AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'\n )\n )\n# and NOT EXISTS (\n# SELECT 1\n# FROM tracks t\n# WHERE t.activity_id = a.id\n# AND t.type IN ('audio', 'video')\n# )\n\nORDER BY a.actual_end_time DESC;\n\nSELECT * FROM tracks WHERE activity_id = 26485995;\n\nselect a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\nwhere a.crm_configuration_id = 202\n# and a.is_internal = 0\nand (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type IN (\"softphone\",\"softphone-inbound\",\"conference\",\"sms-inbound\")\nand a.status IN ('completed', 'failed')\n# and a.external_id is not null\norder by a.actual_end_time desc;\n\nselect * from activities a where a.crm_configuration_id = 202\nand a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'\n# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')\n\nselect g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a\ninner join users u on u.id = a.user_id\ninner join groups g on g.id = u.group_id\nwhere a.crm_configuration_id = 202\nand a.is_internal = 0\nand (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')\nand a.type = 'conference'\nand a.status != 'completed'\nand a.external_id is not null\norder by a.scheduled_start_time desc;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';\nSELECT * FROM crm_field_data WHERE crm_field_id = 98809;\n\nselect * from users where status = 1 AND timezone = 'MDT';\n\nselect * from opportunities where id = 3769814;\nselect * from deal_risks where opportunity_id = 3769814;\n\nselect cp.* from crm_profiles cp\njoin users u on cp.user_id = u.id\njoin crm_configurations crm on cp.crm_configuration_id = crm.id\nwhere crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';\n\nselect * from crm_fields where id = 154575;\n\nselect * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';\nSELECT * FROM teams WHERE id = 176; # crm 148\nselect * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nselect * from crm_fields cf\njoin crm_configurations crm on crm.id = cf.crm_configuration_id\nwhere crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');\n\n# *********************************************************************************************\nSELECT * FROM users WHERE id IN (15415, 15418);\nSELECT * FROM groups WHERE id IN (1805,1806);\nSELECT * FROM playbooks WHERE id = 1860;\nSELECT * FROM playbook_categories WHERE id = 38634;\nSELECT * FROM crm_fields WHERE id = 189962;\n\nSELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 raza.gilani@vuelio.com\n\nSELECT * FROM crm_profiles WHERE user_id = 15415;\nSELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';\n\nselect * from sidekick_settings where team_id = 472;\n\nSELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418\nSELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415\nSELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415\n\n# *********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, salesforce-integrations@teamtailor.com\nselect * from crm_configurations where id = 218;\nSELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765\nSELECT * FROM users WHERE id IN (13232, 13230);\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n0057R00000EPL5HQAX Inez Ekblad\n\n1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur\n\nSELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);\n\n############################################################################################\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id IN (94491,94493,94498);\nSELECT * FROM users WHERE id = 13658;\nSELECT * FROM teams WHERE id = 109;\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, katy.holden@strengthscope.comk\nSELECT * FROM stages WHERE crm_configuration_id = 390;\nselect * from business_processes where team_id = 481 and crm_configuration_id = 390;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 481\nand sa.provider = 'salesforce';\n\n\nSELECT * FROM users WHERE id = 15780; # team 462\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 462\nand sa.provider = 'hubspot';\n\n\nselect * from teams where id = 495;\nSELECT * FROM users WHERE id = 15794;\nselect * from social_accounts where sociable_id = 15794;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752\nSELECT * FROM accounts WHERE team_id = 427 and crm_provider_id = '668731000183444517';\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Group GTI%'; # 495, 407, 15794\nSELECT * FROM activities WHERE crm_configuration_id = 407\nand status = 'completed' and type = 'conference'\norder by id desc;\n\nselect ru.*, pr.*, p.* from users u join role_user ru on ru.user_id = u.id\njoin permission_role pr on pr.role_id = ru.role_id\n join permissions p on p.id = pr.permission_id\nwhere team_id = 495 and p.name IN ('dial');\n\nselect * from permission_role;\n\nselect * from activities where crm_configuration_id = 407 and status = 'completed' order by id desc;\nSELECT * FROM activities WHERE id = 29512773;\nSELECT * FROM activities WHERE id IN (29042721,28991325,29002874);\n\nSELECT al.* from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 407\n# and a.id IN (29042721,28991325,29002874);\n\nSELECT * FROM users WHERE id = 15794;\nSELECT * FROM users WHERE team_id = 495;\nSELECT * FROM social_accounts WHERE sociable_id = 15794;\nSELECT * FROM opportunities WHERE team_id = 495 and name like '%OC:%';\nSELECT * FROM contacts WHERE team_id = 495;\nSELECT * FROM leads WHERE team_id = 495;\nSELECT * FROM accounts WHERE team_id = 495;\nSELECT * FROM crm_profiles WHERE crm_configuration_id = 407;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 407;\nSELECT * FROM crm_configurations WHERE id = 407;\nSELECT * FROM opportunities WHERE team_id = 495 and close_date BETWEEN '2025-06-01' AND '2025-07-01'\nand user_id IS NOT NULL and is_closed = 1 and is_won = 1;\n\n# ********************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Hamilton Court FX LLP%'; # 249, 187, 10103\nSELECT * FROM activities WHERE uuid_to_bin('4659c2bb-9a49-484e-9327-a3d66f1e028c') = uuid; # 28951064\nSELECT * FROM crm_fields WHERE crm_configuration_id = 187 and object_type IN ('tasks', 'event');\n\n# *********************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Checkstep%'; # 325, 256, 11753\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 325\nand sa.provider = 'hubspot';\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid; # 28611085\nSELECT * FROM activities WHERE uuid_to_bin('980f0336-840b-4185-a5a9-30cf8b0749a8') = uuid; # 28719733\nSELECT * FROM activity_summary_logs where activity_id = 28719733;\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 356, 9444\nSELECT * FROM activity_summary_logs where sent_at BETWEEN '2025-06-09 11:38:00' AND '2025-06-09 11:40:00';\nSELECT * FROM leads WHERE crm_configuration_id = 356 and crm_provider_id = '230045001502770504'; # 823630\nselect * from activities where crm_configuration_id = 356 and lead_id = 841732;\n\nSELECT * from activity_summary_logs al join activities a on a.id = al.activity_id\nwhere a.crm_configuration_id = 356;\n\nselect * from activities where crm_configuration_id = 356\nand actual_end_time between '2025-06-09 11:00:00' and '2025-06-09 12:00:00'\norder by id desc;\n\nselect * from accounts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from leads where crm_configuration_id = 356 and crm_provider_id = '230045001514275654' order by id desc;\nselect * from contacts where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\nselect * from opportunities where crm_configuration_id = 356 and crm_provider_id = '230045001514403366' order by id desc;\n\nselect * from team_features where team_id = 260;\nselect * from features where id IN (1,2,4,6,18,19,20,9,10,3,23,24,25,26,27);\n\nSELECT * FROM activities WHERE uuid_to_bin('7be372e2-1916-4d79-a2f3-ca3db1346db3') = uuid;\n\nselect * from crm_fields;\nselect * from crm_layout_entities;\n\nSELECT * FROM teams WHERE name LIKE '%Optable%';\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Teamtailor%'; # 109, 218, 13969\nSELECT * FROM crm_configurations WHERE id = 218;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 109\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939\nSELECT * FROM crm_field_data WHERE activity_id = 28655939;\nSELECT * FROM crm_fields WHERE id in (94491,94493,94498);\n\nselect * from teams where crm_id IS NULL;\n\nSELECT * FROM activities WHERE uuid_to_bin('71aa8a0c-9652-4ff6-bee7-d98ae60abef6') = uuid;\n\n# *************************************************************************************************\nselect * from team_domains where team_id = 399;\nSELECT * FROM teams WHERE name LIKE '%Rydoo%'; # 399, 318, 13207\n\nselect * from calendar_events where id = 5163781;\nSELECT * FROM activities WHERE uuid_to_bin('be2cbc52-7fda-46a0-9ae0-25d9553eafc0') = uuid; # 29443896\nSELECT * FROM participants WHERE activity_id = 29443896;\nselect * from contacts where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\nselect * from leads where crm_configuration_id = 318 and email = 'marianne.westeng@strawberry.no';\n\nselect * from activities where user_id = 14937 order by created_at ;\n\nselect * from users where id = 14937;\n\nselect * from contacts where crm_configuration_id = 318 and email LIKE '%@strawberry.se';\nselect * from opportunities where crm_configuration_id = 318 and crm_provider_id = '006Sf00000D1WOAIA3';\n\nselect * from activities a join participants p on a.id = p.activity_id\nwhere crm_configuration_id = 318 and a.updated_at > '2025-06-23T08:18:43Z';\n\n# *************************************************************************************************\nSELECT * FROM opportunities WHERE team_id = 379 and crm_provider_id = '39334518886';\nSELECT * FROM opportunities WHERE team_id = 379 order by id desc;\nSELECT * FROM teams WHERE id = 379;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 379 and sociable_id = 13852\nand sa.provider = 'hubspot';\n\nSELECT * FROM crm_configurations WHERE id = 307;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 307;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1027;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 307\n and id IN (144750,144855,145158,155227);\n\nSELECT * FROM activities;\n\n\nselect * from activities\nwhere created_at > '2025-07-01 00:00:00'\n# and created_at < '2025-08-01 00:00:00'\nand type not in ('email-outbound', 'email-inbound')\nand account_id is null\nand contact_id is null\nand lead_id is null\nand opportunity_id is not null\n;\nSELECT * FROM activities WHERE id IN (25344155, 25344296, 25501909, 28692187);\nSELECT * FROM crm_configurations WHERE id in (335,301,200);\n\nselect * from crm_fields where crm_configuration_id = 230 and crm_provider_id = 'Age2__c';\n\nSELECT * FROM teams WHERE name LIKE '%Resights%';\nselect * from crm_fields where crm_configuration_id = 1 and object_type = 'opportunity';\n\nselect * from crm_configurations where provider = 'bullhorn'; # 344\nselect * from teams where id IN (442);\n\nselect * from activities\nwhere crm_configuration_id = 177\nand provider = 'amazon-connect'\n order by id desc;\n# and source <> 'gong';\n\nselect * from activity_providers where provider = 'amazon-connect';\n\nSELECT * FROM activities WHERE uuid_to_bin('cec1993b-a7e5-4164-b74d-d680ea51d2f2') = uuid;\n\n\nselect * from crm_configurations where store_transcript = 1;\nSELECT * FROM teams WHERE id IN (80);\n\n# *************************************************************************************************\nSELECT * FROM teams WHERE name LIKE '%Sedna%'; # 277, 213, 12594\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 277\nand sa.provider = 'salesforce';\n\nselect * from activities where crm_configuration_id = 213 and account_id = 2511502;\n\nselect * from crm_configurations where id = 213;\n\nSELECT * FROM activities WHERE uuid_to_bin('35aa790a-8569-4544-8268-66f9a4a26804') = uuid; # 33981604\nSELECT * FROM participants WHERE activity_id = 33981604;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 337 and object_type = 'task';\n\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 431\nand sa.provider = 'salesforce';\nSELECT * FROM activities WHERE uuid_to_bin('b5476c7d-19a8-491b-869d-676ea1e857b6') = uuid; # 33997223\nselect * from activity_summary_logs where activity_id = 33997223;\nselect * from activity_notes where activity_id = 33997223;\n\n# ***********************************\nSELECT * FROM teams WHERE name LIKE '%Abode%';\n\n\nselect * from features;\nselect * from teams t\nwhere t.status = 'active'\nand id NOT IN (select team_id from team_features where feature_id = 9)\n;\n\n\nselect * from playbook_layouts where playbook_id = 1725;\nSELECT * FROM activities WHERE uuid_to_bin('65cc283c-4849-49e6-927f-4c281c8fea19') = uuid; # 34297473\nselect * from teams where id = 318;\nselect * from crm_configurations where team_id = 318;\nselect * from playbooks where team_id = 318;\nSELECT * FROM crm_layouts where crm_configuration_id = 381;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1259;\nSELECT * FROM crm_fields WHERE id IN (192938,192936,192939);\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1266;\nSELECT * FROM crm_fields WHERE id IN (192980,192991,192997,192998,193064,193067);\n\nSELECT * FROM activities WHERE uuid_to_bin('a902289b-285c-48eb-9cc2-6ad6c5d938f5') = uuid; # 34297533\n\n\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nSELECT * FROM crm_fields WHERE id IN (131668,131669,131670,131671,131676,131797);\n\nSELECT * FROM teams WHERE name LIKE '%Peripass%'; # 351, 281, 12124\nselect * from crm_layouts where crm_configuration_id = 281;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 927;\nselect * from crm_fields where crm_configuration_id = 281 and id in (131668,131669,131670,131671,131676,131797);\nselect * from opportunities where crm_configuration_id = 281;\n\nSELECT * FROM activities WHERE id IN (34211315, 34130075);\nSELECT * FROM crm_field_data WHERE object_id IN (34211315, 34130075);\n\nselect cf.crm_configuration_id, cle.crm_layout_id, cle.id, cf.id from crm_field_data cfd\njoin crm_layout_entities cle on cle.id = cfd.crm_layout_entity_id\njoin crm_fields cf on cle.crm_field_id = cf.id\nwhere cf.deleted_at IS NOT NULL\nGROUP BY cle.id, cf.id;\n\nselect * from crm_layouts where id IN (355);\nselect u.email, t.crm_id, t.* from teams t\njoin users u on u.id = t.owner_id\nwhere crm_id IN (97);\n\nSELECT * FROM crm_fields WHERE id = 96492;\n\nselect * from permissions;\nselect * from permission_role where permission_id = 247;\nselect * from roles;\n\nselect * from migrations;\n# *****************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('291e3c21-11cc-4728-aee7-6e4bedf86d72') = uuid; # 34262174\nSELECT * FROM crm_configurations WHERE id = 301;\nSELECT * FROM teams WHERE id = 343;\nselect * from social_accounts sa\njoin users u on sa.sociable_id = u.id\nwhere u.team_id = 343\nand sa.provider = 'hubspot';\n\nselect * from participants where activity_id = 34262174;\n\nselect * from contacts where crm_configuration_id = 301 and id = 6976326;\nselect * from accounts where crm_configuration_id = 301 and id IN (4647626, 4815829); # 30761335403\n\nselect * from activity_summary_logs where activity_id = 34262174;\n\nselect * from users where status = 1 AND timezone = 'EST';\n\n# ****************************************************************************\nSELECT * FROM users WHERE id = 13869;\nSELECT * FROM crm_configurations WHERE id = 320;\nSELECT * FROM teams WHERE id = 401;\n\nSELECT * FROM activities WHERE uuid_to_bin('2228c16f-10be-48d5-90d4-67385219dc01') = uuid; # 29670601\n\nSELECT * FROM accounts WHERE id = 7761483;\nSELECT * FROM opportunities WHERE id = 6051814;\n\nSELECT * FROM teams WHERE name LIKE '%Seedlegals%';\n\n;select * from opportunities where updated_at > '2025-10-11' AND crm_provider_id = '34713761166';\n\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 177;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 577;\nSELECT * FROM crm_fields WHERE id IN (68458,68459,68480,68497,68524,68530,68554,68618,68662,68781,68810,68898,68981,69049,97467);\n\nSELECT t.id, crm.id, t.name, crm.sync_objects, crm.provider, crm.last_synced_at FROM crm_configurations crm join teams t on t.crm_id = crm.id\nwhere t.status = 'active' AND crm.provider = 'hubspot' AND crm.last_synced_at < '2025-10-22 00:00:00';\n\nSELECT * FROM activities WHERE uuid_to_bin('fa09449f-cba9-496a-b8f3-865cd3c72351') = uuid;\nSELECT * FROM crm_configurations where id = 184;\nSELECT * FROM teams WHERE id = 246;\nSELECT * FROM social_accounts WHERE sociable_id = 9259 and provider = 'hubspot';\n\nSELECT * FROM users WHERE email LIKE '%rhian.old@bud.co.uk%'; # 17700\nSELECT * FROM teams WHERE id = 551;\n\nSELECT * FROM crm_configurations WHERE id = 471;\nSELECT * FROM activities WHERE crm_configuration_id = 471 and crm_provider_id IS NOT NULL;\nSELECT * FROM crm_fields WHERE crm_configuration_id = 471;\nSELECT * FROM crm_fields WHERE id = 307260;\nSELECT * FROM crm_field_values WHERE crm_field_id = 307260;\n\nselect * from crm_layouts where crm_configuration_id = 471;\n\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1547;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1548;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 551 and sa.provider = 'hubspot';\n\nSELECT * FROM teams WHERE name LIKE '%$PCS%';\n\n# ********************************************************************************************************\nselect * from crm_configurations crm\njoin teams t on t.crm_id = crm.id\nwhere t.status = 'active'\nand crm.provider = 'hubspot';\n\n# $slug = 'HUBSPOT_WEBHOOK_SYNC';\n# $team = Jiminny\\Models\\Team::find(2);\n# $feature = Feature::query()->where('slug', $slug)->first();\n# TeamFeature::query()->create(['feature_id' => $feature->getId(),'team_id' => $team->getId()]);\n\n# hubspot_webhook_metrics\n\nselect * from crm_configurations where id = 331; # 416\nSELECT * FROM teams WHERE id = 416;\nSELECT * FROM opportunities WHERE team_id = 190;\n\nSELECT * FROM teams WHERE name LIKE '%Lead Forensics%';\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 190 and sa.provider = 'hubspot';\n\n\n\nSELECT * FROM teams WHERE name LIKE '%Rapaport%'; # 431, 337\nSELECT * FROM teams where id = 431;\nSELECT * FROM crm_configurations where team_id = 431;\nSELECT * FROM activity_providers where team_id = 431;\nSELECT * FROM activities where crm_configuration_id = 337 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 431 and sa.provider = 'salesforce';\n\nSELECT * FROM teams WHERE name LIKE '%BiP%'; # 401, 320\nSELECT * FROM teams where id = 401;\nSELECT * FROM crm_configurations where team_id = 401;\nSELECT * FROM activity_providers where team_id = 401;\nSELECT * FROM activities where crm_configuration_id = 320 and type IN ('softphone', 'softphone-outbound')\nand provider NOT IN ('hubspot', 'aircall')\n# and telephony_provider_id = '019c1131-a22f-4792-b9ea-20adf6a02ed0'\norder by id desc;\nSELECT sa.id,\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 401 and sa.provider = 'salesforce';\n\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 307; # 379 - Story Terrace Inc , portalId: 3921157\nSELECT * FROM contacts WHERE team_id = 379 and updated_at > '2026-01-31 11:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-01 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 379 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 379 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 485; # 563 - LATUS Group (ad94d501-5d09-44fd-878f-ca3a9f8865c3) , portalId: 3904501\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 563 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 338; # 432 - Formalize , portalId: 9214205\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 432 and sa.provider = 'hubspot';\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 432 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 436; # 519 - Moxso , portalId: 25531989\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 519 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 96; # 119 - Nourish Care , portalId: 26617984\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-02 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 119 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 331; # 416 - The National College , portalId: 7213852\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 416 and updated_at > '2026-02-04 11:00:00' order by updated_at desc;\n\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 308; # 380 - Foodles , portalId: 7723616\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 380 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 379; # 471 - imat-uve , portalId: 9177354\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 471 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 465; # 545 - Spotler , portalId: 144759271\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 545 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 455; # 537 - indevis , portalId: 25666868\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 537 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 200; # 265 - Jobadder , portalId: 6426676\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 265 and updated_at > '2026-02-06 10:30:00' order by updated_at desc;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 335; # 429 - Eletive , portalId: 6110563\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 429 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 363; # 456 - Global Group , portalId: 8901981\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 456 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 297; # 369 - Unbiased , portalId: 9229005\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 369 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 353; # 449 - Fuuse , portalId: 25781745\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 449 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 487; # 566 - Nimbus , portalId: 39982590\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-04 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 566 and updated_at > '2026-02-09 10:30:00' order by updated_at desc;\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 487;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1630;\nselect * from crm_fields where crm_configuration_id = 487 and\n(uuid_to_bin('4c6b2971-64d4-45b8-b377-427be758b5a5') = uuid or uuid_to_bin('59e368d8-65a0-4b77-b611-db37c99fbe68') = uuid);\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM crm_configurations where id = 420; # 506 - voiio , portalId: 145629154\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 506 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 479; # 558 - Momice , portalId: 535962\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 558 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 59; # 80 - Storyclash GmbH , portalId: 4268479\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 80 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 175; # 203 - Team iAM , portalId: 5534732\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 203 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\nSELECT * FROM crm_configurations where id = 368; # 460 - OneTouch Health , portalId: 5534732183355\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 00:00:00' order by updated_at desc;\nSELECT * FROM opportunities WHERE team_id = 460 and updated_at > '2026-02-10 15:00:00' order by updated_at desc;\n\n\n\nselect * from users where id = 29643;\nSELECT * FROM crm_field_values WHERE crm_field_id = 375177;\n# ********************************************************************\nSELECT * FROM teams WHERE name LIKE '%Buynomics%'; # 462, 482, 14910\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\n# and description like '%The call focused on understanding Welch%'\norder by id desc;\n\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 462 and sa.provider = 'salesforce';\n\nselect * from contacts where crm_configuration_id = 482 and name = 'Cyndall Hill'; # 15504749\nselect * from contacts where id = 10891096; # 482\nSELECT * FROM activities WHERE crm_configuration_id = 482\nand type NOT IN ('email-inbound', 'email-outbound')\nand contact_id = 15504749\norder by id desc;\n\nselect * from activities where id = 36793003; # 96cc7bc1-8622-4d27-92f4-baf664fc1a56, 00UOf00000PDdOXMA1\nselect * from transcription where id = 7646782;\nselect * from ai_prompts where transcription_id = 7646782;\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7a8471a3-847e-4822-802b-ddf426bbc252') = uuid; # 37370018\nSELECT * FROM activity_summary_logs WHERE activity_id = 37370018;\nSELECT * FROM teams WHERE id = 555;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 555 and sa.provider = 'hubspot';\n\n# ********************************************************************\nSELECT * FROM activities WHERE uuid_to_bin('7c17b8aa-09df-4f85-a0f7-51f47afd712d') = uuid; # 37395250\nSELECT * FROM activities WHERE uuid_to_bin('14d60388-260d-494b-aa0d-63fdb1c78026') = uuid; # 37395250\n\nSELECT a.* FROM activities a JOIN crm_configurations c on c.id = a.crm_configuration_id\nwhere a.type IN ('softphone', 'softphone-outbound') and c.provider = 'hubspot'\nand a.provider NOT IN ('hubspot')\n# and a.provider IN ('salesloft')\n# and c.id NOT IN (70)\n# and a.duration > 30\n# and actual_start_time > '2026-02-05 00:00:00'\norder by a.id desc;\n\nSELECT * FROM activities WHERE id = 37549787;\nSELECT * FROM crm_profiles WHERE user_id = 17613;\n\nSELECT * FROM crm_configurations WHERE id = 70;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 93 and sa.provider = 'hubspot';\n\nSELECT asf.activity_search_id, asf.id, asf.value\nFROM activity_search_filters asf\nWHERE asf.filter = 'group_id'\nAND asf.value IN (\n SELECT CONCAT(\n HEX(SUBSTR(uuid, 5, 4)), '-',\n HEX(SUBSTR(uuid, 3, 2)), '-',\n HEX(SUBSTR(uuid, 1, 2)), '-',\n HEX(SUBSTR(uuid, 9, 2)), '-',\n HEX(SUBSTR(uuid, 11))\n )\n FROM groups\n WHERE deleted_at IS NOT NULL\n);\n\nSELECT * FROM crm_configurations WHERE id = 373; # KPSBremen.de 465 # - no social account\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 465 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 494;\n\nSELECT * FROM teams WHERE name LIKE '%splose%'; # 572, 495, 18708\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 572 and sa.provider = 'pipedrive';\n\nselect * from opportunities where team_id = 572\n# and name like '%Onebright%'\n# and is_closed = 1 and is_won = 0\n order by id desc;\n\n\nselect * from users where deleted_at is null and status = 2;\n\nselect * from contacts where id = 17900517;\nselect * from accounts where id = 10109838;\nselect * from opportunities where id = 6955880;\n\nselect * from opportunity_contacts where opportunity_id = 6955880;\nselect * from opportunity_contacts where contact_id = 17900517;\n\nselect * from contact_roles cr join crm_configurations crm on cr.crm_configuration_id = crm.id\nwhere crm.provider != 'salesforce';\n\nSELECT * FROM activities WHERE uuid_to_bin('adcb8331-5988-4353-834e-383a355abba2') = uuid; # 38056424, crm 104659682404\nselect * from teams where id = 456;\nSELECT * FROM crm_configurations WHERE id = 363;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 456 and sa.provider = 'hubspot';\n\nselect * from crm_layouts where crm_configuration_id = 363;\nSELECT * FROM crm_layout_entities WHERE crm_layout_id IN (1203, 1204, 1635);\nSELECT * FROM crm_fields WHERE id IN (181536, 181538, 213455);\n\nSELECT * FROM teams WHERE name LIKE '%Electric%'; # 342, 272, 12767\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and name like 'NORTHUMBRIA POL%'; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 order by remotely_created_at asc; # and updated_at > '2025-07-01 00:00:00';\nSELECT * FROM opportunities WHERE crm_configuration_id = 272 and updated_at > '2026-01-01 00:00:00';\nSELECT * FROM crm_fields WHERE crm_configuration_id = 272 and object_type = 'opportunity';\nSELECT * FROM crm_field_values WHERE crm_field_id = 127164;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 342 and sa.provider = 'pipedrive';\n\nSELECT * FROM teams WHERE id = 472;\nSELECT * FROM crm_configurations WHERE id = 380;\nselect * from activities where id = 38285673; # 38285673\nSELECT * FROM users WHERE id = 16942;\nSELECT * FROM groups WHERE id = 1964;\nSELECT * FROM playbooks WHERE id = 2033;\n\nselect * from teams where created_at > '2026-03-09';\nSELECT * FROM crm_layouts WHERE crm_configuration_id = 499; # 1065\nSELECT * FROM crm_layout_entities WHERE crm_layout_id = 1678;\n\nSELECT * FROM teams WHERE id = 575;\nselect * from opportunities where team_id = 575;\n\nSELECT * FROM activities WHERE uuid_to_bin('96b1261f-2357-49f9-ab38-23ce12008ea0') = uuid;\n\nselect * from contacts c\nwhere c.crm_configuration_id = 370 order by c.updated_at desc;\n\nSELECT * FROM participants where activity_id = 38833541;\nSELECT * FROM participants where activity_id = 39216301;\nSELECT * FROM activity_summary_logs where activity_id = 39216301;\nSELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541, crm 478116564181\nSELECT * FROM activities WHERE uuid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = uuid; # 39216301, crm 480171536586\nselect * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;\nselect * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;\nselect * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;\nselect * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856', '742723347700');\n# owner 13236 525785080\n# contact 1 16779180 665587441856 - activity - Alex Howes alex@supportroom.com created 2026-01-26\n# contact 2 19247563 742723347700 - ash@supportroom.com 2026-03-24\n# company 4176133 47150650569\n# deal 7100953 410150124747\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 400 and sa.provider = 'hubspot';\n\nselect * from features;\nselect * from team_features where feature_id = 40;\n\nselect * from teams where id = 556; # owner: 18101, crm: 477\nselect * from crm_configurations where id = 477;\nSELECT * FROM users WHERE id = 18101;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 556 and sa.provider = 'integration-app';\n\nselect * from opportunities where id = 7594349;\nselect * from opportunity_stages where opportunity_id = 7594349 order by created_at desc;\nselect * from business_processes where id = 6024;\nselect * from business_process_stages where stage_id = 16352;\nselect * from business_process_stages where business_process_id = 6024;\nselect * from stages where team_id = 459;\nselect * from teams where id = 459;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 459 and sa.provider = 'hubspot';\n\nSELECT os.stage_id, s.crm_provider_id, s.name, COUNT(*) as cnt\nFROM opportunity_stages os\nJOIN stages s ON s.id = os.stage_id\nWHERE os.opportunity_id = 7594349\nGROUP BY os.stage_id, s.crm_provider_id, s.name\nORDER BY cnt DESC;\n\nSELECT s.id, s.crm_provider_id, s.name, s.team_id, s.crm_configuration_id\nFROM stages s\nJOIN business_process_stages bps ON bps.stage_id = s.id\nWHERE bps.business_process_id = 6024\nAND s.crm_provider_id = 'contractsent';\n\nselect * from stages where id IN (16352,20612,18281,7344,16378,16309,5036,15223,14535,6293,12098,11607)\n\nSELECT * FROM teams WHERE name LIKE '%Pulsar Group%'; # 472, 380, 15138, raza.gilani@vuelio.com\nselect * from playbooks where team_id = 472; # event 226147\nSELECT * FROM playbook_categories WHERE playbook_id = 2288;\nSELECT * FROM crm_fields WHERE id = 226147;\nSELECT * FROM crm_field_values WHERE crm_field_id = 226147;\n\nSELECT * FROM crm_configurations WHERE id = 380;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 472 and sa.provider = 'salesforce';\n\nselect * from activities where id = 58081273;\n\nselect * from automated_report_results where media_type = 'pdf' and status = 2;\n\nSELECT * FROM users WHERE name LIKE '%Neil Hoyle%'; # 17651\nSELECT * FROM social_accounts WHERE sociable_id = 17651;\n\nSELECT * FROM activities WHERE uuid_to_bin('975c6830-7d49-4c1e-b2e9-ac80c10a738a') = uuid;\nSELECT * FROM opportunities WHERE id IN (7842553, 6211727);\nSELECT * FROM contacts WHERE id IN (10202724, 6211727);\nSELECT * FROM opportunity_stages WHERE opportunity_id = 7842553;\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 519 and sa.provider = 'hubspot';\n\nselect * from crm_configurations where id = 436;\nselect * from crm_profiles where crm_configuration_id = 436; # 76091797 -> 16612\n\nselect * from contact_roles where contact_id = 10202724;\n\nselect * from stages where team_id = 519; # 18778\n18775\n\nSELECT\n id,\n crm_provider_id,\n stage_id,\n is_closed,\n is_won,\n stage_updated_at,\n updated_at\nFROM opportunities\nWHERE id IN (6211727, 7842553);\n\nSELECT * FROM opportunity_contacts\nWHERE opportunity_id = 6211727 AND contact_id = 10202724;\n\nSELECT id, name, stage_id, is_closed, is_won, updated_at, remotely_created_at\nFROM opportunities\nWHERE account_id = 8179134\nORDER BY updated_at DESC;\n\n\nselect * from text_relays where created_at > '2026-01-01';\nAND id IN (691, 692);\n\nselect * from teams;\n\n# ***************\nSELECT DISTINCT u.id, u.email, u.name, u.softphone_number, COUNT(a.id) as sms_count\nFROM users u\nINNER JOIN activities a ON u.id = a.user_id\nWHERE a.type LIKE 'sms%'\nAND a.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY)\nGROUP BY u.id, u.email, u.name, u.softphone_number\nORDER BY sms_count DESC;\n\nSELECT DISTINCT u.id, u.email, u.name, u.team_id, t.name as team_name,\n t.twilio_sms_sid, t.twilio_messaging_sid\nFROM users u\nINNER JOIN teams t ON u.team_id = t.id\nWHERE (t.twilio_sms_sid IS NOT NULL OR t.twilio_messaging_sid IS NOT NULL)\nAND u.status = 1\nORDER BY t.name, u.email;\n\nSELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, salesforce-admin@tourlane.com\nSELECT\n CONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE '' END) AS user_id,\n u.email,\n sa.*,\n t.owner_id FROM social_accounts sa\nJOIN users u on u.id = sa.sociable_id\nJOIN teams t on t.id = u.team_id\nWHERE u.team_id = 187 and sa.provider = 'salesforce';\n\nselect * from activities where id = 31264367;\nselect * from contacts where id = 6331639;\nselect * from accounts where id = 4156632;\nselect * from opportunities where id = 4843610;\n# update `activities` set `account_id` = 4156632, `contact_id` = 6331639, `opportunity_id` = 4843610,\n# `stage_id` = 13273, `activities`.`updated_at` = 2026-05-22 07:16:17 where `id` = 31264367)\"\n\nselect * from text_relays where created_at > '2026-05-01';\n\nselect * from activities order by id desc;\n\nselect * from users where name like '%Subra%';\n\nSELECT * FROM opportunities WHERE uuid_to_bin('04a9cfad-2c87-4453-9e72-20aeb78ccf8d') = uuid;","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New File or Directory…","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-4540138449943193088
|
2074680717582186093
|
typing_pause
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
1
2
36
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm;
use ChaseConey\LaravelDatadogHelper\Datadog;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Support\Facades\App;
use Jiminny\Contracts\Services\Crm\SyncCrmEntitiesInterface;
use Jiminny\Events\Crm\ProspectUpdated;
use Jiminny\Models\Account;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\Configuration;
use Jiminny\Models\Crm\Profile;
use Jiminny\Models\Lead;
use Jiminny\Models\Opportunity;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\ContactRoleRepository;
use Jiminny\Repositories\Crm\OpportunityRepository;
use Jiminny\Services\Crm\CrmObjects\Validators\StaleRecordValidator;
use Jiminny\Services\Crm\Salesforce\OpportunityMatcher\MatchBusinessAccount;
use Psr\Log\LoggerInterface;
class ProspectCache
{
public const string PROSPECT_TYPE_EMAIL = 'email';
public const string PROSPECT_TYPE_PHONE = 'phone';
public const string PROSPECT_TYPE_DOMAIN = 'domain';
private const int TTL_SECONDS = 900;
private const int TTL_SECONDS_DEV = 30;
private const string DATADOG_STAT_NAME = 'jiminny.crm.prospect_cache_lookup';
private const string LOOKUP_RESULT_INTERNAL = 'internal';
private const string LOOKUP_RESULT_CACHE = 'cache';
private const string LOOKUP_RESULT_DB = 'db';
private const string LOOKUP_RESULT_MISS = 'miss';
public function __construct(
private readonly FindsProspectInterface $dbCache,
private readonly Repository $cache,
private readonly OpportunityRepository $opportunityRepository,
private readonly EmailHelper $emailHelper,
private readonly LoggerInterface $logger,
private readonly StaleRecordValidator $staleRecordValidator,
) {
}
/**
* @return null|array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* }
*/
public function findByProspectIdentifier(
Configuration $configuration,
?Profile $profile,
string $identifierType,
string $identifierValue,
?int $userId = null,
?SyncCrmEntitiesInterface $crmService = null
): ?array {
$cachedValue = $this->get($configuration, $identifierValue, $userId);
if ($cachedValue !== null) {
$this->sendDatadogStats(self::LOOKUP_RESULT_CACHE, $configuration->getProviderName());
return $cachedValue;
}
if ($identifierType == self::PROSPECT_TYPE_EMAIL
&& $this->emailHelper->isCompanyEmail($configuration->getTeam(), $identifierValue)
) {
// Set the cache to avoid querying the database for internal participants
$prospectData = [null, null, null, null, null, null];
$this->set($configuration, $identifierValue, $prospectData, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_INTERNAL, $configuration->getProviderName());
return $prospectData;
}
$dbCache = $this->dbCache->findPro spect($configuration, [$identifierType => $identifierValue]);
if (empty(array_filter($dbCache))) {
$this->sendDatadogStats(self::LOOKUP_RESULT_MISS, $configuration->getProviderName());
return null;
}
$dbCache['contact'] = $this->staleRecordValidator->filterStale($dbCache['contact'], $crmService);
$dbCache['lead'] = $this->staleRecordValidator->filterStale($dbCache['lead'], $crmService);
if ($dbCache['contact'] instanceof Contact) {
$account = $dbCache['contact']->getAccount();
$dbCache['account'] = $account;
$opportunity = $this->findOpportunityInContactRoles(
$configuration,
$profile,
$dbCache['contact']->getId()
);
$opportunity = $this->staleRecordValidator->filterStale($opportunity, $crmService);
if ($opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Found opportunities by contact roles', [
'opportunity_id' => $opportunity->getId(),
]);
$dbCache['account'] = $opportunity->getAccount();
} elseif ($account instanceof Account) {
$opportunity = $this->getOpportunityFromDatabase(
configuration: $configuration,
account: $account,
contactId: $dbCache['contact']->getId(),
userId: $userId
);
}
$dbCache['opportunity'] = $opportunity;
$dbCache['account'] = $this->staleRecordValidator->filterStale($dbCache['account'], $crmService);
$dbCache['stage'] = $dbCache['opportunity']?->getStage();
}
/**
* @IMPORTANT The keys must always be in this exact order
*
* @var array{
* ?Lead,
* ?Account,
* ?Opportunity,
* ?Contact,
* ?Stage,
* string|null
* } $result
*/
$result = [
$dbCache['lead'] ?? null,
$dbCache['account'] ?? null,
$dbCache['opportunity'] ?? null,
$dbCache['contact'] ?? null,
$dbCache['stage'] ?? null,
null,
];
$this->set($configuration, $identifierValue, $result, $userId);
$this->sendDatadogStats(self::LOOKUP_RESULT_DB, $configuration->getProviderName());
return $result;
}
public function findDomainMatch(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
$cachedValue = $this->get(
configuration: $configuration,
identifier: $identifier,
userId: $userId
);
if ($cachedValue !== null) {
$this->sendDatadogStats(
self::LOOKUP_RESULT_CACHE,
$configuration->getProviderName()
);
return $cachedValue;
}
// Log cache miss
$this->logger->info('[Prospect match] Cache miss', [
'identifier_type' => self::PROSPECT_TYPE_DOMAIN,
'identifier' => $identifier,
'crm' => $configuration->getProviderName(),
]);
// not in the cache
return null;
}
public function set(Configuration $configuration, string $identifier, array $prospectData, ?int $userId = null): void
{
$this->cache->tags($this->getTags($configuration, $identifier))->put(
$this->generateKey($configuration, $identifier, $userId),
$prospectData,
$this->getCacheTtl()
);
}
public function handleProspectUpdated(ProspectUpdated $event): void
{
$prospect = $event->getProspect();
$configuration = $prospect->getCrmConfiguration();
if ($configuration === null) {
return;
}
if ($prospect->getEmail() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getEmail())])->flush();
}
if ($prospect->getPhone() !== null) {
$normalizedPhone = $this->normalizePhoneNumber($prospect->getPhone());
$this->cache->tags([$this->generateProspectTag($configuration, $normalizedPhone)])->flush();
}
if ($prospect->getName() !== null) {
$this->cache->tags([$this->generateProspectTag($configuration, $prospect->getName())])->flush();
}
}
public function normalizePhoneNumber(string $phone): string
{
// Remove all non-digit characters first
$digitsOnly = preg_replace('/[^\d]/', '', $phone);
// Remove a single leading zero if present
$digitsOnly = ltrim($digitsOnly, '0');
// Add E.164 prefix
return '+' . $digitsOnly;
}
private function get(Configuration $configuration, string $identifier, ?int $userId = null): ?array
{
return $this->cache->tags($this->getTags($configuration, $identifier))
->get($this->generateKey($configuration, $identifier, $userId));
}
private function generateKey(Configuration $configuration, string $identifier, ?int $userId = null): string
{
$keySuffix = $userId === null ? '' : ':user:' . $userId;
return hash('sha256', 'crm:' . $configuration->getId() . ':prospect:' . $identifier . $keySuffix);
}
private function sendDatadogStats(string $result, string $crm): void
{
Datadog::increment(self::DATADOG_STAT_NAME, 1, [
'result' => $result,
'crm' => $crm,
]);
}
private function getCacheTtl(): int
{
if (! App::environment('production', 'production-eu')) {
return self::TTL_SECONDS_DEV;
}
return self::TTL_SECONDS;
}
private function findOpportunityInContactRoles(
Configuration $configuration,
?Profile $profile,
int $contactId
): ?Opportunity {
$contactRoleRepository = app(ContactRoleRepository::class);
$contactRoles = $contactRoleRepository->getByCrmContactId(
$configuration,
$contactId,
);
if (! $contactRoles->isEmpty()) {
$opportunityId = app(MatchBusinessAccount::class)->resolve(
$contactRoles,
$profile?->getCrmProviderId(),
);
$opportunity = $this->opportunityRepository->find($opportunityId);
}
return $opportunity ?? null;
}
private function getOpportunityFromDatabase(
Configuration $configuration,
Account $account,
int $contactId,
?int $userId = null
): ?Opportunity {
$opportunity = null;
if ($userId) {
$this->logger->info('ProspectCache - Searching DB for opportunity by owner', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'owner_id' => $userId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityOwner(
$configuration,
$account,
$userId,
$contactId
);
}
if (! $opportunity instanceof Opportunity) {
$this->logger->info('ProspectCache - Fallback DB opportunity search', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
]);
$opportunity = $this->opportunityRepository->findOneByAccountAndOpportunityAssignmentRule(
$configuration,
$account,
$contactId
);
}
$this->logger->info('ProspectCache - Opportunity DB search results', [
'account_id' => $account->getId(),
'contact_id' => $contactId,
'opportunity_id' => $opportunity?->getId(),
]);
return $opportunity;
}
private function generateProspectTag(Configuration $configuration, string $identifier): string
{
return 'prospect:' . $configuration->getId() . ':' . $identifier;
}
private function getTags(Configuration $configuration, string $identifier): array
{
return ['prospect_cache', $this->generateProspectTag($configuration, $identifier)];
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
31
5
28
19
Previous Highlighted Error
Next Highlighted Error
SELECT * FROM team_features where team_id = 1;
SELECT * FROM teams WHERE name LIKE '%Vixio%'; # 340,270,11922
SELECT * FROM users WHERE team_id = 340; # 12015
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 340
and sa.provider = 'salesforce';
# and sa.provider = 'salesloft';
select * from crm_fields where crm_configuration_id = 270 and object_type = 'event';
# 125558 - Event Type - Event_Type__c
# 125552 - Event Status - Event_Status__c
SELECT * FROM sidekick_settings WHERE team_id = 340;
SELECT * FROM crm_field_values WHERE crm_field_id in (125552);
select * from activities where crm_configuration_id = 270
and type = 'conference' and crm_provider_id IS NOT NULL
and actual_start_time > '2024-09-16 09:00:00' order by scheduled_start_time;
SELECT * FROM activities WHERE id = 20871677;
SELECT * FROM crm_field_data WHERE activity_id = 20871677;
select * from crm_layouts where crm_configuration_id = 270;
select * from crm_layout_entities where crm_layout_id in (886,887);
SELECT * FROM crm_configurations WHERE id = 270;
select * from playbooks where team_id = 340; # 1514
select * from groups where team_id = 340;
SELECT * FROM crm_fields WHERE id IN (125393, 125401);
select g.name as 'team name', p.name as 'playbook name', f.label as 'activity type field' from groups g
join playbooks p on g.playbook_id = p.id
join crm_fields f on p.activity_field_id = f.id
where g.team_id = 340;
SELECT * FROM activities WHERE uuid_to_bin('0c180357-67d2-419e-a8c3-b832a3490770') = uuid; # 20448716
select * from crm_field_data where object_id = 20448716;
select * from activities where crm_configuration_id = 270 and provider = 'salesloft' order by id desc;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%CybSafe%'; # 343,273,12008
select * from opportunities where team_id = 343;
select * from opportunities where team_id = 343 and crm_provider_id = '18099102526';
select * from opportunities where team_id = 343 and account_id = 945217482;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
select * from accounts where team_id = 343 order by name asc;
select * from stages where crm_configuration_id = 273 and type = 'opportunity';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Voyado%'; # 353,283,12143
SELECT * FROM activities WHERE crm_configuration_id = 283 and account_id = 3777844 order by id desc;
SELECT * FROM accounts WHERE team_id = 353 AND name LIKE '%Salesloft%';
SELECT * FROM activities WHERE id = 20717903;
select * from participants where activity_id IN (20929172,20928605,20928468,20926272,20926271,20926270,20926269,20916499,20916454,20916436,20916435,20900015,20900014,20900013,20897312,20897243,20897241,20897237,20897232,20897229,20893648,20893231,20893230,20893229,20893228,20889784,20885039,20885038,20885037,20885036,20885035,20882728,20882708,20882703,20882702,20869828,20869811,20869806,20869801,20869799,20869798,20869796,20869795,20869794,20869761,20869760,20869759,20868688,20868687,20850340,20847195,20841710,20833967,20827021,20825307,20825305,20825297,20824615,20824400,20823927,20821760,20795588,20794233,20794057,20793710,20785811,20781789,20781394,20781307,20762651,20758453,20758282,20757323,20756643,20756636,20756629,20756627,20756606,20756605,20756604,20756603,20756602,20756600,20756599,20756598,20756595,20756594,20756589,20756587,20756577,20756573,20748918,20748386,20748385,20748384,20748383,20748382,20748381,20748380,20748379,20748377,20748375,20748373,20743301,20717905,20717904,20717903,20717901,20717899);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 353
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%modern world business solutions%'; # 345,275,12016, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('3921d399-3fef-4609-a291-b0097a166d43') = uuid;
# id: 20940638, user: 12022, contact: 5305871
SELECT * FROM activity_summary_logs WHERE activity_id = 20940638;
select * from contacts where team_id = 345 and crm_provider_id = '30891432415' order by name asc; # 5305871
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 345
and sa.provider = 'hubspot';
select * from users where team_id = 345 and id = 12022;
SELECT * FROM crm_profiles WHERE user_id = 12022;
SELECT * FROM participants WHERE activity_id = 20940638;
SELECT * FROM users u
JOIN crm_profiles cp ON u.id = cp.user_id
WHERE u.team_id = 345;
select * from contacts where team_id = 345 and crm_provider_id = '30880813535' order by name desc; # 5305871
select * from team_features where team_id = 345;
SELECT * FROM activities WHERE uuid_to_bin('11701e2d-2f82-4dab-a616-1db4fad238df') = uuid; # 21115197
SELECT * FROM participants WHERE activity_id = 20897406;
SELECT * FROM activities WHERE uuid_to_bin('63ba55cd-1abc-447d-83da-0137000005b7') = uuid; # 20953912
SELECT * FROM activities WHERE crm_configuration_id = 275 and provider = 'ringcentral' and title like '%1252629100%';
SELECT * FROM activities WHERE id = 20946641;
SELECT * FROM crm_profiles WHERE user_id = 10211;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120,97,10984, [EMAIL]
SELECT * FROM opportunities WHERE crm_configuration_id = 97 and crm_provider_id = '006N1000006c5PpIAI';
select * from stages where crm_configuration_id = 97 and type = 'opportunity';
select * from opportunities where team_id = 120;
select * from crm_configurations crm join teams t on crm.id = t.crm_id
where 1=1
AND t.current_billing_plan IS NOT NULL
AND crm.auto_sync_activity = 0
and crm.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Exclaimer%'; # 270,205,10053,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 270
and sa.provider = 'salesforce';
SELECT * FROM activities WHERE uuid_to_bin('b54df794-2a9a-4957-8d80-09a600ead5f8') = uuid; # 21637956
SELECT * FROM crm_profiles WHERE user_id = 11446;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cygnetise%'; # 372,300,12554, [EMAIL]
select * from playbooks where team_id = 372;
select * from crm_fields where crm_configuration_id = 300 and object_type = 'event'; # 141340
SELECT * FROM crm_field_values WHERE crm_field_id = 141340;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 372
and sa.provider = 'salesforce';
select * from crm_profiles where crm_configuration_id = 300;
SELECT * FROM crm_configurations WHERE team_id = 372;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Planday%'; # 291,242,11501,[EMAIL]
SELECT * FROM opportunities WHERE team_id = 291 and crm_provider_id = '006bG000005DO86QAG'; # 3207756
select * from crm_field_data where object_id = 3207756;
SELECT * FROM crm_fields WHERE id = 111834;
select f.id, f.crm_provider_id AS field_name, f.label, fd.object_id AS dealId, fd.value
FROM crm_fields f
JOIN crm_field_data fd ON f.id = fd.crm_field_id
WHERE f.crm_configuration_id = 242
AND f.object_type = 'opportunity'
AND fd.object_id IN (3207756)
ORDER BY fd.object_id, fd.updated_at;
SELECT * FROM crm_configurations WHERE auto_connect = 1;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150,[EMAIL]
select * from group_deal_risk_types drgt join groups g on drgt.group_id = g.id
where g.team_id = 187;
select * from `groups` where team_id = 187;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 187
and sa.provider = 'salesforce';
# Destination - 98870 - Destination__c
# Stage - 79014 - StageName
# Land Arrangement - 98856 - Land_Arrangement__c
# Flight - 98848 - Flight__c
# Last activity date - 98812 - LastActivityDate
# Last modified date - 98809 - LastModifiedDate
# Last inbound mail timestamp - 99151 - Last_Inbound_Mail_Timestamp__c
# next call - 98864 - Next_Call__c
select * from crm_fields where crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
select * from opportunities where team_id = 187 and name LIKE'%Muriel Sal%';
select * from opportunities where team_id = 187 and user_id = 9951 and is_closed = 0;
select * from activities where opportunity_id = 3538248;
SELECT * FROM crm_profiles WHERE user_id = 8150;
select * from deal_risks where opportunity_id = 3538248;
select * from teams where crm_id IS NULL;
SELECT opp.id AS opportunity_id,
u.group_id AS group_id,
MAX(
CASE
WHEN a.type IN ("sms-inbound", "sms-outbound") THEN a.created_at
ELSE a.actual_end_time
END) as last_date
FROM opportunities opp
left join activities a on a.opportunity_id = opp.id
inner join users u on opp.user_id = u.id
where opp.user_id IN (9951)
AND opp.is_closed = 0
and a.status IN ('completed', 'received', 'delivered') OR a.status IS NULL
group by opp.id;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Cybsafe%'; # 343,301,12008,[EMAIL]
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_profiles WHERE crm_configuration_id = 301;
SELECT * FROM contacts WHERE id = 6612363;
SELECT * FROM accounts WHERE id = 4235676;
SELECT * FROM opportunities WHERE crm_configuration_id = 301 and crm_provider_id = 32983784868;
select * from opportunity_stages where opportunity_id = 4503759;
# SELECT * FROM opportunities WHERE id = 4569937;
select * from activities where crm_configuration_id = 301;
SELECT * FROM activities WHERE uuid_to_bin('d3b2b28b-c3d0-4c2d-8ed0-eef42855278a') = uuid; # 26330370
SELECT * FROM participants WHERE activity_id = 26330370;
SELECT * FROM teams WHERE id = 375;
select * from playbooks where team_id = 375;
select * from stages where crm_configuration_id = 301 and type = 'opportunity';
select * from teams;
select * from contact_roles;
SELECT * FROM opportunities WHERE team_id = 343 and user_id = 12871 and close_date >= '2024-11-01';
select * from users u join crm_profiles cp on cp.user_id = u.id where u.team_id = 343;
SELECT * FROM crm_field_data WHERE object_id = 3771706;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 343
and sa.provider = 'hubspot';
SELECT * FROM crm_fields WHERE crm_configuration_id = 301 and object_type = 'opportunity'
and crm_provider_id LIKE "%traffic_light%";
SELECT * FROM crm_field_values WHERE crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531);
SELECT fd.* FROM opportunities o
JOIN crm_field_data fd ON o.id = fd.object_id
WHERE o.team_id = 343
# and o.user_id IS NOT NULL
and fd.crm_field_id IN (144020,144048,144111,144113,144126,144481,144508,144531)
and fd.value != ''
order by value desc
# group by o.id
;
SELECT * FROM opportunities WHERE id = 3769843;
SELECT * FROM teams WHERE name LIKE '%Tour%'; # 187,209,8150, [EMAIL]
SELECT * FROM crm_layouts WHERE crm_configuration_id = 209;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 682;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding Circle%'; # 220,177,8603,[EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('7a40e99b-3b37-4bb1-b983-325b81801c01') = uuid; # 23139839
SELECT * FROM opportunities WHERE id = 3855992;
SELECT * FROM users WHERE name LIKE '%Angus Pollard%'; # 8988
SELECT * FROM teams WHERE name LIKE '%Story Terrace%'; # 379, 307, 12894
SELECT * FROM crm_fields WHERE crm_configuration_id = 307 and object_type != 'opportunity';
select * from contacts where team_id = 379 and name like '%bebro%'; # 5874411, crm: 77229348507
SELECT * FROM crm_field_data WHERE object_id = 5874411;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 379
and sa.provider = 'hubspot';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%mentio%'; # 117, 94, 6371, [EMAIL]
SELECT * FROM activities WHERE uuid_to_bin('82939311-1af0-4506-8546-21e8d1fdf2c1') = uuid;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Tourlane%'; # 187, 209, 8150, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 187 and crm_provider_id = '006Se000008xfvNIAQ'; # 3537793
select * from generic_ai_prompts where subject_id = 3537793;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lunio%'; # 120, 97, 10984, [EMAIL]
SELECT * FROM crm_configurations WHERE id = 97;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 97;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 355;
SELECT * FROM crm_fields WHERE id = 32682;
select cfd.value, o.* from opportunities o
join crm_field_data cfd on o.id = cfd.object_id and cfd.crm_field_id = 32682
where team_id = 120
and cfd.value != ''
;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 120
and sa.provider = 'salesforce';
select * from opportunities where team_id = 120 and crm_provider_id = '006N1000007X8MAIA0';
SELECT * FROM crm_field_data WHERE object_id = 2313439;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 410;
SELECT * FROM teams WHERE name LIKE '%Local Business Oxford%';
select * from scorecards where team_id = 410;
select * from scorecard_rules;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Funding%'; # 220, 177, 8603, [EMAIL]
select * from activities a
join opportunities o on a.opportunity_id = o.id
join users u on o.user_id = u.id
where a.crm_configuration_id = 177 and a.type LIKE '%email-out%'
# and a.actual_end_time > '2024-12-16 00:00:00'
# and o.remotely_created_at > '2024-12-01 00:00:00'
# and u.group_id = 1014
and u.id = 9021
order by a.id desc;
SELECT * FROM opportunities WHERE id in (3981384,4017346);
SELECT * FROM users WHERE team_id = 220 and id IN (8775, 11435);
select * from users where id = 9021;
select * from inboxes where user_id = 9021;
select * from inbox_emails where inbox_id = 1349 and email_date > '2024-12-18 00:00:00';
select * from email_messages where team_id = 220
and orig_date > '2024-12-16 00:00:00' and orig_date < '2024-12-19 00:00:00'
and subject LIKE '%Personal%'
# and 'from' = '[EMAIL]'
;
select * from activities a
join opportunities o on a.opportunity_id = o.id
where a.user_id = 9021 and a.type LIKE '%email-out%'
and a.actual_end_time > '2024-12-18 00:00:00'
and o.user_id IS NOT NULL
and o.remotely_created_at > '2024-12-01 00:00:00'
order by a.id desc;
SELECT * FROM opportunities WHERE team_id = 220 and name LIKE '%Right Car move Limited%' and id = 3966852;
select * from activities where crm_configuration_id = 177 and type LIKE '%email%' and opportunity_id = 3966852 order by id desc;
select * from team_settings where name IN ('useCloseDate');
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Hurree%'; # 104, 81, 6175, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 104 and name = 'PropOp';
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 104
and sa.provider = 'hubspot';
select * from crm_configurations where last_synced_at > '2025-01-19 01:00:00'
select * from teams where crm_id IS NULL;
select t.name as 'team', u.name as 'owner', u.email, u.phone
from teams t
join activity_providers ap on t.id = ap.team_id
join users u on t.owner_id = u.id
where 1=1
and t.status = 'active'
and ap.is_enabled = 1
# and u.status = 1
and ap.provider = 'ms-teams';
select * from crm_configurations where provider = 'bullhorn'; # 344
SELECT * FROM teams WHERE id = 442; # 14293
select * from users where team_id = 442;
select * from social_accounts sa where sa.sociable_id = 14293;
select * from invitations where team_id = 442;
# [PASSWORD_DOTS]
SELECT * FROM users WHERE email LIKE '%[EMAIL]%'; # 14022
SELECT * FROM teams WHERE id = 429;
select * from opportunities where team_id = 429 and crm_provider_id IN (16157415775, 22246219645);
select * from activities where opportunity_id in (4340436,4353519);
select * from transcription where activity_id IN (25630961,25381771);
select * from generic_ai_prompts where subject_id IN (4353519);
SELECT
a.id as activity_id,
a.opportunity_id,
a.type as activity_type,
a.language,
CONCAT(a.title, a.description) AS mail_content,
e.from AS mail_from,
e.to AS mail_to,
e.subject AS mail_subject,
e.body AS mail_body,
p.type as prompt_type,
p.status as prompt_status,
p.content AS prompt_content,
a.actual_start_time as created_at
FROM activities a
LEFT JOIN ai_prompts p ON a.transcription_id = p.transcription_id AND p.deleted_at IS NULL
LEFT JOIN email_messages e ON a.id = e.activity_id
WHERE a.actual_start_time > '2024-01-01 00:00:00'
AND a.opportunity_id IN (4353519)
AND a.status IN ('completed', 'received', 'delivered')
AND a.deleted_at IS NULL
AND a.type NOT IN ('sms-inbound', 'sms-outbound')
ORDER BY a.opportunity_id ASC, a.id ASC;
SELECT * FROM users WHERE name LIKE '%George Fierstone%'; # 14293
SELECT * FROM teams WHERE id = 442;
SELECT * FROM crm_configurations WHERE id = 344;
select * from team_features where team_id = 442;
select * from groups where team_id = 442;
select * from playbooks where team_id = 442;
select * from playbook_categories where playbook_id = 1729;
select * from crm_fields where crm_configuration_id = 344 and id = 172024;
SELECT * FROM crm_field_values WHERE crm_field_id = 172024;
select * from crm_layouts where crm_configuration_id = 344;
select * from playbook_layouts where playbook_id = 1729;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Learning%'; # 260, 221, 9444
select s.*
# , s.sent_at, u.name, a.*
from activity_summary_logs s
inner join activities a on a.id = s.activity_id
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 356
and s.sent_at > date_sub(now(), interval 60 day)
order by a.actual_end_time desc;
select * from activities a
# inner join activity_summary_logs s on s.activity_id = a.id
where a.crm_configuration_id = 356 and a.actual_end_time > date_sub(now(), interval 60 day)
# and a.crm_provider_id is not null
# and provider <> 'ringcentral'
and status = 'completed'
order by a.actual_end_time desc;
select * from teams order by id desc; # 17328, 32, 17830, [EMAIL]
SELECT * FROM users;
SELECT * FROM users where team_id = 260 and status = 1; # 201 - 150 active
SELECT * FROM teams WHERE id = 260;
select * from team_settings where team_id = 260;
select * from crm_configurations where team_id = 260;
SELECT * FROM crm_layouts WHERE crm_configuration_id = 356;
SELECT * FROM crm_layout_entities WHERE crm_layout_id = 1184;
select * from accounts where crm_configuration_id = 221 order by id desc; # 7000
select * from leads where crm_configuration_id = 221 order by id desc; # 0
select * from contacts where crm_configuration_id = 221 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 221 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 221 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 221;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 221 order by id desc;
select * from stages where crm_configuration_id = 221 order by id desc;
select * from accounts where crm_configuration_id = 356 order by id desc; # 7000
select * from leads where crm_configuration_id = 356 order by id desc; # 0
select * from contacts where crm_configuration_id = 356 order by id desc; # 200 000
select * from opportunities where crm_configuration_id = 356 order by id desc; # 0
select * from crm_profiles where crm_configuration_id = 356 order by id desc; # 23
select * from crm_fields where crm_configuration_id = 356;
select * from crm_field_values where crm_field_id = 5302 order by id desc;
select * from crm_layouts where crm_configuration_id = 356 order by id desc;
select * from stages where crm_configuration_id = 356 order by id desc;
select * from playbooks where team_id = 260 order by id desc; # 4 (2 deleted)
select * from groups where team_id = 260 order by id desc; # 27 groups, (2 deleted)
select * from playbook_layouts where playbook_id IN (1410,1409,1276,1254); # 4
select ce.* from calendars c
join users u on c.user_id = u.id
join calendar_events ce on c.id = ce.calendar_id
where u.team_id = 260
and (ce.start_time > '2025-02-21 00:00:00')
;
# calendar events 1207
#
select * from opportunities where team_id = 260;
SELECT * FROM crm_field_data WHERE object_id = 4696496;
select * from activities where crm_configuration_id = 356 and crm_provider_id IS NOT NULL;
select * from activities where crm_configuration_id IN (221) and provider NOT IN ('ms-teams', 'uploader', 'zoom-bot')
# and type = 'conference' and status = 'scheduled' and activities.is_internal = 0
and created_at > '2024-03-01 00:00:00'
order by id desc; # 880 000, ringcentral, avaya
SELECT * FROM participants WHERE activity_id = 26371744;
# all activities 942 000 +
# conference 7385 - scheduled 984 - external 343
select * from activities where id = 26321812;
select * from participants where activity_id = 26321812;
select * from participants where activity_id in (26414510,26414514,26414516,26414604,26414653,26414655);
select * from leads where id in (720428,689175,731546,645866,621037);
select * from users where id = 13841;
select * from opportunities where user_id = 9541;
select * from stages where id = 15900;
select * from accounts where
# id IN (4160055,5053725,4965303,4896434)
id in (4584518,3249934,3218025,3891133,3399450,4172999,4485161,3101785,4587203,3070816,2870343,2870341,3563940,4550846,3424464,3249963,2870342)
;
select * from activities where id = 26654935;
SELECT * FROM opportunities WHERE id = 4803458;
SELECT * FROM opportunities where team_id = 260 and user_id = 13841 AND stage_id = 15900;
SELECT id, uuid, provider, type, lead_id, account_id, contact_id, opportunity_id, stage_id, status, recording_state, title, actual_start_time, actual_end_time
FROM activities WHERE user_id = 13841 AND opportunity_id IN (4729783, 4731717, 4731726, 4732064, 4732849, 4803458, 4813213);
SELECT DISTINCT
o.id, o.stage_id, s.name, a.title,
a.*
FROM activities a
# INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
INNER JOIN groups g ON u.group_id = g.id
INNER JOIN opportunities o ON a.opportunity_id = o.id
INNER JOIN stages s ON o.stage_id = s.id
WHERE
a.crm_configuration_id = 356
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 13841
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
AND team.uuid = uuid_to_bin('a607fba7-452e-4683-b2af-00d6cb52c93c')
AND g.uuid = uuid_to_bin('b5d69e40-24a0-4c16-810b-5fa462299f94')
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-13 00:00:00' AND '2025-03-18 07:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND u.uuid = uuid_to_bin('6f40e4b8-c340-4059-b4ac-1728e87ea99e')
)
)
AND (
# s.id = 15900
s.uuid = uuid_to_bin('04ca1c26-c666-4268-a129-419c0acffd73')
OR s.uuid IS NULL -- Include records without opportunity stage
)
ORDER BY a.actual_end_time DESC;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Lead Forensics%'; # 190, 162, 8474, [EMAIL]
SELECT * FROM users WHERE team_id = 190;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 190
and sa.provider = 'hubspot';
select * from role_user where user_id = 8474;
select * from crm_configurations where provider = 'bullhorn';
SELECT * FROM opportunities WHERE uuid_to_bin('94578249-65ec-4205-90f2-7d1a7d5ab64a') = uuid;
SELECT * FROM users WHERE uuid_to_bin('26dbadeb-926f-4150-b11b-771b9d4c2f9a') = uuid;
SELECT * FROM opportunities WHERE id = 4732493;
select * from activities where opportunity_id = 4732493;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE id = 443; # 358, 14315, [EMAIL]
SELECT * FROM opportunities WHERE team_id = 443;
SELECT a.id, a.type, a.user_id, a.status, a.deleted_at, u.name, u.email, u.team_id as activity_team_id, u.status, u.deleted_at, t.name, t.status, s.team_id as stage_team_id
FROM activities AS a
JOIN stages AS s ON a.stage_id = s.id
JOIN users AS u ON u.id = a.user_id
JOIN teams AS t ON t.id = s.team_id
WHERE u.team_id <> s.team_id and t.id > 135;
SELECT
crm_configuration_id,
crm_provider_id,
COUNT(*) as duplicate_count,
GROUP_CONCAT(id) as stage_ids,
GROUP_CONCAT(name) as stage_names
FROM stages
GROUP BY crm_configuration_id, crm_provider_id
HAVING COUNT(*) > 1
ORDER BY duplicate_count DESC;
select * from stages where id IN (14898,14907);
select * from business_processes;
SELECT *
FROM crm_configurations
WHERE team_id IN (
SELECT team_id
FROM crm_configurations
GROUP BY team_id
HAVING COUNT(*) > 1
)
ORDER BY team_id;
SELECT *
FROM teams
WHERE crm_id IN (
SELECT crm_id
FROM teams
GROUP BY crm_id
HAVING COUNT(*) > 1
)
ORDER BY crm_id;
# [PASSWORD_DOTS]
select * from crm_configurations where provider = 'integration-app';
SELECT * FROM teams WHERE id = 443; # Correre Naturale 358 14315 [EMAIL]
select * from activities where crm_configuration_id = 358 order by actual_end_time desc;
select id, uuid, actual_end_time, crm_provider_id, is_internal, playbook_category_id, type, user_id, lead_id, contact_id, account_id, opportunity_id, status, title from activities where crm_configuration_id = 358 order by actual_end_time desc;
select * from team_features where team_id = 358;
select * from activity_summary_logs;
select * from teams where id = 406;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Sportfive%'; # 267, 202, 14637, [EMAIL]
select * from activities where crm_configuration_id = 202 order by actual_end_time desc;
SELECT * FROM users where id = 14637;
SELECT * FROM teams where id = 267;
SELECT * FROM groups where id = 1118;
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM activities
WHERE crm_configuration_id = 202
AND status IN ('completed', 'failed')
AND recording_state != 'stopped'
AND type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
AND (is_private = 0 OR user_id = 14637)
AND (
(
actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
) OR (
actual_start_time IS NULL
AND type IN ('sms-outbound', 'sms-inbound')
AND created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND NOT EXISTS (
SELECT 1
FROM tracks
WHERE
tracks.activity_id = activities.id
AND tracks.type IN ('audio', 'video')
)
ORDER BY actual_end_time DESC;
SELECT DISTINCT
a.*
FROM activities a
INNER JOIN tracks t ON a.id = t.activity_id
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams team ON u.team_id = team.id
WHERE
a.crm_configuration_id = 202
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
# and a.user_id = 14637
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND t.type IN ('audio', 'video')
AND (
(a.actual_start_time BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59')
OR
(
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-12 12:00:00' AND '2025-03-24 11:59:59'
)
)
AND (
a.is_private = 0
OR (
a.is_private = 1
AND a.user_id = 14637
)
)
ORDER BY a.actual_end_time DESC
;
SELECT DISTINCT a.*
FROM activities a
INNER JOIN users u ON a.user_id = u.id
INNER JOIN teams t ON u.team_id = t.id
# INNER JOIN tracks tr ON a.id = tr.activity_id
# INNER JOIN groups g ON u.group_id = g.id
WHERE 1=1
AND t.id = 267
# AND t.uuid = uuid_to_bin('aed4927b-f1ea-499e-94c3-83762fd233e8')
AND a.status IN ('completed', 'failed')
AND a.recording_state != 'stopped'
AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
# AND tr.type NOT IN ('audio', 'video')
AND (
a.is_private = 0
OR a.user_id = 14637
)
AND (
(a.actual_start_time BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59')
OR (
a.actual_start_time IS NULL
AND a.type IN ('sms-outbound', 'sms-inbound')
AND a.created_at BETWEEN '2025-03-19 00:00:00' AND '2025-03-21 23:59:59'
)
)
# and NOT EXISTS (
# SELECT 1
# FROM tracks t
# WHERE t.activity_id = a.id
# AND t.type IN ('audio', 'video')
# )
ORDER BY a.actual_end_time DESC;
SELECT * FROM tracks WHERE activity_id = 26485995;
select a.is_private, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
where a.crm_configuration_id = 202
# and a.is_internal = 0
and (a.actual_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type IN ("softphone","softphone-inbound","conference","sms-inbound")
and a.status IN ('completed', 'failed')
# and a.external_id is not null
order by a.actual_end_time desc;
select * from activities a where a.crm_configuration_id = 202
and a.actual_start_time between '2025-03-20 00:00:00' and '2025-03-21 00:00:00'
# AND a.type IN ('softphone', 'softphone-inbound', 'conference', 'sms-inbound', 'sms-outbound')
select g.name, a.title, uuid_from_bin(a.uuid), a.external_id, a.status, a.recording_state, a.recording_reason_code, a.scheduled_start_time, a.scheduled_end_time, a.actual_start_time, a.actual_end_time from activities a
inner join users u on u.id = a.user_id
inner join groups g on g.id = u.group_id
where a.crm_configuration_id = 202
and a.is_internal = 0
and (a.scheduled_start_time between '2025-03-19 00:00:00' and '2025-03-21 00:00:00')
and a.type = 'conference'
and a.status != 'completed'
and a.external_id is not null
order by a.scheduled_start_time desc;
SELECT * FROM teams WHERE name LIKE '%Tourlane%';
SELECT * FROM crm_fields WHERE crm_configuration_id = 209 and object_type = 'opportunity';
SELECT * FROM crm_field_data WHERE crm_field_id = 98809;
select * from users where status = 1 AND timezone = 'MDT';
select * from opportunities where id = 3769814;
select * from deal_risks where opportunity_id = 3769814;
select cp.* from crm_profiles cp
join users u on cp.user_id = u.id
join crm_configurations crm on cp.crm_configuration_id = crm.id
where crm.provider = 'hubspot' AND u.status = 1 AND log_notes != 'none';
select * from crm_fields where id = 154575;
select * from team_features where feature = 'SUPPORTS_SYNC_MISSING_CALL_DISPOSITIONS';
SELECT * FROM teams WHERE id = 176; # crm 148
select * from activities where crm_configuration_id = 148 and provider = 'hubspot' order by id desc;
select * from activity_providers where provider = 'amazon-connect';
select * from crm_fields cf
join crm_configurations crm on crm.id = cf.crm_configuration_id
where crm.provider = 'hubspot' and cf.object_type IN ('account', 'contact');
# [PASSWORD_DOTS]
SELECT * FROM users WHERE id IN (15415, 15418);
SELECT * FROM groups WHERE id IN (1805,1806);
SELECT * FROM playbooks WHERE id = 1860;
SELECT * FROM playbook_categories WHERE id = 38634;
SELECT * FROM crm_fields WHERE id = 189962;
SELECT * FROM teams WHERE name = 'Pulsar Group'; # 472, 380, 15138 [EMAIL]
SELECT * FROM crm_profiles WHERE user_id = 15415;
SELECT * FROM social_accounts WHERE sociable_id = 15415 and provider = 'salesforce';
select * from sidekick_settings where team_id = 472;
SELECT * FROM activities WHERE uuid_to_bin('452c58c7-b87c-4fdd-953e-d7af185e9588') = uuid; # 28617536, user: 15418
SELECT * FROM activities WHERE uuid_to_bin('399114ee-d3a8-458c-bff5-5f654658db0a') = uuid; # 28344407, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('f0aa567f-0ab1-4bbb-96aa-37dcf184676b') = uuid; # 28580288, user: 15415
SELECT * FROM activities WHERE uuid_to_bin('50c086b1-2770-4bca-b5ae-6bac22ec426b') = uuid; # 28566069, user: 15415
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%TeamTailor%'; # 109, 218, 13969, [EMAIL]
select * from crm_configurations where id = 218;
SELECT * FROM activities WHERE uuid_to_bin('e39b5857-7fdb-4f5a-951a-8d3ca69bb1b0') = uuid; # 28338765
SELECT * FROM users WHERE id IN (13232, 13230);
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
0057R00000EPL5HQAX Inez Ekblad
1091cb81-5ea1-4951-a0ed-f00b568f0140 Triman Kaur
SELECT * FROM crm_profiles WHERE user_id IN (13232, 13230);
############################################################################################
SELECT * FROM activities WHERE uuid_to_bin('675eeaeb-5681-42db-90bc-54c07a604408') = uuid; # 28655939 00UVg00000FLvnSMAT
SELECT * FROM crm_field_data WHERE activity_id = 28655939;
SELECT * FROM crm_fields WHERE id IN (94491,94493,94498);
SELECT * FROM users WHERE id = 13658;
SELECT * FROM teams WHERE id = 109;
SELECT * FROM crm_configurations WHERE id = 218;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 109
and sa.provider = 'salesforce';
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Strengthscope%'; # 481, 390, 15420, [EMAIL]
SELECT * FROM stages WHERE crm_configuration_id = 390;
select * from business_processes where team_id = 481 and crm_configuration_id = 390;
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 481
and sa.provider = 'salesforce';
SELECT * FROM users WHERE id = 15780; # team 462
select * from social_accounts sa
join users u on sa.sociable_id = u.id
where u.team_id = 462
and sa.provider = 'hubspot';
select * from teams where id = 495;
SELECT * FROM users WHERE id = 15794;
select * from social_accounts where sociable_id = 15794;
# [PASSWORD_DOTS]
SELECT * FROM teams WHERE name LIKE '%Flight%'; # 427, 333, 13752
SELECT * FROM accounts WHERE team_id = 427 and cr...
|
86567
|
NULL
|
NULL
|
NULL
|
|
86568
|
2971
|
24
|
2026-05-28T15:01:15.360899+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-28/1779 /Users/lukas/.screenpipe/data/data/2026-05-28/1779980475360_m2.jpg...
|
PhpStorm
|
faVsco.js – console [PROD]
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.025930852,"top":0.019952115,"width":0.03856383,"height":0.025538707},"on_screen":true,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#12121 on JY-20963-fix-import-on-deleted-entity, menu","depth":5,"bounds":{"left":0.064494684,"top":0.019952115,"width":0.11569149,"height":0.025538707},"on_screen":true,"help_text":"Pull request #12121 exists for current branch JY-20963-fix-import-on-deleted-entity, but pull request details loading failed","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.85638297,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"ServiceTest","depth":6,"bounds":{"left":0.87167555,"top":0.019952115,"width":0.043882977,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'ServiceTest'","depth":6,"bounds":{"left":0.9155585,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'ServiceTest'","depth":6,"bounds":{"left":0.9268617,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9381649,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96609044,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9773936,"top":0.019952115,"width":0.011303191,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9886968,"top":0.019952115,"width":0.011303186,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5582423643801155883
|
-8994321436789994556
|
visual_change
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#12121 on JY-20963-fix-im Project: faVsco.js, menu
#12121 on JY-20963-fix-import-on-deleted-entity, menu
Start Listening for PHP Debug Connections
ServiceTest
Run 'ServiceTest'
Debug 'ServiceTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
rnpstomFV faVsco.|s ~View#12121 on JY-20963-fx-Coocproidet.gitignoreE .php-cs-fixer.cachephp.php-cs-fixer.dist.phpphp.phostorm.meta.php.phounit.result.cache.prettierignore.windsurfrulesphp ide.helper.phpwocneloermodcis.oharuisahM?CLAUDE.mdcomposer.isoncomposer.lockdependency-checker.ison# dev.isonEids.tx.Einfection.ison.distM-INSTALLmEM-INTERNAWEBHOOK-SETUP.md=¡iminny storaceWindow= custom.logSF [minny@localhost)Service.phpwolcnnedvilycimbato.ongUucriot Cimocwiccuccorolo.oh(C) ProspectCache.php xA console (EUTA console [STAGING"0182 436 ^ 4public function findByProspectIdentifier(IMwaken© package-lockjson=nhostan.neon.dis9B88389222=- phpstan-baseline.neondo nhnunitxmiRraw sal.cueru.soMERFADME.mesonar-project.propertiestestmi4 Uintitied Niaaram xmll110tsvetur.config.isM WERHOOK SILTSRING IMDI FUENTAT11?> 1 External Librariesv =9 Saratchas and Concolad114wenutaharn CassaheV AEUA console (EU]A DEAL RISKS (EU"ADI TEU"AEU (EUv A liminny@localhostA console fliminnv@localhost401 (iminny@localhostl4HS local fliminnwelocalhostASF (liminny@localhostlzoho-dev timinnwelocs noshA PRODconsole icreleA console 1 (pponl• 4OA$dbCache = Sthis->dbCache->findPro spect(Sconfiguration, [SidentifierType => $identi+789Sif Cenpty(array filter(SdbGache)))Sthis->sendDatadooStats(resuit: self:ALO0KUP RESULT MISS. Sconfiquratsion->oetProvit 788SdbCachef"contact'l = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef'contact*1713SdbCachef"lcad"1 = Sthis->staleRecondVaLidatones6iltenStale(Sdbbachef "lead"1. SconSer 714)if (SdbCache['contact') instanceof Contact) 1Saccount = Sahlachel'contact' o>ae-Accounto₴716Saheachelt'account"e SaccountSopportunity = Sthis->findüpportunityinContactRoles(Sconts aurats onSprofile.SdbCache ('contact')->getidoSopportunity = Sthis->staleRecordValidator->filterStale(Sopportunity, ScrmServiceif (Sopportunity instanceof Opportunity)Sthis->logger->info(*ProspectCache - Found opportunities by contact roles',17| 729=sopporcunzty-sgec.dID:SdbCache(['account') = Sopportunity->getAccounto} elseif (Saccount instanceof Account)Soppontunity = Sthis->act0poontunftyFno-Databasecontactld: Sdbfachef "contact" b>octido)usenidr suseriSahcachelt"onnortunity"n Saodortuntty?SdbCache['account'] = Sthis->staleRecordValidator->filterStale($dbCache['account*743Sdhachei'stane'ln Sahdache" "onnontuns ty" Do%oetStade OrE745-147* CTkPORTANT The keus euet ainaus he sn this eyoct onde.teAutdyimiamyOYSAAATARAselect * from teans shere d=15select * fron noles.SELECT"(onner)" ELSE"" END) AS user_idsa.*onen e Sonk coe necounteeJOIN users u on u.id = sa.sociable.idAhimtaseenosondentosndWHERE V.tean. id = 1117 and sa.provider = 'hubspot':111SELECT * FROM activities WHERE vuid to bin('8024fffb-2df7-4017-91f4-d9f896050248') = vuid; # 79933459 YESSELECT * FROM activities WHERE uuid to bin('[CREDIT_CARD]-9274-4f4da2a8185c') = uuid: # 80186192 NGCSIEAT& SO0M Ann Aonfinurstione wugpg id - 1957.SELECT * FROM teansWHERE id = 1117:select * from users where id = 30249select * fron playbooks where id = 5473:select * fron plavbook cateconies where 1d = 43783;select * fron olavbook cateconiles where olaybook 1d = 5473;select * fron con fields where 1d = 659242:select * fron con field values where com field 1d = 659242:SELECT * FROM con field data fo• JOTN con Sields & ON faloon field5id = f.ja•JOIN actávátaies a ON folactsivity 1d = a.dTHERE Actávity id = 79933459#AND f.ChSELECT * EPOM activity nessaoesselect *tnon teyt relave where crontod at > 12826-85-81%-select + fron activitiesuser_id IN (7160select + tnon usensnod coosted.at 12826-85-22* onder by id desc:13934. 1168)IMILselect * fron activity searches where user id = 31054;COlOAt & EAA SAtiUNtu CORnAh, &iI4ORg Whond dAtfuftu COnnAh iA TM (egeen eBOpa)SELECT * FROM opportunities WHERE uuid to_ bin('84a9cfad-2c87-4453-9e72-28aeb78ccf8d') = uuidinu co moy to.uli+0.Cecsdales Orceancworceoeionhtoreachsoartcnants as coarticioant// Line 144-150: If no enail natch, try DOMAIN matchleoryisrconsSrecords a Sthis=sfindCrmDomainRecords(crmService: ScrmService, ...):M d This nay call Salesforce::matchByDomain()Steo 7: Domain Search Triaaers Doportunity Syncnownthnrthnde.noooudt @hxacdcalwiithraatadonodrtunIl To get cocortunity details, it calls// CachedCreServiceDecorator or SalesforcelServicoScraservice-syncopportunttylScrProviderlo#/ Calls importOpportunity(Step 8: The Bug - ImportOpportunitvß) Creatos Temporary RecoreTaloh.a/users/ws/Toinny/aoo/apn/Services/cr/Salestorce/Seryice.ono:1430-1448private function inportOpportunity(ScreData): ?OpportunityM 8s. Restore tron trash Cline 1430)Sthis->restoreAnyTrashedEntity(Sthis=>config=>opportunities(), $creData["Id']):// 80. CREATE/UPDATE - 0Sopportunity = sthis→config-sopportunities)odeirerorelrer oreuderoseaiaisdoJCAt thie caaat CANMCtInTNAC VALTO CAO 17005257Mthoor ed artnsind the th ebns 1442Sthicastemethooortuntterffoldhata /Gembathr ComBlalde. ConnoctunttvesfaleI1 8A. MOM Celeta se nonín (ina 1444)Sthis-shandle0biectDeletion(Sopportunity, Scrnbata)I/ 8e. Return null (Lines 1446-1448)socoortuny-o"rashece)ff Mathod returne onll. puir.Ctan a. tha Checsdea nalatedtns oe to detitCANAMtMald Tosma 747:102 Aharell liTeg...
|
NULL
|
NULL
|
NULL
|
NULL
|