refs #427. Fixed organizationalUnit bug in POST/PUT classroom

pull/7/head
Manuel Aranda Rosales 2024-06-10 12:42:04 +02:00
parent 539f5557b1
commit ccc33d7615
12 changed files with 74 additions and 146 deletions

View File

@ -2,6 +2,7 @@ resources:
App\Entity\OrganizationalUnit:
processor: App\State\Processor\OrganizationalUnitProcessor
output: App\Dto\Output\OrganizationalUnitOutput
input: App\Dto\Input\OrganizationalUnitInput
normalization_context:
groups: ['default', 'organizational-unit:read']
denormalization_context:

View File

@ -38,6 +38,8 @@ services:
depends_on:
- database
environment:
XDEBUG_CLIENT_HOST: 127.17.0.1
XDEBUG_CLIENT_PORT: 9003
PHP_IDE_CONFIG: serverName=ogcore
networks:
- ogcore-network

View File

@ -1,4 +1,4 @@
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=172.17.0.1/
xdebug.client_port=9003
xdebug.client_host=${XDEBUG_CLIENT_HOST}
xdebug.client_port=${XDEBUG_CLIENT_PORT}

View File

@ -2,52 +2,13 @@
namespace App\Dto\Input;
use App\Dto\Output\OrganizationalUnitOutput;
use App\Entity\OrganizationalUnit;
use App\Model\OrganizationalUnitTypes;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
final class OrganizationalUnitClassroomGroupInput
final class OrganizationalUnitClassroomGroupInput extends OrganizationalUnitInput
{
#[Assert\NotBlank]
#[Groups(['organizational-unit:write'])]
public ?string $name = null;
#[Assert\NotNull]
#[Groups(['organizational-unit:write'])]
public ?OrganizationalUnitOutput $parent = null;
#[Groups(['organizational-unit:write'])]
public ?string $description = null;
#[Groups(['organizational-unit:write'])]
public ?string $comments = null;
public function __construct(?OrganizationalUnit $organizationalUnit = null)
{
if (!$organizationalUnit) {
return;
}
$this->name = $organizationalUnit->getName();
$this->parent = new OrganizationalUnitOutput($organizationalUnit->getParent());
$this->description = $organizationalUnit->getDescription();
$this->comments = $organizationalUnit->getComments();
}
public function createOrUpdateEntity(?OrganizationalUnit $organizationalUnit = null): OrganizationalUnit
{
if (!$organizationalUnit) {
$organizationalUnit = new OrganizationalUnit();
}
$organizationalUnit->setName($this->name);
$organizationalUnit->setParent($this->parent->getEntity());
$organizationalUnit->setType(OrganizationalUnitTypes::CLASSROOMS_GROUP);
$organizationalUnit->setDescription($this->description);
$organizationalUnit->setComments($this->comments);
return $organizationalUnit;
parent::__construct($organizationalUnit, OrganizationalUnitTypes::CLASSROOMS_GROUP);
}
}

View File

