<?php
namespace App\Entity;
use DateTimeInterface;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* @ORM\Entity(repositoryClass="App\Repository\LogRepository")
* @ORM\Table(
* name="log",
* schema="perseo",
* indexes={
* @ORM\Index(name="idx_log_user", columns={"user"}),
* @ORM\Index(name="idx_log_created_at", columns={"created_at"}),
* @ORM\Index(name="idx_log_method", columns={"method"}),
* @ORM\Index(name="idx_log_remote_addr", columns={"remote_addr"}),
* @ORM\Index(name="idx_log_uri", columns={"uri"}, options={"lengths": {255}}),
* @ORM\Index(name="idx_log_user_created", columns={"user", "created_at"})
* }
* )
* @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false, hardDelete=true)
*
* Performance notes:
* - No N+1 queries: This entity has no relationships, all data is denormalized
* - Indexes added for common filters: user, created_at, method, remote_addr, uri
* - Composite index (user, created_at) optimizes user activity reports
* - URI index limited to 255 chars to avoid key length issues
* - JSON fields (roles, headers, request, query) are not indexed (not searchable)
*/
class Log
{
/**
* @ORM\Id
* @ORM\Column(type="bigint", options={"unsigned":true})
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $user;
/**
* @ORM\Column(type="json", nullable=true)
*/
private $roles;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $webservice;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $uri;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $method;
/**
* @ORM\Column(type="json", nullable=true)
*/
private $headers;
/**
* @ORM\Column(type="json", nullable=true)
*/
private $request;
/**
* @ORM\Column(type="json", nullable=true)
*/
private $query;
/**
* @ORM\Column(type="string", length=2000, nullable=true)
*/
private $referer;
/**
* @ORM\Column(type="string", nullable=true, name="user_agent")
*/
private $userAgent;
/**
* @ORM\Column(type="string", nullable=true, name="server_name")
*/
private $serverName;
/**
* @ORM\Column(type="string", nullable=true, name="server_addr")
*/
private $serverAddr;
/**
* @ORM\Column(type="string", nullable=true, name="remote_addr")
*/
private $remoteAddr;
/**
* @ORM\Column(type="datetime", nullable=true, name="deleted_at")
*/
private $deletedAt;
/**
* @ORM\Column(type="datetime", nullable=false, name="updated_at", options={"default":"2022-01-01 00:00:00"})
* @Gedmo\Timestampable(on="update")
*/
private $updatedAt;
/**
* @ORM\Column(type="datetime", nullable=false, name="created_at", options={"default":"2022-01-01 00:00:00"})
* @Gedmo\Timestampable(on="create")
*/
private $createdAt;
public function getId(): ?string
{
return $this->id;
}
public function getUser(): ?string
{
return $this->user;
}
public function setUser(?string $user): static
{
$this->user = $user;
return $this;
}
public function getRoles(): ?array
{
return $this->roles;
}
public function setRoles(?array $roles): static
{
$this->roles = $roles;
return $this;
}
public function getWebservice(): ?string
{
return $this->webservice;
}
public function setWebservice(?string $webservice): static
{
$this->webservice = $webservice;
return $this;
}
public function getUri(): ?string
{
return $this->uri;
}
public function setUri(?string $uri): static
{
$this->uri = $uri;
return $this;
}
public function getMethod(): ?string
{
return $this->method;
}
public function setMethod(?string $method): static
{
$this->method = $method;
return $this;
}
public function getHeaders(): ?array
{
return $this->headers;
}
public function setHeaders(?array $headers): static
{
$this->headers = $headers;
return $this;
}
public function getRequest(): ?array
{
return $this->request;
}
public function setRequest(?array $request): static
{
$this->request = $request;
return $this;
}
public function getQuery(): ?array
{
return $this->query;
}
public function setQuery(?array $query): static
{
$this->query = $query;
return $this;
}
public function getReferer(): ?string
{
return $this->referer;
}
public function setReferer(?string $referer): static
{
$this->referer = $referer;
return $this;
}
public function getUserAgent(): ?string
{
return $this->userAgent;
}
public function setUserAgent(?string $userAgent): static
{
$this->userAgent = $userAgent;
return $this;
}
public function getServerName(): ?string
{
return $this->serverName;
}
public function setServerName(?string $serverName): static
{
$this->serverName = $serverName;
return $this;
}
public function getServerAddr(): ?string
{
return $this->serverAddr;
}
public function setServerAddr(?string $serverAddr): static
{
$this->serverAddr = $serverAddr;
return $this;
}
public function getRemoteAddr(): ?string
{
return $this->remoteAddr;
}
public function setRemoteAddr(?string $remoteAddr): static
{
$this->remoteAddr = $remoteAddr;
return $this;
}
public function getDeletedAt(): ?DateTimeInterface
{
return $this->deletedAt;
}
public function setDeletedAt(?DateTimeInterface $deletedAt): static
{
$this->deletedAt = $deletedAt;
return $this;
}
public function getUpdatedAt(): ?DateTimeInterface
{
return $this->updatedAt;
}
public function setUpdatedAt(DateTimeInterface $updatedAt): static
{
$this->updatedAt = $updatedAt;
return $this;
}
public function getCreatedAt(): ?DateTimeInterface
{
return $this->createdAt;
}
public function setCreatedAt(DateTimeInterface $createdAt): static
{
$this->createdAt = $createdAt;
return $this;
}
public function getCreatedAtStringFecha(): ?string
{
return $this->getCreatedAt()?->format('d/m/Y');
}
public function getCreatedAtStringHora(): ?string
{
return $this->getCreatedAt()?->format('H:i:s');
}
}