From fae474ab799d48c05435d97aa525eeef42a98fe0 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Rosales Date: Fri, 21 Jun 2024 10:36:22 +0200 Subject: [PATCH] Add Unidades organizativas --- Unidades-organizativas.md | 424 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 424 insertions(+) create mode 100644 Unidades-organizativas.md diff --git a/Unidades-organizativas.md b/Unidades-organizativas.md new file mode 100644 index 0000000..2657f0b --- /dev/null +++ b/Unidades-organizativas.md @@ -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 +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 +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; + } +} +``` \ No newline at end of file