@ -2,7 +2,6 @@
namespace App\Dto\Input;
use App\Dto\Output\OrganizationalUnitOutput;
use App\Entity\NetworkSettings;
use App\Entity\OrganizationalUnit;
use App\Model\OrganizationalUnitTypes;
@ -10,22 +9,8 @@ use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
final class OrganizationalUnitClassroomInput
final class OrganizationalUnitClassroomInput extends OrganizationalUnitInput
{
#[Assert\NotBlank]
#[Groups(['organizational-unit:write'])]
public ?string $name = null;
#[Assert\NotNull]
#[Groups(['organizational-unit:write', 'organizational-unit:patch'])]
public ?OrganizationalUnitOutput $parent = null;
#[Groups(['organizational-unit:write'])]
public ?string $description = null;
#[Groups(['organizational-unit:write'])]
public ?string $comments = null;
#[Groups(['organizational-unit:write'])]
public ?string $location = null;
@ -74,14 +59,12 @@ final class OrganizationalUnitClassroomInput
public function __construct(?OrganizationalUnit $organizationalUnit = null)
{
parent::__construct($organizationalUnit, OrganizationalUnitTypes::CLASSROOM);
if (!$organizationalUnit) {
return;
}
$this->name = $organizationalUnit->getName();
$this->parent = new OrganizationalUnitOutput($organizationalUnit->getParent());
$this->description = $organizationalUnit->getDescription();
$this->comments = $organizationalUnit->getComments();
$this->location = $organizationalUnit->getLocation();
$this->projector = $organizationalUnit->isProjector();
$this->board = $organizationalUnit->isBoard();
@ -108,11 +91,7 @@ final class OrganizationalUnitClassroomInput
$organizationalUnit = new OrganizationalUnit();
}
$organizationalUnit->setName($this->name);
$organizationalUnit->setType(OrganizationalUnitTypes::CLASSROOM);
$organizationalUnit->setParent($this->parent->getEntity());
$organizationalUnit->setDescription($this->description);
$organizationalUnit->setComments($this->comments);
$organizationalUnit->setLocation($this->location);
$organizationalUnit->setProjector($this->projector);
$organizationalUnit->setBoard($this->board);

View File

@ -2,52 +2,13 @@
namespace App\Dto\Input;
use App\Dto\Output\OrganizationalUnitOutput;
use App\Entity\OrganizationalUnit;
use App\Model\OrganizationalUnitTypes;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
final class OrganizationalUnitClientGroupInput
final class OrganizationalUnitClientGroupInput extends OrganizationalUnitInput
{
#[Assert\NotBlank]
#[Groups(['organizational-unit:write'])]
public ?string $name = null;
#[Assert\NotNull]
#[Groups(['organizational-unit:write'])]
public ?OrganizationalUnitOutput $parent = null;
#[Groups(['organizational-unit:write'])]
public ?string $description = null;
#[Groups(['organizational-unit:write'])]
public ?string $comments = null;
public function __construct(?OrganizationalUnit $organizationalUnit = null)
{
if (!$organizationalUnit) {
return;
}
$this->name = $organizationalUnit->getName();
$this->parent = new OrganizationalUnitOutput($organizationalUnit->getParent());
$this->description = $organizationalUnit->getDescription();
$this->comments = $organizationalUnit->getComments();
}
public function createOrUpdateEntity(?OrganizationalUnit $organizationalUnit = null): OrganizationalUnit
{
if (!$organizationalUnit) {
$organizationalUnit = new OrganizationalUnit();
}
$organizationalUnit->setName($this->name);
$organizationalUnit->setParent($this->parent->getEntity());
$organizationalUnit->setType(OrganizationalUnitTypes::CLIENTS_GROUP);
$organizationalUnit->setDescription($this->description);
$organizationalUnit->setComments($this->comments);
return $organizationalUnit;
parent::__construct($organizationalUnit, OrganizationalUnitTypes::CLIENTS_GROUP);
}
}

View File

@ -0,0 +1,55 @@
<?php
namespace App\Dto\Input;
use App\Dto\Output\OrganizationalUnitOutput;
use App\Entity\OrganizationalUnit;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
class OrganizationalUnitInput
{
#[Assert\NotBlank]
#[Groups(['organizational-unit:write'])]
public ?string $name = null;
#[Groups(['organizational-unit:write'])]
public ?OrganizationalUnitOutput $parent = null;
#[Groups(['organizational-unit:write'])]
public ?string $description = null;
#[Groups(['organizational-unit:write'])]
public ?string $comments = null;
public function __construct(?OrganizationalUnit $organizationalUnit = null, private readonly ?string $type = null)
{
if (!$organizationalUnit) {
return;
}
$this->name = $organizationalUnit->getName();
if ($organizationalUnit->getParent()) {
$this->parent = new OrganizationalUnitOutput($organizationalUnit->getParent());
}
$this->description = $organizationalUnit->getDescription();
$this->comments = $organizationalUnit->getComments();
}
public function createOrUpdateEntity(?OrganizationalUnit $organizationalUnit = null): OrganizationalUnit
{
if (!$organizationalUnit) {
$organizationalUnit = new OrganizationalUnit();
}
$organizationalUnit->setName($this->name);
if ($this->parent) {
$organizationalUnit->setParent($this->parent->getEntity());
}
$organizationalUnit->setDescription($this->description);
$organizationalUnit->setComments($this->comments);
$organizationalUnit->setType($this->type);
return $organizationalUnit;
}
}

View File

@ -4,43 +4,11 @@ namespace App\Dto\Input;
use App\Entity\OrganizationalUnit;
use App\Model\OrganizationalUnitTypes;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
final class OrganizationalUnitRootInput
final class OrganizationalUnitRootInput extends OrganizationalUnitInput
{
#[Assert\NotBlank]
#[Groups(['organizational-unit:write'])]
public ?string $name = null;
#[Groups(['organizational-unit:write'])]
public ?string $description = null;
#[Groups(['organizational-unit:write'])]
public ?string $comments = null;
public function __construct(?OrganizationalUnit $organizationalUnit = null)
{
if (!$organizationalUnit) {
return;
}
$this->name = $organizationalUnit->getName();
$this->description = $organizationalUnit->getDescription();
$this->comments = $organizationalUnit->getComments();
}
public function createOrUpdateEntity(?OrganizationalUnit $organizationalUnit = null): OrganizationalUnit
{
if (!$organizationalUnit) {
$organizationalUnit = new OrganizationalUnit();
}
$organizationalUnit->setName($this->name);
$organizationalUnit->setType(OrganizationalUnitTypes::ORGANIZATIONAL_UNIT);
$organizationalUnit->setDescription($this->description);
$organizationalUnit->setComments($this->comments);
return $organizationalUnit;
parent::__construct($organizationalUnit, OrganizationalUnitTypes::ORGANIZATIONAL_UNIT);
}
}

View File

@ -20,7 +20,7 @@ final class ClientOutput extends AbstractOutput
public ?string $netiface = '';
#[Groups(['client:read'])]
public ?OrganizationalUnit $organizationalUnit = null;
public ?OrganizationalUnitOutput $organizationalUnit = null;
#[Groups(['client:read'])]
public \DateTime $createAt;
@ -35,7 +35,7 @@ final class ClientOutput extends AbstractOutput
$this->name = $client->getName();
$this->serialNumber = $client->getSerialNumber();
$this->netiface = $client->getNetiface();
$this->organizationalUnit = $client->getOrganizationalUnit();
$this->organizationalUnit = new OrganizationalUnitOutput($client->getOrganizationalUnit());
$this->createAt = $client->getCreatedAt();
$this->createBy = $client->getCreatedBy();
}

