<?php
declare(strict_types=1);
namespace App\Domains\Word\Domain\Entity;
use App\Domains\Word\Domain\Enum\Language;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
#[ORM\Table(name: 'word')]
class Word
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: Types::INTEGER)]
private ?int $id = null;
#[ORM\Column(type: Types::STRING, length: 255)]
private string $word;
#[ORM\Column(type: Types::STRING, length: 255)]
private string $translation;
#[ORM\Column(type: Types::TEXT)]
private string $meaning;
#[ORM\Column(name: '`usage`', type: Types::TEXT)]
private string $usage;
#[ORM\Column(type: Types::TEXT)]
private string|null $synonyms;
#[ORM\Column(type: Types::TEXT)]
private string|null $examples;
#[ORM\Column(type: Types::STRING, enumType: Language::class)]
private Language $languageFrom;
#[ORM\Column(type: Types::STRING, enumType: Language::class)]
private Language $languageTo;
#[ORM\Column(name: 'created_at', type: 'datetime_immutable')]
private \DateTimeImmutable $createdAt;
#[ORM\Column(type: Types::STRING, length: 255, nullable: true)]
private string|null $imageFilename = null;
public function __construct(
string $word,
string $translation,
string $meaning,
string $usage,
array $synonyms,
array $examples,
Language $languageFrom,
Language $languageTo,
string|null $imageFilename = null
) {
$this->word = $word;
$this->translation = $translation;
$this->meaning = $meaning;
$this->usage = $usage;
$this->synonyms = json_encode($synonyms);
$this->examples = json_encode($examples);
$this->languageFrom = $languageFrom;
$this->languageTo = $languageTo;
$this->imageFilename = $imageFilename;
$this->createdAt = new \DateTimeImmutable();
}
public function getId(): ?int
{
return $this->id;
}
public function getWord(): string
{
return $this->word;
}
public function getTranslation(): string
{
return $this->translation;
}
public function getMeaning(): string
{
return $this->meaning;
}
public function getUsage(): string
{
return $this->usage;
}
public function getSynonyms(): array
{
return $this->synonyms ? json_decode($this->synonyms, true) : [];
}
public function getExamples(): array
{
return $this->examples ? json_decode($this->examples, true) : [];
}
public function getLanguageFrom(): Language
{
return $this->languageFrom;
}
public function getLanguageTo(): Language
{
return $this->languageTo;
}
public function getCreatedAt(): \DateTimeImmutable
{
return $this->createdAt;
}
public function getImageFilename(): string|null
{
return $this->imageFilename;
}
public function setImageFilename(string|null $imageFilename): void
{
$this->imageFilename = $imageFilename;
}
}