Add Unidades organizativas
parent
5569b8c8d9
commit
fae474ab79
|
@ -0,0 +1,424 @@
|
|||
# Documentation / Documentación - API Platform with Symfony 3
|
||||
|
||||
## Select Language / Seleccionar Idioma
|
||||
|
||||
- [English](#english)
|
||||
- [Español](#español)
|
||||
|
||||
---
|
||||
|
||||
## English
|
||||
|
||||
### Table of Contents
|
||||
|
||||
1. [Introduction](#introduction)
|
||||
2. [Configuration](#configuration)
|
||||
3. [Resource Definition](#resource-definition)
|
||||
4. [API Operations](#api-operations)
|
||||
5. [Entity Properties](#entity-properties)
|
||||
6. [Organizational Unit Input DTO](#organizational-unit-input-dto)
|
||||
|
||||
### Introduction
|
||||
|
||||
This documentation describes the configuration of API Platform in a Symfony 3 project. It details the resources, operations, and entity properties exposed through the API.
|
||||
|
||||
### Configuration
|
||||
|
||||
API configuration is done in Symfony configuration files, usually in `config/packages/api_platform.yaml` or a similar file.
|
||||
|
||||
```yaml
|
||||
resources:
|
||||
App\Entity\OrganizationalUnit:
|
||||
processor: App\State\Processor\OrganizationalUnitProcessor
|
||||
output: App\Dto\Output\OrganizationalUnitOutput
|
||||
input: App\Dto\Input\OrganizationalUnitInput
|
||||
normalizationContext:
|
||||
groups: ['default', 'organizational-unit:read']
|
||||
denormalization_context:
|
||||
groups: ['organizational-unit:write']
|
||||
operations:
|
||||
ApiPlatform\Metadata\GetCollection:
|
||||
provider: App\State\Provider\OrganizationalUnitProvider
|
||||
filters:
|
||||
- 'api_platform.filter.organizational_unit.order'
|
||||
- 'api_platform.filter.organizational_unit.search'
|
||||
ApiPlatform\Metadata\Get:
|
||||
security: 'is_granted("ORGANIZATIONAL_UNIT_VIEW", object)'
|
||||
provider: App\State\Provider\OrganizationalUnitProvider
|
||||
securityMessage: 'Sorry, but you are not allowed to access this resource.'
|
||||
ApiPlatform\Metadata\Put:
|
||||
provider: App\State\Provider\OrganizationalUnitProvider
|
||||
ApiPlatform\Metadata\Patch:
|
||||
provider: App\State\Provider\OrganizationalUnitProvider
|
||||
validationContext:
|
||||
groups: ['organizational-unit:patch']
|
||||
ApiPlatform\Metadata\Post: ~
|
||||
ApiPlatform\Metadata\Delete: ~
|
||||
|
||||
properties:
|
||||
App\Entity\OrganizationalUnit:
|
||||
id:
|
||||
identifier: false
|
||||
uuid:
|
||||
identifier: true
|
||||
```
|
||||
|
||||
### Resource Definition
|
||||
|
||||
#### App\Entity\OrganizationalUnit
|
||||
|
||||
- **Processor**: `App\State\Processor\OrganizationalUnitProcessor`
|
||||
- **Output**: `App\Dto\Output\OrganizationalUnitOutput`
|
||||
- **Input**: `App\Dto\Input\OrganizationalUnitInput`
|
||||
- **Normalization Context**: `['default', 'organizational-unit:read']`
|
||||
- **Denormalization Context**: `['organizational-unit:write']`
|
||||
|
||||
### API Operations
|
||||
|
||||
#### Organizational Unit Operations
|
||||
|
||||
##### Get Organizational Unit Collection (GetCollection)
|
||||
- **Provider**: `App\State\Provider\OrganizationalUnitProvider`
|
||||
- **Filters**:
|
||||
- Order organizational units: `api_platform.filter.organizational_unit.order`
|
||||
- Search organizational units: `api_platform.filter.organizational_unit.search`
|
||||
|
||||
##### Get Organizational Unit (Get)
|
||||
- **Security**: Only accessible by users granted `ORGANIZATIONAL_UNIT_VIEW` permission on the object.
|
||||
- **Security Message**: `Sorry, but you are not allowed to access this resource.`
|
||||
- **Provider**: `App\State\Provider\OrganizationalUnitProvider`
|
||||
|
||||
##### Update Organizational Unit (Put)
|
||||
- **Provider**: `App\State\Provider\OrganizationalUnitProvider`
|
||||
|
||||
##### Partially Update Organizational Unit (Patch)
|
||||
- **Provider**: `App\State\Provider\OrganizationalUnitProvider`
|
||||
- **Validation Context**: `['organizational-unit:patch']`
|
||||
|
||||
##### Create Organizational Unit (Post)
|
||||
- **Default Operation**: ~
|
||||
|
||||
##### Delete Organizational Unit (Delete)
|
||||
- **Default Operation**: ~
|
||||
|
||||
### Entity Properties
|
||||
|
||||
#### App\Entity\OrganizationalUnit
|
||||
|
||||
- **id**:
|
||||
- **Identifier**: `false`
|
||||
|
||||
- **uuid**:
|
||||
- **Identifier**: `true`
|
||||
|
||||
### Organizational Unit Input DTO
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Dto\Input;
|
||||
|
||||
use ApiPlatform\Metadata\ApiProperty;
|
||||
use App\Dto\Output\OrganizationalUnitOutput;
|
||||
use App\Entity\OrganizationalUnit;
|
||||
use App\Validator\Constraints\OrganizationalUnitMulticastMode;
|
||||
use App\Validator\Constraints\OrganizationalUnitMulticastPort;
|
||||
use App\Validator\Constraints\OrganizationalUnitP2PMode;
|
||||
use App\Validator\Constraints\OrganizationalUnitType;
|
||||
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 $location = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?bool $projector = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?bool $board = null;
|
||||
|
||||
#[Assert\GreaterThan(0)]
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?int $capacity = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?string $comments = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
#[OrganizationalUnitType]
|
||||
public ?string $type = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
#[Assert\Valid()]
|
||||
public ?NetworkSettingsInput $networkSettings = null;
|
||||
|
||||
public function __construct(?OrganizationalUnit $organizationalUnit = null)
|
||||
{
|
||||
if (!$organizationalUnit) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->name = $organizationalUnit->getName();
|
||||
if ($organizationalUnit->getParent()) {
|
||||
$this->parent = new OrganizationalUnitOutput($organizationalUnit->getParent());
|
||||
}
|
||||
$this->description = $organizationalUnit->getDescription();
|
||||
$this->location = $organizationalUnit->getLocation();
|
||||
$this->projector = $organizationalUnit->isProjector();
|
||||
$this->board = $organizationalUnit->isBoard();
|
||||
$this->capacity = $organizationalUnit->getCapacity();
|
||||
$this->comments = $organizationalUnit->getComments();
|
||||
$this->type = $organizationalUnit->getType();
|
||||
if ($organizationalUnit->getNetworkSettings()) {
|
||||
$this->networkSettings = new NetworkSettingsInput($organizationalUnit->getNetworkSettings());
|
||||
}
|
||||
}
|
||||
|
||||
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->setLocation($this->location);
|
||||
$organizationalUnit->setProjector($this->projector);
|
||||
$organizationalUnit->setBoard($this->board);
|
||||
$organizationalUnit->setCapacity($this->capacity);
|
||||
$organizationalUnit->setComments($this->comments);
|
||||
$organizationalUnit->setType($this->type);
|
||||
|
||||
if ($this->networkSettings) {
|
||||
$organizationalUnit->setNetworkSettings($this->networkSettings->createOrUpdateEntity($organizationalUnit->getNetworkSettings()));
|
||||
}
|
||||
|
||||
return $organizationalUnit;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Español
|
||||
|
||||
### Tabla de Contenidos
|
||||
|
||||
1. [Introducción](#introduction)
|
||||
2. [Configuración](#configuration)
|
||||
3. [Definición de Recursos](#resource-definition)
|
||||
4. [Operaciones de API](#api-operations)
|
||||
5. [Propiedades de la Entidad](#entity-properties)
|
||||
6. [DTO de Entrada de Unidad Organizativa](#organizational-unit-input-dto)
|
||||
|
||||
### Introducción
|
||||
|
||||
Esta documentación describe la configuración de API Platform en un proyecto Symfony 3, detallando los recursos, operaciones y propiedades de entidad expuestos a través de la API.
|
||||
|
||||
### Configuración
|
||||
|
||||
La configuración de API se realiza en archivos de configuración Symfony, generalmente en `config/packages/api_platform.yaml` o un archivo similar.
|
||||
|
||||
```yaml
|
||||
resources:
|
||||
App\Entity\OrganizationalUnit:
|
||||
processor: App\State\Processor\OrganizationalUnitProcessor
|
||||
output: App\Dto\Output\OrganizationalUnitOutput
|
||||
input: App\Dto\Input\OrganizationalUnitInput
|
||||
normalizationContext:
|
||||
groups: ['default', 'organizational-unit:read']
|
||||
denormalization_context:
|
||||
groups: ['organizational-unit:write']
|
||||
operations:
|
||||
ApiPlatform\Metadata\GetCollection:
|
||||
provider: App\State\Provider\OrganizationalUnitProvider
|
||||
filters:
|
||||
- 'api_platform.filter.organizational_unit.order'
|
||||
- 'api_platform.filter.organizational_unit.search'
|
||||
ApiPlatform\Metadata\Get:
|
||||
security: 'is_granted("ORGANIZATIONAL_UNIT_VIEW", object)'
|
||||
provider: App\State\Provider\OrganizationalUnitProvider
|
||||
securityMessage: 'Sorry, but you are not allowed to access this resource.'
|
||||
ApiPlatform\Metadata\Put:
|
||||
provider: App\State\Provider\OrganizationalUnitProvider
|
||||
|
||||
|
||||
ApiPlatform\Metadata\Patch:
|
||||
provider: App\State\Provider\OrganizationalUnitProvider
|
||||
validationContext:
|
||||
groups: ['organizational-unit:patch']
|
||||
ApiPlatform\Metadata\Post: ~
|
||||
ApiPlatform\Metadata\Delete: ~
|
||||
|
||||
properties:
|
||||
App\Entity\OrganizationalUnit:
|
||||
id:
|
||||
identifier: false
|
||||
uuid:
|
||||
identifier: true
|
||||
```
|
||||
|
||||
### Definición de Recursos
|
||||
|
||||
#### App\Entity\OrganizationalUnit
|
||||
|
||||
- **Processor**: `App\State\Processor\OrganizationalUnitProcessor`
|
||||
- **Output**: `App\Dto\Output\OrganizationalUnitOutput`
|
||||
- **Input**: `App\Dto\Input\OrganizationalUnitInput`
|
||||
- **Normalization Context**: `['default', 'organizational-unit:read']`
|
||||
- **Denormalization Context**: `['organizational-unit:write']`
|
||||
|
||||
### Operaciones de API
|
||||
|
||||
#### Operaciones de Unidad Organizativa
|
||||
|
||||
##### Obtener Colección de Unidades Organizativas (GetCollection)
|
||||
- **Provider**: `App\State\Provider\OrganizationalUnitProvider`
|
||||
- **Filtros**:
|
||||
- Ordenar unidades organizativas: `api_platform.filter.organizational_unit.order`
|
||||
- Buscar unidades organizativas: `api_platform.filter.organizational_unit.search`
|
||||
|
||||
##### Obtener Unidad Organizativa (Get)
|
||||
- **Security**: Solo accesible por usuarios con el permiso `ORGANIZATIONAL_UNIT_VIEW` sobre el objeto.
|
||||
- **Mensaje de Seguridad**: `Sorry, but you are not allowed to access this resource.`
|
||||
- **Provider**: `App\State\Provider\OrganizationalUnitProvider`
|
||||
|
||||
##### Actualizar Unidad Organizativa (Put)
|
||||
- **Provider**: `App\State\Provider\OrganizationalUnitProvider`
|
||||
|
||||
##### Actualización Parcial de Unidad Organizativa (Patch)
|
||||
- **Provider**: `App\State\Provider\OrganizationalUnitProvider`
|
||||
- **Validation Context**: `['organizational-unit:patch']`
|
||||
|
||||
##### Crear Unidad Organizativa (Post)
|
||||
- **Operación Predeterminada**: ~
|
||||
|
||||
##### Eliminar Unidad Organizativa (Delete)
|
||||
- **Operación Predeterminada**: ~
|
||||
|
||||
### Propiedades de la Entidad
|
||||
|
||||
#### App\Entity\OrganizationalUnit
|
||||
|
||||
- **id**:
|
||||
- **Identifier**: `false`
|
||||
|
||||
- **uuid**:
|
||||
- **Identifier**: `true`
|
||||
|
||||
### DTO de Entrada de Unidad Organizativa
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace App\Dto\Input;
|
||||
|
||||
use ApiPlatform\Metadata\ApiProperty;
|
||||
use App\Dto\Output\OrganizationalUnitOutput;
|
||||
use App\Entity\OrganizationalUnit;
|
||||
use App\Validator\Constraints\OrganizationalUnitMulticastMode;
|
||||
use App\Validator\Constraints\OrganizationalUnitMulticastPort;
|
||||
use App\Validator\Constraints\OrganizationalUnitP2PMode;
|
||||
use App\Validator\Constraints\OrganizationalUnitType;
|
||||
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 $location = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?bool $projector = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?bool $board = null;
|
||||
|
||||
#[Assert\GreaterThan(0)]
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?int $capacity = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
public ?string $comments = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
#[OrganizationalUnitType]
|
||||
public ?string $type = null;
|
||||
|
||||
#[Groups(['organizational-unit:write'])]
|
||||
#[Assert\Valid()]
|
||||
public ?NetworkSettingsInput $networkSettings = null;
|
||||
|
||||
public function __construct(?OrganizationalUnit $organizationalUnit = null)
|
||||
{
|
||||
if (!$organizationalUnit) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->name = $organizationalUnit->getName();
|
||||
if ($organizationalUnit->getParent()) {
|
||||
$this->parent = new OrganizationalUnitOutput($organizationalUnit->getParent());
|
||||
}
|
||||
$this->description = $organizationalUnit->getDescription();
|
||||
$this->location = $organizationalUnit->getLocation();
|
||||
$this->projector = $organizationalUnit->isProjector();
|
||||
$this->board = $organizationalUnit->isBoard();
|
||||
$this->capacity = $organizationalUnit->getCapacity();
|
||||
$this->comments = $organizationalUnit->getComments();
|
||||
$this->type = $organizationalUnit->getType();
|
||||
if ($organizationalUnit->getNetworkSettings()) {
|
||||
$this->networkSettings = new NetworkSettingsInput($organizationalUnit->getNetworkSettings());
|
||||
}
|
||||
}
|
||||
|
||||
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->setLocation($this->location);
|
||||
$organizationalUnit->setProjector($this->projector);
|
||||
$organizationalUnit->setBoard($this->board);
|
||||
$organizationalUnit->setCapacity($this->capacity);
|
||||
$organizationalUnit->setComments($this->comments);
|
||||
$organizationalUnit->setType($this->type);
|
||||
|
||||
if ($this->networkSettings) {
|
||||
$organizationalUnit->setNetworkSettings($this->networkSettings->createOrUpdateEntity($organizationalUnit->getNetworkSettings()));
|
||||
}
|
||||
|
||||
return $organizationalUnit;
|
||||
}
|
||||
}
|
||||
```
|
Loading…
Reference in New Issue