View File

@ -2,7 +2,6 @@
namespace App\Dto\Output;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\Get;
use App\Entity\OrganizationalUnit;
use Symfony\Component\Serializer\Annotation\Groups;

View File

@ -12,6 +12,7 @@ use ApiPlatform\Validator\ValidatorInterface;
use App\Dto\Input\OrganizationalUnitClassroomGroupInput;
use App\Dto\Input\OrganizationalUnitClassroomInput;
use App\Dto\Input\OrganizationalUnitClientGroupInput;
use App\Dto\Input\OrganizationalUnitInput;
use App\Dto\Input\OrganizationalUnitRootInput;
use App\Dto\Output\OrganizationalUnitOutput;
use App\Repository\OrganizationalUnitRepository;
@ -54,7 +55,7 @@ class OrganizationalUnitProcessor implements ProcessorInterface
throw new \Exception(sprintf('data is not an instance of %s, %s, %s, or %s',
OrganizationalUnitRootInput::class,
OrganizationalUnitClassroomInput::class,
OrganizationalUnitClientGroupInput::class,
OrganizationalUnitInput::class,
OrganizationalUnitClassroomGroupInput::class
));
}

View File

@ -12,6 +12,7 @@ use ApiPlatform\State\ProviderInterface;
use App\Dto\Input\OrganizationalUnitClassroomGroupInput;
use App\Dto\Input\OrganizationalUnitClassroomInput;
use App\Dto\Input\OrganizationalUnitClientGroupInput;
use App\Dto\Input\OrganizationalUnitInput;
use App\Dto\Input\OrganizationalUnitRootInput;
use App\Dto\Input\UserGroupInput;
use App\Dto\Output\OrganizationalUnitOutput;