<?php
namespace App\Domain\Entity\StatisticLog;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Post;
use ApiPlatform\Metadata\Put;
use App\Application\Controller\Api\Statistic\SearchAction;
use App\Application\Dto\Statistic\StatisticSearchOutput;
use App\Domain\Entity\Behavior\Identifiable;
use Gedmo\Timestampable\Traits\Timestampable;
use Gedmo\SoftDeleteable\Traits\SoftDeleteable;
/**
* Class DailyStatistic
*
* @package App\Domain\Entity\StatisticLog
*/
#[ApiResource(
operations: [
new GetCollection(
uriTemplate: '/daily_statistics/elastic',
controller: SearchAction::class,
output: StatisticSearchOutput::class,
name: 'elastic_stats',
),
new GetCollection(filters: ['dailyStatistic.date_filter', 'dailyStatistic.search_filter']),
],
normalizationContext: ['groups' => ['daily_stats_read']],
)]
class DailyStatistic
{
use Identifiable;
use Timestampable;
use SoftDeleteable;
public \DateTimeInterface $date;
public int $totalRead = 0;
public int $totalReadList = 0;
public int $totalClick = 0;
public string $entity;
public ?int $entityId = null;
public ?array $data = null;
public ?bool $isEntityPro = false;
public ?string $name;
public function __construct(
\DateTimeInterface $date,
string $entity,
?int $entityId = null,
?string $name = null,
?bool $isEntityPro = null,
?array $data = null
) {
$this->date = $date;
$this->entity = $entity;
$this->entityId = $entityId;
$this->name = $name;
$this->isEntityPro = $isEntityPro;
$this->data = $data;
}
public function getDate(): \DateTimeInterface
{
return $this->date;
}
public function setDate(\DateTimeInterface $date): self
{
$this->date = $date;
return $this;
}
public function getTotalRead(): int
{
return $this->totalRead;
}
public function setTotalRead(int $totalRead): self
{
$this->totalRead = $totalRead;
return $this;
}
public function getTotalReadList(): int
{
return $this->totalReadList;
}
public function setTotalReadList(int $totalReadList): self
{
$this->totalReadList = $totalReadList;
return $this;
}
public function getTotalClick(): int
{
return $this->totalClick;
}
public function setTotalClick(int $totalClick): self
{
$this->totalClick = $totalClick;
return $this;
}
public function getEntity(): string
{
return $this->entity;
}
public function setEntity(string $entity): self
{
$this->entity = $entity;
return $this;
}
public function getEntityId(): ?int
{
return $this->entityId;
}
public function setEntityId(?int $entityId): self
{
$this->entityId = $entityId;
return $this;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getData(): ?array
{
return $this->data;
}
public function setData(?array $data): self
{
$this->data = $data;
return $this;
}
public function incrementRead(int $amount = 1): self
{
$this->totalRead += $amount;
return $this;
}
public function incrementReadList(int $amount = 1): self
{
$this->totalReadList += $amount;
return $this;
}
public function incrementClick(int $amount = 1): self
{
$this->totalClick += $amount;
return $this;
}
public function isEntityPro(): ?bool
{
return $this->isEntityPro;
}
public function setIsEntityPro(?bool $isEntityPro): self
{
$this->isEntityPro = $isEntityPro;
return $this;
}
public function isElasticSearchPublishable(): bool
{
return $this->isEntityPro;
}
}