<?php
namespace App\Entity;
use App\Utility\GuidUtility;
use App\Utility\ReflectionHelper;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Exception;
/**
* @ORM\Entity
*
* @ORM\Table(
* name="searchterm_entered_events",
* indexes={
*
* @ORM\Index(name="occured_at_idx", columns={"occured_at"})
* }
* )
*/
class SearchtermEnteredEvent
{
public const CONTEXT_JOBSEEKER_REGISTRATION = 0;
public const CONTEXT_JOBOFFERER_REGISTRATION = 1;
public const CONTEXT_WANTED_JOB_CREATION = 2;
public const CONTEXT_RECURRENT_JOB_CREATION = 3;
public const CONTEXT_WANTED_JOBS_SEARCH_LOGGED_IN = 4;
public const CONTEXT_WANTED_JOBS_SEARCH_ANONYMOUS = 5;
public const CONTEXT_RECURRENT_JOBS_SEARCH_LOGGED_IN = 6;
public const CONTEXT_RECURRENT_JOBS_SEARCH_ANONYMOUS = 7;
/**
* @throws Exception
*/
public function __construct(
DateTime $occuredAt,
string $searchterm,
int $context
) {
$this->occuredAt = $occuredAt;
$this->searchterm = $searchterm;
if (!ReflectionHelper::hasConstWithValue(self::class, 'CONTEXT_', $context)) {
throw new Exception('Value ' . $context . ' not allowed for $context.');
}
$this->context = $context;
}
/**
* @ORM\GeneratedValue(strategy="CUSTOM")
*
* @ORM\CustomIdGenerator(class="App\Utility\DatabaseIdGenerator")
*
* @ORM\Column(name="id", type="guid")
*
* @ORM\Id
*/
private ?string $id;
public function setId(string $id): void
{
GuidUtility::validOrThrow($id);
$this->id = $id;
}
public function getId(): ?string
{
return $this->id;
}
/**
* @ORM\Column(name="occured_at", type="datetime", nullable=false)
*/
private DateTime $occuredAt;
public function getOccuredAt(): DateTime
{
return $this->occuredAt;
}
/**
* @ORM\Column(name="searchterm", type="string", nullable=false)
*/
private string $searchterm;
public function getSearchterm(): string
{
return $this->searchterm;
}
/**
* @var array|string[]|null
*
* @ORM\Column(name="additional_searchterms", type="array", nullable=true)
*/
private ?array $additionalSearchterms = null;
public function setAdditionalSearchterms(?array $additionalSearchterms = null): void
{
$this->additionalSearchterms = $additionalSearchterms;
}
/**
* @return array|string[]|null
*/
public function getAdditionalSearchterms(): ?array
{
return $this->additionalSearchterms;
}
/**
* @ORM\Column(name="context", type="integer", nullable=false)
*/
private int $context;
public function getContext(): int
{
return $this->context;
}
/**
* @ORM\Column(name="number_of_occupational_fields", type="integer", nullable=true)
*/
private ?int $numberOfOccupationalFields = null;
public function setNumberOfOccupationalFields(?int $numberOfOccupationalFields = null): void
{
$this->numberOfOccupationalFields = $numberOfOccupationalFields;
}
public function getNumberOfOccupationalFields(): ?int
{
return $this->numberOfOccupationalFields;
}
/**
* @ORM\Column(name="number_of_relevant_occupational_fields", type="integer", nullable=true)
*/
private ?int $numberOfRelevantOccupationalFields = null;
public function setNumberOfRelevantOccupationalFields(?int $numberOfRelevantOccupationalFields = null): void
{
$this->numberOfRelevantOccupationalFields = $numberOfRelevantOccupationalFields;
}
public function getNumberOfRelevantOccupationalFields(): ?int
{
return $this->numberOfRelevantOccupationalFields;
}
/**
* @ORM\Column(name="number_of_relevant_professions", type="integer", nullable=true)
*/
private ?int $numberOfRelevantProfessions = null;
public function setNumberOfRelevantProfessions(?int $numberOfRelevantProfessions = null): void
{
$this->numberOfRelevantProfessions = $numberOfRelevantProfessions;
}
public function getNumberOfRelevantProfessions(): ?int
{
return $this->numberOfRelevantProfessions;
}
/**
* @ORM\Column(name="number_of_hits_in_search", type="integer", nullable=true)
*/
private ?int $numberOfHitsInSearch = null;
public function setNumberOfHitsInSearch(?int $numberOfHitsInSearch = null): void
{
$this->numberOfHitsInSearch = $numberOfHitsInSearch;
}
public function getNumberOfHitsInSearch(): ?int
{
return $this->numberOfHitsInSearch;
}
/**
* @ORM\Column(name="number_of_hits_per_block", type="text", length=4096, nullable=true)
*/
private ?string $numberOfHitsPerBlock = null;
public function getNumberOfHitsPerBlock(): ?string
{
return $this->numberOfHitsPerBlock;
}
/** @throws Exception */
public function setNumberOfHitsPerBlock(?string $numberOfHitsPerBlock): void
{
if (!is_null($numberOfHitsPerBlock)) {
if (is_null(json_decode($numberOfHitsPerBlock))) {
throw new Exception('additionalData must be valid JSON');
}
}
$this->numberOfHitsPerBlock = $numberOfHitsPerBlock;
}
/**
* @ORM\Column(name="affected_user_id", type="guid", nullable=true)
*
* We don't make this a foreign key on purpose, we don't need the integrity and don't want to delete event data
* if a user is deleted.
*/
private ?string $affectedUserId = null;
public function setAffectedUserId(?string $userId = null): void
{
GuidUtility::validOrThrow($userId, true);
$this->affectedUserId = $userId;
}
public function getAffectedUserId(): ?string
{
return $this->affectedUserId;
}
/**
* @ORM\Column(name="affected_user_is_jobofferer", type="boolean", nullable=false)
*/
private bool $affectedUserIsJobofferer = false;
public function setAffectedUserIsJobofferer(bool $affectedUserIsJobofferer): void
{
$this->affectedUserIsJobofferer = $affectedUserIsJobofferer;
}
public function getAffectedUserIsJobofferer(): bool
{
return $this->affectedUserIsJobofferer;
}
/**
* @ORM\Column(name="affected_user_is_jobseeker", type="boolean", nullable=false)
*/
private bool $affectedUserIsJobseeker = false;
public function setAffectedUserIsJobseeker(bool $affectedUserIsJobseeker): void
{
$this->affectedUserIsJobseeker = $affectedUserIsJobseeker;
}
public function getAffectedUserIsJobseeker(): bool
{
return $this->affectedUserIsJobseeker;
}
/**
* @ORM\Column(name="affected_user_registered_at", type="datetime", nullable=true)
*
* In order to show statistics related to the cohorte of all users registered on day X, we need this field
*
* E.g. "from all user registered on 2018-04-07, how many ran into error X?"
*/
private ?DateTime $affectedUserRegisteredAt = null;
public function setAffectedUserRegisteredAt(?DateTime $affectedUserRegisteredAt = null): void
{
$this->affectedUserRegisteredAt = $affectedUserRegisteredAt;
}
public function getAffectedUserRegisteredAt(): ?DateTime
{
return $this->affectedUserRegisteredAt;
}
/**
* @ORM\Column(name="admin_user_id", type="guid", nullable=true)
*
* We don't make this a foreign key on purpose, we don't need the integrity and don't want to delete event data
* if a user is deleted.
*/
private ?string $adminUserId = null;
public function setAdminUserId(?string $adminUserId = null): void
{
GuidUtility::validOrThrow($adminUserId, true);
$this->adminUserId = $adminUserId;
}
public function getAdminUserId(): ?string
{
return $this->adminUserId;
}
/**
* @ORM\Column(name="request_id", type="text", length=256, nullable=true)
*/
private ?string $requestId = null;
public function setRequestId(?string $requestId = null): void
{
$this->requestId = $requestId;
}
public function getRequestId(): ?string
{
return $this->requestId;
}
/**
* @ORM\Column(name="session_id", type="text", length=256, nullable=true)
*/
private ?string $sessionId = null;
public function setSessionId(?string $sessionId = null): void
{
$this->sessionId = $sessionId;
}
public function getSessionId(): ?string
{
return $this->sessionId;
}
/**
* @ORM\Column(name="client_id", type="text", length=64, nullable=true)
*/
private ?string $clientId = null;
public function setClientId(?string $clientId = null): void
{
$this->clientId = $clientId;
}
public function getClientId(): ?string
{
return $this->clientId;
}
/**
* @ORM\Column(name="is_probably_bot_request", type="boolean", nullable=true)
*/
private ?bool $isProbablyBotRequest = null;
public function setIsProbablyBotRequest(?bool $isProbablyBotRequest): void
{
$this->isProbablyBotRequest = $isProbablyBotRequest;
}
}