refs #427. New endpoints created organizational-units
parent
30fa682a46
commit
dc12acd29e
|
@ -1,8 +1,6 @@
|
|||
resources:
|
||||
App\Entity\OrganizationalUnit:
|
||||
processor: App\State\Processor\OrganizationalUnitProcessor
|
||||
input: App\Dto\Input\OrganizationalUnitInput
|
||||
output: App\Dto\Output\OrganizationalUnitOutput
|
||||
normalization_context:
|
||||
groups: ['default', 'organizational-unit:read']
|
||||
denormalization_context:
|
||||
|
@ -16,8 +14,34 @@ resources:
|
|||
provider: App\State\Provider\OrganizationalUnitProvider
|
||||
ApiPlatform\Metadata\Patch:
|
||||
provider: App\State\Provider\OrganizationalUnitProvider
|
||||
ApiPlatform\Metadata\Post: ~
|
||||
ApiPlatform\Metadata\Delete: ~
|
||||
organizational_unit_root:
|
||||
class: ApiPlatform\Metadata\Post
|
||||
method: POST
|
||||
uriTemplate: /organizational-units/root
|
||||
input: App\Dto\Input\OrganizationalUnitRootInput
|
||||
output: App\Dto\Output\OrganizationalUnitOutput
|
||||
|
||||
organizational_unit_classroom_group:
|
||||
class: ApiPlatform\Metadata\Post
|
||||
method: POST
|
||||
uriTemplate: /organizational-units/classroom-group
|
||||
input: App\Dto\Input\OrganizationalUnitClassroomGroupInput
|
||||
output: App\Dto\Output\OrganizationalUnitOutput
|
||||
|
||||
organizational_unit_classroom:
|
||||
class: ApiPlatform\Metadata\Post
|
||||
method: POST
|
||||
uriTemplate: /organizational-units/classroom
|
||||
input: App\Dto\Input\OrganizationalUnitClassroomInput
|
||||
output: App\Dto\Output\OrganizationalUnitOutput
|
||||
|
||||
organizational_unit_client_group:
|
||||
class: ApiPlatform\Metadata\Post
|
||||
method: POST
|
||||
uriTemplate: /organizational-units/client-group
|
||||
input: App\Dto\Input\OrganizationalUnitClientGroupInput
|
||||
output: App\Dto\Output\OrganizationalUnitOutput
|
||||
|
||||
properties:
|
||||
App\Entity\OrganizationalUnit:
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
|
||||
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
|
||||
{
|
||||
#[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 = $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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
<?php
|
||||
|
||||
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 OrganizationalUnitClassroomInput
|
||||
{
|
||||
#[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;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?string $location = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?bool $projector = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?bool $board = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?int $capacity = null;
|
||||
|
||||
public function __construct(?OrganizationalUnit $organizationalUnit = null)
|
||||
{
|
||||
if (!$organizationalUnit) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->name = $organizationalUnit->getName();
|
||||
$this->parent = $organizationalUnit->getParent();
|
||||
$this->description = $organizationalUnit->getDescription();
|
||||
$this->comments = $organizationalUnit->getComments();
|
||||
$this->location = $organizationalUnit->getLocation();
|
||||
$this->projector = $organizationalUnit->isProjector();
|
||||
$this->board = $organizationalUnit->isBoard();
|
||||
$this->capacity = $organizationalUnit->getCapacity();
|
||||
}
|
||||
|
||||
public function createOrUpdateEntity(?OrganizationalUnit $organizationalUnit = null): OrganizationalUnit
|
||||
{
|
||||
if (!$organizationalUnit) {
|
||||
$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);
|
||||
$organizationalUnit->setCapacity($this->capacity);
|
||||
|
||||
return $organizationalUnit;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
<?php
|
||||
|
||||
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
|
||||
{
|
||||
#[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 = $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;
|
||||
}
|
||||
}
|
|
@ -3,15 +3,22 @@
|
|||
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 OrganizationalUnitInput
|
||||
final class OrganizationalUnitRootInput
|
||||
{
|
||||
#[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) {
|
||||
|
@ -19,6 +26,8 @@ final class OrganizationalUnitInput
|
|||
}
|
||||
|
||||
$this->name = $organizationalUnit->getName();
|
||||
$this->description = $organizationalUnit->getDescription();
|
||||
$this->comments = $organizationalUnit->getComments();
|
||||
}
|
||||
|
||||
public function createOrUpdateEntity(?OrganizationalUnit $organizationalUnit = null): OrganizationalUnit
|
||||
|
@ -28,6 +37,9 @@ final class OrganizationalUnitInput
|
|||
}
|
||||
|
||||
$organizationalUnit->setName($this->name);
|
||||
$organizationalUnit->setType(OrganizationalUnitTypes::ORGANIZATIONAL_UNIT);
|
||||
$organizationalUnit->setDescription($this->description);
|
||||
$organizationalUnit->setComments($this->comments);
|
||||
|
||||
return $organizationalUnit;
|
||||
}
|
|
@ -12,6 +12,15 @@ final class OrganizationalUnitOutput extends AbstractOutput
|
|||
#[Groups(['organizational-unit:read'])]
|
||||
public string $name;
|
||||
|
||||
#[Groups(['organizational-unit:read'])]
|
||||
public string $type;
|
||||
|
||||
#[Groups(['organizational-unit:read'])]
|
||||
public ?OrganizationalUnit $parent = null;
|
||||
|
||||
#[Groups(['organizational-unit:read'])]
|
||||
public string $path;
|
||||
|
||||
#[Groups(['organizational-unit:read'])]
|
||||
public \DateTime $createAt;
|
||||
|
||||
|
@ -23,6 +32,9 @@ final class OrganizationalUnitOutput extends AbstractOutput
|
|||
parent::__construct($organizationalUnit);
|
||||
|
||||
$this->name = $organizationalUnit->getName();
|
||||
$this->type = $organizationalUnit->getType();
|
||||
$this->parent = $organizationalUnit->getParent();
|
||||
$this->path = $organizationalUnit->getPath();
|
||||
$this->createAt = $organizationalUnit->getCreatedAt();
|
||||
$this->createBy = $organizationalUnit->getCreatedBy();
|
||||
}
|
||||
|
|
|
@ -2,7 +2,32 @@
|
|||
|
||||
namespace App\Model;
|
||||
|
||||
class OrganizationalUnitTypes
|
||||
final class OrganizationalUnitTypes
|
||||
{
|
||||
public const ORGANIZATIONAL_UNIT = 'ORGANIZATIONAL_UNIT';
|
||||
public const CLASSROOMS_GROUP = 'CLASSROOMS_GROUP';
|
||||
public const CLASSROOM = 'CLASSROOM';
|
||||
public const CLIENTS_GROUP = 'CLIENTS_GROUP';
|
||||
|
||||
private const ORGANIZATIONAL_UNIT_TYPES = [
|
||||
self::ORGANIZATIONAL_UNIT => 'Unidad Organizativa',
|
||||
self::CLASSROOMS_GROUP => 'Grupo de aulas',
|
||||
self::CLASSROOM => 'Aula',
|
||||
self::CLIENTS_GROUP => 'Grupo de ordenadores',
|
||||
];
|
||||
|
||||
public static function getOrganizationalUnitTypes(): array
|
||||
{
|
||||
return self::ORGANIZATIONAL_UNIT_TYPES;
|
||||
}
|
||||
|
||||
public static function getOrganizationalUnitType(string $organizationalUnit): ?string
|
||||
{
|
||||
return self::ORGANIZATIONAL_UNIT_TYPES[$organizationalUnit] ?? null;
|
||||
}
|
||||
|
||||
public static function getOrganizationalUnitTypeKeys(): array
|
||||
{
|
||||
return array_keys(self::ORGANIZATIONAL_UNIT_TYPES);
|
||||
}
|
||||
}
|
|
@ -9,7 +9,10 @@ use ApiPlatform\Metadata\Post;
|
|||
use ApiPlatform\Metadata\Put;
|
||||
use ApiPlatform\State\ProcessorInterface;
|
||||
use ApiPlatform\Validator\ValidatorInterface;
|
||||
use App\Dto\Input\OrganizationalUnitInput;
|
||||
use App\Dto\Input\OrganizationalUnitClassroomGroupInput;
|
||||
use App\Dto\Input\OrganizationalUnitClassroomInput;
|
||||
use App\Dto\Input\OrganizationalUnitClientGroupInput;
|
||||
use App\Dto\Input\OrganizationalUnitRootInput;
|
||||
use App\Dto\Output\OrganizationalUnitOutput;
|
||||
use App\Repository\OrganizationalUnitRepository;
|
||||
|
||||
|
@ -42,8 +45,16 @@ class OrganizationalUnitProcessor implements ProcessorInterface
|
|||
*/
|
||||
private function processCreateOrUpdate($data, Operation $operation, array $uriVariables = [], array $context = []): OrganizationalUnitOutput
|
||||
{
|
||||
if (!($data instanceof OrganizationalUnitOutput)) {
|
||||
throw new \Exception(sprintf('data is not instance of %s', OrganizationalUnitInput::class));
|
||||
if (!($data instanceof OrganizationalUnitRootInput) &&
|
||||
!($data instanceof OrganizationalUnitClassroomInput) &&
|
||||
!($data instanceof OrganizationalUnitClientGroupInput) &&
|
||||
!($data instanceof OrganizationalUnitClassroomGroupInput)) {
|
||||
throw new \Exception(sprintf('data is not an instance of %s, %s, %s, or %s',
|
||||
OrganizationalUnitRootInput::class,
|
||||
OrganizationalUnitClassroomInput::class,
|
||||
OrganizationalUnitClientGroupInput::class,
|
||||
OrganizationalUnitClassroomGroupInput::class
|
||||
));
|
||||
}
|
||||
|
||||
$entity = null;
|
||||
|
|
Loading…
Reference in New Issue