<?php
namespace App\Entity;
use App\Utility\DateTimeUtility;
use App\Utility\ReflectionHelper;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Exception;
use ValueError;
/**
* Platform Event: track what happens on the platform in order to decide how platform behavior should change.
*
* While Business-, Application-, and Webrequest-Events are tracked for statistical use in the Data Warehouse, Platform
* Events are collected to keep track of what happens on the platform that has an impact on future software behavior.
* Example: if a warning mail about something is sent, it should not be sent again the next day. In comparison to UsageEvents, it is
* not connected to a user and does not decide user-individual software behavior.
*
* @ORM\Entity()
*
* @ORM\Table(
* name="platform_events",
* indexes={
*
* @ORM\Index(name="event_type_additional_data_idx", columns={"event_type", "additional_data"}),
* @ORM\Index(name="event_type_occured_at_idx", columns={"event_type", "occured_at"}),
* @ORM\Index(name="event_type_additional_data_occurred_at_idx", columns={"event_type", "additional_data", "occured_at"}),
* }
* )
*/
class PlatformEvent
{
public const EVENT_TYPE_QUOTA_WARNING_MAIL_WAS_SENT = 0;
public const EVENT_TYPE_GOOGLE_INDEXING_WAS_REQUESTED_FOR_RECURRENT_JOB = 1;
public const EVENT_TYPE_GOOGLE_INDEX_DELETE_WAS_REQUESTED_FOR_RECURRENT_JOB = 2;
public const EVENT_TYPE_RECURRENT_JOB_WAS_CHECKED_AT_JOBLIFT = 3;
public const EVENT_TYPE_RECURRENT_JOB_WAS_CHECKED_AT_TALENTCOM = 4;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_A_FEED = 5;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBRAPIDO_A_FEED = 6;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_KIMETA_A_FEED = 7;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_A_FEED = 8;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_B_FEED = 9;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBRAPIDO_B_FEED = 10;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_KIMETA_B_FEED = 11;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_B_FEED = 12;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_C_FEED = 13;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBRAPIDO_C_FEED = 14;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_KIMETA_C_FEED = 15;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_C_FEED = 16;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_INDEED_FEED = 17;
public const EVENT_TYPE_USER_CLICKED_ON_RECURRENT_JOB_ON_INDEED_SITE = 18;
// LEGACY - see event type 38
public const EVENT_TYPE_FORWARDED_TO_XING_RECURRENT_JOB = 19;
// LEGACY - see event type 39
public const EVENT_TYPE_INFORMED_PM_ABOUT_XING_EVENT = 20;
public const EVENT_TYPE_RECURRENT_JOB_WAS_CHECKED_AT_STELLENONLINE = 21;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_A_FEED = 22;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_B_FEED = 23;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_C_FEED = 24;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBRAPIDO_D_FEED = 25;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_D_FEED = 26;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_D_FEED = 27;
public const EVENT_TYPE_RECURRENT_JOB_WAS_ADDED_FOR_AGENTUR_FUER_ARBEIT = 28;
public const EVENT_TYPE_RECURRENT_JOB_WAS_DELETED_FOR_AGENTUR_FUER_ARBEIT = 29;
public const EVENT_TYPE_AGENTUR_FUER_ARBEIT_FILE_UPLOAD_NAME_CREATED = 30;
public const EVENT_TYPE_AGENTUR_FUER_ARBEIT_RESPONSE_FILE_WAS_CHECKED = 31;
/* Deprecated - we now use the RecurrentJobAfaCategorizationRequest entity for this */
public const EVENT_TYPE_RECURRENT_JOB_WAS_ADDED_FOR_AGENTUR_FUER_ARBEIT_CATEGORIZATION = 32;
public const EVENT_TYPE_RECURRENT_JOB_WAS_CATEGORIZED_FOR_AGENTUR_FUER_ARBEIT = 33;
public const EVENT_TYPE_RECURRENT_JOB_WAS_PERMANENTLY_REMOVED_FOR_AGENTUR_FUER_ARBEIT = 34;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_E_FEED = 35;
public const EVENT_TYPE_RECURRENT_JOB_NEEDED_TO_BE_SKIPPED_IN_EBAY_FEED = 36;
public const EVENT_TYPE_RECURRENT_JOB_WAS_REMOVED_BY_AVAILABILITY_CHECKER = 37;
public const EVENT_TYPE_FORWARDED_TO_CUSTOMER_WITH_CLICK_BASED_BILLING_RECURRENT_JOB = 38;
public const EVENT_TYPE_INFORMED_PM_ABOUT_CUSTOMER_WITH_CLICK_BASED_BILLING_EVENT = 39;
public const EVENT_TYPE_RECURRENT_JOB_WAS_DEACTIVATED_BECAUSE_OF_QUOTA = 40;
public const EVENT_TYPE_RECURRENT_JOB_WAS_DEACTIVATED_BECAUSE_OF_MAX_CLICKS_REACHED = 41;
public const EVENT_TYPE_RECURRENT_JOB_WAS_PUBLISHED = 42;
public const EVENT_TYPE_INTEGRATED_EXTERNAL_PARTNER_CUSTOMER_PREMIUM_RADAR_WAS_CREATED_FOR_CUSTOMER = 43;
public const EVENT_TYPE_NEW_JOB_ADDED_TO_EBAY_FEED = 44;
public const EVENT_TYPE_EBAY_FEED_WARNING_MAIL_SENT = 45;
public const EVENT_TYPE_INTEGRATED_EXTERNAL_PARTNER_CUSTOMER_PREMIUM_RADAR_WHATSAPP_MESSAGE_WAS_CREATED = 46;
public const EVENT_TYPE_INTEGRATED_EXTERNAL_PARTNER_CUSTOMER_PREMIUM_RADAR_DIRECT_EMAIL_WAS_CREATED = 47;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_A_FEED = 48;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_B_FEED = 49;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_C_FEED = 50;
public const EVENT_TYPE_MASS_MAILING_WHATSAPP_MAIL_SENT = 51;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_D_FEED = 52;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_E_FEED = 53;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_F_FEED = 54;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBIJOBA_A_FEED = 55;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBIJOBA_B_FEED = 56;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBIJOBA_C_FEED = 57;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBIJOBA_D_FEED = 58;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBIJOBA_E_FEED = 59;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBIJOBA_F_FEED = 60;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_WHATJOBS_A_FEED = 61;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_WHATJOBS_B_FEED = 62;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_WHATJOBS_C_FEED = 63;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_WHATJOBS_D_FEED = 64;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_WHATJOBS_E_FEED = 65;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_WHATJOBS_F_FEED = 66;
public const EVENT_TYPE_MASS_MAILING_FOCUS_SIEGEL_MAIL_SENT = 67;
public const EVENT_TYPE_DEACTIVATED_PREMIUM_RADAR_BECAUSE_OF_CLICK_BUDGET = 68;
public const EVENT_TYPE_DEACTIVATED_PREMIUM_RADAR_BECAUSE_OF_FEED_MANAGEMENT = 69;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_E_FEED = 70;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_F_FEED = 71;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_TALENTCOM_G_FEED = 72;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_F_FEED = 73;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_G_FEED = 74;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_H_FEED = 75;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_I_FEED = 76;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_J_FEED = 77;
public const EVENT_TYPE_LEAD_CONVERSION_RADAR_WHATSAPP_MESSAGE_WAS_CREATED = 78;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_K_FEED = 79;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOOBLE_A_FEED = 80;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOOBLE_B_FEED = 81;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOOBLE_C_FEED = 82;
public const EVENT_TYPE_SENT_REQUEST_TO_API_TO_INFORM_ABOUT_EXTENDED_APPLICATION = 83;
public const EVENT_TYPE_INFORMED_ACCOUNTING_ABOUT_NEW_BILLED_PARTY_EXTERNAL_PARTNER_GOHIRING = 84;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_L_FEED = 85;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOOBLE_D_FEED = 86;
public const EVENT_TYPE_LEAD_CONVERSION_RADAR_WHATSAPP_MESSAGE_WAS_CREATED_FOR_USER_WITH_MEMBERSHIP = 87;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_G_FEED = 88;
public const EVENT_TYPE_EXTERNAL_JOB_AVAILABILITY_CHECK_WAS_POSITIVE = 89;
public const EVENT_TYPE_EXTERNAL_JOB_AVAILABILITY_CHECK_WAS_NEGATIVE = 90;
public const EVENT_TYPE_POTENTIAL_CUSTOMER_BUSINESS_INFO_CRAWLER_CONTENT_PARSER_RESULT_STATUS_FORBIDDEN = 91;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_M_FEED = 92;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_JOBLIFT_M_FEED = 93;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STELLENONLINE_M_FEED = 94;
public const EVENT_TYPE_INFORMING_GOHIRING_ABOUT_PUBLISHED_RECURRENT_JOB_FAILED = 95;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_MEINESTADT_N_FEED = 96;
public const EVENT_TYPE_DPDHL_RECURRENT_JOB_HAS_BEEN_CREATED = 97;
public const EVENT_TYPE_INFO_MAIL_ABOUT_REACHING_DPDHL_RECURRENT_JOBS_THRESHOLD_HAS_BEEN_SENT = 98;
public const EVENT_TYPE_LOGGED_ABOUT_INFORMING_GOHIRING_ABOUT_PUBLISHED_RECURRENT_JOB_FAILED = 99;
public const EVENT_TYPE_LIMIT_EXHAUSTED_WARNING_MAIL_WAS_SENT = 100;
public const EVENT_TYPE_AI_RESPONSE_ERRONEOUS_MAIL_WAS_SENT = 101;
public const EVENT_TYPE_INFORMED_ACCOUNTING_ABOUT_NEW_BILLED_PARTY_EXTERNAL_PARTNER_VONQ = 102;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STEPSTONE_B_FEED = 103;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STEPSTONE_A_FEED = 104;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_STEPSTONE_C_FEED = 105;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_PERSOMATCH_B_FEED = 103;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_PERSOMATCH_A_FEED = 104;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_PERSOMATCH_C_FEED = 105;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_XING_A_FEED = 106;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_XING_B_FEED = 107;
public const EVENT_TYPE_FORWARDED_TO_RECURRENT_JOB_FROM_XING_C_FEED = 108;
// unused Event Id 102
public const EVENT_TYPE_ASK_USER_FOR_GOOGLE_RATINGS_WHATSAPP_MESSAGE_WAS_SENT = 103;
/**
* @throws Exception
*/
public function __construct(
int $eventType,
?string $additionalData,
?RecurrentJob $recurrentJob = null,
?string $sessionId = null,
bool $consideredDuplicate = false,
) {
if (!ReflectionHelper::hasConstWithValue(
self::class,
'EVENT_TYPE_',
$eventType
)) {
throw new ValueError("Unknown event type '$eventType'.");
}
$this->eventType = $eventType;
$this->additionalData = $additionalData;
$this->sessionId = $sessionId;
$this->consideredDuplicate = $consideredDuplicate;
$this->occuredAt = DateTimeUtility::createDateTimeUtc();
if (!is_null($recurrentJob)) {
$this->recurrentJobIdForDuplicationChecking = $recurrentJob->getId();
}
}
/**
* @ORM\GeneratedValue(strategy="CUSTOM")
*
* @ORM\CustomIdGenerator(class="App\Utility\DatabaseIdGenerator")
*
* @ORM\Column(name="id", type="guid")
*
* @ORM\Id
*/
private string $id;
public function getId(): string
{
return $this->id;
}
/**
* @ORM\Column(name="event_type", type="smallint", nullable=false)
*/
private int $eventType;
public function getEventType(): int
{
return $this->eventType;
}
/**
* @ORM\Column(name="occured_at", type="datetime", nullable=false)
*/
private DateTime $occuredAt;
public function setOccuredAt(DateTime $occuredAt): void
{
$this->occuredAt = $occuredAt;
}
public function getOccuredAt(): DateTime
{
return $this->occuredAt;
}
/**
* @ORM\Column(name="additional_data", type="string", length=512, nullable=true)
*/
private ?string $additionalData;
/**
* @throws Exception
*/
public function setAdditionalData(?string $additionalData = null): void
{
if (!is_null($additionalData)) {
$additionalData = mb_substr($additionalData, 0, 512);
if (is_null(json_decode($additionalData))) {
throw new Exception('additionalData must be valid JSON');
}
}
$this->additionalData = $additionalData;
}
public function getAdditionalData(): ?string
{
return $this->additionalData;
}
/**
* @ORM\Column(name="is_probably_bot_request", type="boolean", nullable=true)
*/
private ?bool $isProbablyBotRequest = null;
public function getIsProbablyBotRequest(): ?bool
{
return $this->isProbablyBotRequest;
}
public function setIsProbablyBotRequest(?bool $isProbablyBotRequest): void
{
$this->isProbablyBotRequest = $isProbablyBotRequest;
}
/**
* @ORM\Column(name="considered_duplicate", type="boolean", nullable=false)
*/
public bool $consideredDuplicate = false;
public function isConsideredDuplicate(): bool
{
return $this->consideredDuplicate;
}
public function setConsideredDuplicate(bool $consideredDuplicate): void
{
$this->consideredDuplicate = $consideredDuplicate;
}
/**
* @ORM\Column(name="session_id", type="string", nullable=true)
*/
public ?string $sessionId;
public function isSessionId(): bool
{
return $this->sessionId;
}
public function setSessionId(bool $sessionId): void
{
$this->sessionId = $sessionId;
}
/*
* 'recurrent_job_id_for_duplication_checking' field added for CPC duplication checks.
* Only used for EVENT_TYPE_FORWARDED_TO_CUSTOMER_WITH_CLICK_BASED_BILLING_RECURRENT_JOB.
* Not to be confused with 'recurrentJobId' in additionalData (used by some other event types)
*/
/**
* @ORM\Column(name="recurrent_job_id_for_duplication_checking", type="string", nullable=true)
*/
public ?string $recurrentJobIdForDuplicationChecking = null;
public function getRecurrentJobIdForDuplicationChecking(): ?string
{
return $this->recurrentJobIdForDuplicationChecking;
}
public function setRecurrentJobIdForDuplicationChecking(?string $recurrentJobId): void
{
$this->recurrentJobIdForDuplicationChecking = $recurrentJobId;
}
}