<?php
declare(strict_types=1);
namespace JanusHercules\IndeedCampaignManagement\Domain\Entity;
use App\Utility\DatabaseIdGenerator;
use App\Utility\DateTimeUtility;
use DateTime;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Exception;
use JanusHercules\IndeedCampaignManagement\Domain\Enum\FeedGenerationStatus;
#[ORM\Entity]
#[ORM\Table(name: 'icm_feed_generation_runs')]
class FeedGenerationRun
{
/**
* @throws Exception
*/
public function __construct()
{
$this->createdAt = DateTimeUtility::createDateTimeUtc();
$this->status = FeedGenerationStatus::STARTED;
$this->publishing_plan_simulation_time = DateTimeUtility::createDateTimeUtc();
}
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: DatabaseIdGenerator::class)]
#[ORM\Column(type: Types::GUID, unique: true)]
private ?string $id = null;
public function getId(): ?string
{
return $this->id;
}
#[ORM\Column(type: Types::DATETIME_MUTABLE, nullable: false)]
private DateTime $createdAt;
public function getCreatedAt(): DateTime
{
return $this->createdAt;
}
#[ORM\Column(type: Types::STRING, enumType: FeedGenerationStatus::class)]
private FeedGenerationStatus $status;
public function getStatus(): FeedGenerationStatus
{
return $this->status;
}
public function setStatus(FeedGenerationStatus $status): void
{
$this->status = $status;
}
#[ORM\Column(name: 'publishing_plan_simulation_time', type: Types::DATETIME_MUTABLE)]
private DateTime $publishing_plan_simulation_time;
public function getPublishingPlanSimulationTime(): DateTime
{
return $this->publishing_plan_simulation_time;
}
public function setPublishingPlanSimulationTime(DateTime $publishing_plan_simulation_time): void
{
$this->publishing_plan_simulation_time = $publishing_plan_simulation_time;
}
#[ORM\Column(name: 'publishing_plan_total_entries', type: Types::INTEGER, nullable: false, options: ['default' => 0])]
private int $publishing_plan_total_entries = 0;
public function getPublishingPlanTotalEntries(): int
{
return $this->publishing_plan_total_entries;
}
public function setPublishingPlanTotalEntries(int $publishing_plan_total_entries): void
{
$this->publishing_plan_total_entries = $publishing_plan_total_entries;
}
#[ORM\Column(name: 'publishing_plan_publishable_entries', type: Types::INTEGER, nullable: false, options: ['default' => 0])]
private int $publishing_plan_publishable_entries = 0;
public function getPublishingPlanPublishableEntries(): int
{
return $this->publishing_plan_publishable_entries;
}
public function setPublishingPlanPublishableEntries(int $publishing_plan_publishable_entries): void
{
$this->publishing_plan_publishable_entries = $publishing_plan_publishable_entries;
}
#[ORM\Column(name: 'publishing_plan_blocked_entries', type: Types::INTEGER, nullable: false, options: ['default' => 0])]
private int $publishing_plan_blocked_entries = 0;
public function getPublishingPlanBlockedEntries(): int
{
return $this->publishing_plan_blocked_entries;
}
public function setPublishingPlanBlockedEntries(int $publishing_plan_blocked_entries): void
{
$this->publishing_plan_blocked_entries = $publishing_plan_blocked_entries;
}
#[ORM\Column(name: 'number_of_items_published', type: Types::INTEGER, nullable: false, options: ['default' => 0])]
private int $numberOfItemsPublished = 0;
public function getNumberOfItemsPublished(): int
{
return $this->numberOfItemsPublished;
}
public function setNumberOfItemsPublished(int $numberOfItemsPublished): void
{
$this->numberOfItemsPublished = $numberOfItemsPublished;
}
#[ORM\Column(name: 'error_message', type: Types::TEXT, nullable: true)]
private ?string $errorMessage = null;
public function getErrorMessage(): ?string
{
return $this->errorMessage;
}
public function setErrorMessage(?string $errorMessage): void
{
$this->errorMessage = $errorMessage;
}
#[ORM\Column(name: 's3_url', type: Types::STRING, nullable: true)]
private ?string $s3Url = null;
public function getS3Url(): ?string
{
return $this->s3Url;
}
public function setS3Url(?string $s3Url): void
{
$this->s3Url = $s3Url;
}
}