ogcore/src/Dto/Input/ClientInput.php

128 lines
3.7 KiB
PHP

<?php
namespace App\Dto\Input;
use ApiPlatform\Metadata\ApiProperty;
use App\Dto\Output\HardwareProfileOutput;
use App\Dto\Output\MenuOutput;
use App\Dto\Output\OrganizationalUnitOutput;
use App\Entity\Client;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
final class ClientInput
{
#[Assert\NotBlank(message: 'validators.client.name.not_blank')]
#[Groups(['client:write'])]
#[ApiProperty(
description: 'El nombre del cliente',
example: 'Cliente 1',
)]
public ?string $name = null;
#[Groups(['client:write'])]
#[ApiProperty(
description: 'La descripción del cliente',
example: 'Cliente descripcion 1',
)]
public ?string $serialNumber = null;
#[Groups(['client:write'])]
#[ApiProperty(
description: 'La interfaz de red del cliente',
example: 'eth0'
)]
public ?string $netiface = null;
#[Groups(['client:write'])]
#[ApiProperty(
description: 'El driver de red del cliente',
example: 'e1000e'
)]
public ?string $netDriver = null;
#[Groups(['client:write'])]
#[ApiProperty(
description: 'La dirección MAC del cliente',
example: '00:00:00:00:00:00'
)]
public ?string $mac = null;
#[Groups(['client:write'])]
#[Assert\Ip(message: 'validators.ip_address.invalid')]
#[ApiProperty(
description: 'La dirección IP del cliente',
example: '192.168.1.1'
)]
public ?string $ip = null;
#[Assert\NotNull(message: 'validators.organizational_unit.not_null')]
#[Groups(['client:write', 'client:patch'])]
#[ApiProperty(
description: 'La unidad organizativa del cliente'
)]
public ?OrganizationalUnitOutput $organizationalUnit = null;
#[Groups(['client:write'])]
#[ApiProperty(
description: 'El menú del cliente'
)]
public ?MenuOutput $menu = null;
#[Groups(['client:write'])]
#[ApiProperty(
description: 'El perfil de hardware del cliente'
)]
public ?HardwareProfileOutput $hardwareProfile = null;
#[Groups(['client:write'])]
#[ApiProperty(
description: 'descriptions.client.validation'
)]
public ?array $position = ['x' => 0, 'y' => 0];
public function __construct(?Client $client = null)
{
if (!$client) {
return;
}
$this->name = $client->getName();
$this->serialNumber = $client->getSerialNumber();
$this->netiface = $client->getNetiface();
$this->organizationalUnit = new OrganizationalUnitOutput($client->getOrganizationalUnit());
$this->netDriver = $client->getNetDriver();
$this->mac = $client->getMac();
$this->ip = $client->getIp();
$this->position = $client->getPosition();
if ($client->getMenu()) {
$this->menu = new MenuOutput($client->getMenu());
}
if ($client->getHardwareProfile()) {
$this->hardwareProfile = new HardwareProfileOutput($client->getHardwareProfile());
}
}
public function createOrUpdateEntity(?Client $client = null): Client
{
if (!$client) {
$client = new Client();
}
$client->setName($this->name);
$client->setSerialNumber($this->serialNumber);
$client->setNetiface($this->netiface);
$client->setOrganizationalUnit($this->organizationalUnit->getEntity());
$client->setNetDriver($this->netDriver);
$client->setMac($this->mac);
$client->setIp($this->ip);
$client->setMenu($this->menu?->getEntity());
$client->setHardwareProfile($this->hardwareProfile?->getEntity());
$client->setPosition($this->position);
return $client;
}
}