fix default respone generation

This commit is contained in:
Dennis Eichhorn 2023-07-26 09:18:05 +00:00
parent b771d7cf20
commit 5268650634
10 changed files with 567 additions and 550 deletions

View File

@ -15,7 +15,7 @@ declare(strict_types=1);
namespace Modules\ItemManagement\Admin;
use Modules\Attribute\Models\AttributeValue;
use Modules\ItemManagement\Models\ItemAttributeTypeMapper;
use Modules\ItemManagement\Models\Attribute\ItemAttributeTypeMapper;
use Modules\ItemManagement\Models\ItemL11nTypeMapper;
use phpOMS\Application\ApplicationAbstract;
use phpOMS\Config\SettingsInterface;
@ -109,7 +109,10 @@ final class Installer extends InstallerAbstract
/** @var \Modules\ItemManagement\Controller\ApiController $module */
$module = $app->moduleManager->getModuleInstance('ItemManagement');
/** @var \Modules\Attribute\Models\AttributeType[] $attributeTypes */
/** @var \Modules\ItemManagement\Controller\ApiAttributeController $module2 */
$module2 = $app->moduleManager->getModuleInstance('ItemManagement', 'ApiAttribute');
/** @var \Modules\Attribute\Models\Attribute\AttributeType[] $attributeTypes */
$attributeTypes = ItemAttributeTypeMapper::getAll()->with('defaults')->execute();
/** @var \phpOMS\Localization\BaseStringL11nType[] $l11nTypes */
@ -168,7 +171,7 @@ final class Installer extends InstallerAbstract
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('item', $itemId);
$request->setData('ref', $itemId);
$request->setData('type', $attrType->id);
if ($attribute['custom'] ?? true) {
@ -177,7 +180,7 @@ final class Installer extends InstallerAbstract
$request->setData('value', self::findAttributeIdByValue($attrType->getDefaults(), $attribute['value']));
}
$module->apiItemAttributeCreate($request, $response);
$module2->apiItemAttributeCreate($request, $response);
}
}
@ -304,8 +307,8 @@ final class Installer extends InstallerAbstract
/** @var array<string, array> $itemAttrType */
$itemAttrType = [];
/** @var \Modules\ItemManagement\Controller\ApiController $module */
$module = $app->moduleManager->getModuleInstance('ItemManagement');
/** @var \Modules\ItemManagement\Controller\ApiAttributeController $module */
$module = $app->moduleManager->getModuleInstance('ItemManagement', 'ApiAttribute');
/** @var array $attribute */
foreach ($attributes as $attribute) {
@ -370,8 +373,8 @@ final class Installer extends InstallerAbstract
/** @var array<string, array> $itemAttrValue */
$itemAttrValue = [];
/** @var \Modules\ItemManagement\Controller\ApiController $module */
$module = $app->moduleManager->getModuleInstance('ItemManagement');
/** @var \Modules\ItemManagement\Controller\ApiAttributeController $module */
$module = $app->moduleManager->getModuleInstance('ItemManagement', 'ApiAttribute');
foreach ($attributes as $attribute) {
$itemAttrValue[$attribute['name']] = [];

View File

@ -31,7 +31,7 @@ return [
],
'^.*/item/attribute.*$' => [
[
'dest' => '\Modules\ItemManagement\Controller\ApiController:apiItemAttributeCreate',
'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeCreate',
'verb' => RouteVerb::PUT,
'permission' => [
'module' => ApiController::NAME,
@ -40,7 +40,7 @@ return [
],
],
[
'dest' => '\Modules\ItemManagement\Controller\ApiController:apiItemAttributeUpdate',
'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeUpdate',
'verb' => RouteVerb::SET,
'permission' => [
'module' => ApiController::NAME,

View File

@ -0,0 +1,523 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\ItemManagement
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\ItemManagement\Controller;
use Modules\Attribute\Models\Attribute;
use Modules\Attribute\Models\AttributeType;
use Modules\Attribute\Models\AttributeValue;
use Modules\ItemManagement\Models\Attribute\ItemAttributeMapper;
use Modules\ItemManagement\Models\Attribute\ItemAttributeTypeL11nMapper;
use Modules\ItemManagement\Models\Attribute\ItemAttributeTypeMapper;
use Modules\ItemManagement\Models\Attribute\ItemAttributeValueL11nMapper;
use Modules\ItemManagement\Models\Attribute\ItemAttributeValueMapper;
use phpOMS\Localization\BaseStringL11n;
use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
/**
* ItemManagement class.
*
* @package Modules\ItemManagement
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
final class ApiAttributeController extends Controller
{
use \Modules\Attribute\Controller\ApiAttributeTraitController;
/**
* Api method to create item attribute
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeCreate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
$attribute = $this->createAttributeFromRequest($request);
$this->createModel($request->header->account, $attribute, ItemAttributeMapper::class, 'attribute', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $attribute);
}
/**
* Api method to create item attribute l11n
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeTypeL11nCreate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
$attrL11n = $this->createAttributeTypeL11nFromRequest($request);
$this->createModel($request->header->account, $attrL11n, ItemAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $attrL11n);
}
/**
* Api method to create item attribute type
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeTypeCreate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
$attrType = $this->createAttributeTypeFromRequest($request);
$this->createModel($request->header->account, $attrType, ItemAttributeTypeMapper::class, 'attr_type', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $attrType);
}
/**
* Api method to create item attribute value
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeValueCreate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
/** @var \Modules\Attribute\Models\AttributeType $type */
$type = ItemAttributeTypeMapper::get()
->where('id', $request->getDataInt('type') ?? 0)
->execute();
$attrValue = $this->createAttributeValueFromRequest($request, $type);
$this->createModel($request->header->account, $attrValue, ItemAttributeValueMapper::class, 'attr_value', $request->getOrigin());
if ($attrValue->isDefault) {
$this->createModelRelation(
$request->header->account,
(int) $request->getData('type'),
$attrValue->id,
ItemAttributeTypeMapper::class, 'defaults', '', $request->getOrigin()
);
}
$this->createStandardCreateResponse($request, $response, $attrValue);
}
/**
* Api method to create item attribute l11n
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeValueL11nCreate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
$attrL11n = $this->createAttributeValueL11nFromRequest($request);
$this->createModel($request->header->account, $attrL11n, ItemAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $attrL11n);
}
/**
* Api method to update ItemAttribute
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeUpdate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidUpdateResponse($request, $response, $val);
return;
}
/** @var Attribute $old */
$old = ItemAttributeMapper::get()
->with('type')
->with('type/defaults')
->with('value')
->where('id', (int) $request->getData('id'))
->execute();
$new = $this->updateAttributeFromRequest($request, clone $old);
if ($new->id === 0) {
// Set response header to invalid request because of invalid data
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidUpdateResponse($request, $response, $new);
return;
}
$this->updateModel($request->header->account, $old, $new, ItemAttributeMapper::class, 'item_attribute', $request->getOrigin());
if ($new->value->getValue() !== $old->value->getValue()) {
$this->updateModel($request->header->account, $old->value, $new->value, ItemAttributeValueMapper::class, 'attribute_value', $request->getOrigin());
}
$this->createStandardUpdateResponse($request, $response, $new);
}
/**
* Api method to delete ItemAttribute
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeDelete($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidDeleteResponse($request, $response, $val);
return;
}
$itemAttribute = ItemAttributeMapper::get()
->with('type')
->where('id', (int) $request->getData('id'))
->execute();
if ($itemAttribute->type->isRequired) {
$this->createInvalidDeleteResponse($request, $response, []);
return;
}
$this->deleteModel($request->header->account, $itemAttribute, ItemAttributeMapper::class, 'item_attribute', $request->getOrigin());
$this->createStandardDeleteResponse($request, $response, $itemAttribute);
}
/**
* Api method to update ItemAttributeTypeL11n
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeTypeL11nUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeTypeL11nUpdate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidUpdateResponse($request, $response, $val);
return;
}
/** @var BaseStringL11n $old */
$old = ItemAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute();
$new = $this->updateAttributeTypeL11nFromRequest($request, clone $old);
$this->updateModel($request->header->account, $old, $new, ItemAttributeTypeL11nMapper::class, 'item_attribute_type_l11n', $request->getOrigin());
$this->createStandardUpdateResponse($request, $response, $new);
}
/**
* Api method to delete ItemAttributeTypeL11n
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeTypeL11nDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeTypeL11nDelete($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidDeleteResponse($request, $response, $val);
return;
}
/** @var \Modules\ItemManagement\Models\ItemAttributeTypeL11n $itemAttributeTypeL11n */
$itemAttributeTypeL11n = ItemAttributeTypeL11nMapper::get()->where('id', (int) $request->getData('id'))->execute();
$this->deleteModel($request->header->account, $itemAttributeTypeL11n, ItemAttributeTypeL11nMapper::class, 'item_attribute_type_l11n', $request->getOrigin());
$this->createStandardDeleteResponse($request, $response, $itemAttributeTypeL11n);
}
/**
* Api method to update ItemAttributeType
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeTypeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeTypeUpdate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidUpdateResponse($request, $response, $val);
return;
}
/** @var AttributeType $old */
$old = ItemAttributeTypeMapper::get()->where('id', (int) $request->getData('id'))->execute();
$new = $this->updateAttributeTypeFromRequest($request, clone $old);
$this->updateModel($request->header->account, $old, $new, ItemAttributeTypeMapper::class, 'item_attribute_type', $request->getOrigin());
$this->createStandardUpdateResponse($request, $response, $new);
}
/**
* Api method to delete ItemAttributeType
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @todo: implement
*
* @since 1.0.0
*/
public function apiItemAttributeTypeDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeTypeDelete($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidDeleteResponse($request, $response, $val);
return;
}
/** @var \Modules\ItemManagement\Models\ItemAttributeType $itemAttributeType */
$itemAttributeType = ItemAttributeTypeMapper::get()->where('id', (int) $request->getData('id'))->execute();
$this->deleteModel($request->header->account, $itemAttributeType, ItemAttributeTypeMapper::class, 'item_attribute_type', $request->getOrigin());
$this->createStandardDeleteResponse($request, $response, $itemAttributeType);
}
/**
* Api method to update ItemAttributeValue
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeValueUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeValueUpdate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidUpdateResponse($request, $response, $val);
return;
}
/** @var AttributeValue $old */
$old = ItemAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute();
/** @var \Modules\Attribute\Models\Attribute $type */
$attr = ItemAttributeMapper::get()
->with('type')
->where('id', $request->getDataInt('attribute') ?? 0)
->execute();
$new = $this->updateAttributeValueFromRequest($request, clone $old, $attr);
$this->updateModel($request->header->account, $old, $new, ItemAttributeValueMapper::class, 'item_attribute_value', $request->getOrigin());
$this->createStandardUpdateResponse($request, $response, $new);
}
/**
* Api method to delete ItemAttributeValue
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeValueDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
return;
// @todo: I don't think values can be deleted? Only Attributes
// However, It should be possible to remove UNUSED default values
// either here or other function?
if (!empty($val = $this->validateAttributeValueDelete($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidDeleteResponse($request, $response, $val);
return;
}
/** @var \Modules\ItemManagement\Models\ItemAttributeValue $itemAttributeValue */
$itemAttributeValue = ItemAttributeValueMapper::get()->where('id', (int) $request->getData('id'))->execute();
$this->deleteModel($request->header->account, $itemAttributeValue, ItemAttributeValueMapper::class, 'item_attribute_value', $request->getOrigin());
$this->createStandardDeleteResponse($request, $response, $itemAttributeValue);
}
/**
* Api method to update ItemAttributeValueL11n
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeValueL11nUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeValueL11nUpdate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidUpdateResponse($request, $response, $val);
return;
}
/** @var BaseStringL11n $old */
$old = ItemAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id'));
$new = $this->updateAttributeValueL11nFromRequest($request, clone $old);
$this->updateModel($request->header->account, $old, $new, ItemAttributeValueL11nMapper::class, 'item_attribute_value_l11n', $request->getOrigin());
$this->createStandardUpdateResponse($request, $response, $new);
}
/**
* Api method to delete ItemAttributeValueL11n
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeValueL11nDelete(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateAttributeValueL11nDelete($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidDeleteResponse($request, $response, $val);
return;
}
/** @var \Modules\ItemManagement\Models\ItemAttributeValueL11n $itemAttributeValueL11n */
$itemAttributeValueL11n = ItemAttributeValueL11nMapper::get()->where('id', (int) $request->getData('id'))->execute();
$this->deleteModel($request->header->account, $itemAttributeValueL11n, ItemAttributeValueL11nMapper::class, 'item_attribute_value_l11n', $request->getOrigin());
$this->createStandardDeleteResponse($request, $response, $itemAttributeValueL11n);
}
}

View File

@ -15,18 +15,7 @@ declare(strict_types=1);
namespace Modules\ItemManagement\Controller;
use Modules\Admin\Models\NullAccount;
use Modules\Attribute\Models\Attribute;
use Modules\Attribute\Models\AttributeType;
use Modules\Attribute\Models\AttributeValue;
use Modules\Attribute\Models\NullAttribute;
use Modules\Attribute\Models\NullAttributeType;
use Modules\Attribute\Models\NullAttributeValue;
use Modules\ItemManagement\Models\Item;
use Modules\ItemManagement\Models\ItemAttributeMapper;
use Modules\ItemManagement\Models\ItemAttributeTypeL11nMapper;
use Modules\ItemManagement\Models\ItemAttributeTypeMapper;
use Modules\ItemManagement\Models\ItemAttributeValueL11nMapper;
use Modules\ItemManagement\Models\ItemAttributeValueMapper;
use Modules\ItemManagement\Models\ItemL11nMapper;
use Modules\ItemManagement\Models\ItemL11nTypeMapper;
use Modules\ItemManagement\Models\ItemMapper;
@ -43,8 +32,6 @@ use Modules\Media\Models\PathSettings;
use phpOMS\Localization\BaseStringL11n;
use phpOMS\Localization\BaseStringL11nType;
use phpOMS\Localization\ISO4217CharEnum;
use phpOMS\Localization\ISO639x1Enum;
use phpOMS\Localization\NullBaseStringL11n;
use phpOMS\Localization\NullBaseStringL11nType;
use phpOMS\Message\Http\HttpRequest;
use phpOMS\Message\Http\HttpResponse;
@ -157,8 +144,8 @@ final class ApiController extends Controller
public function apiItemCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemCreate($request))) {
$response->data['item_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
@ -312,8 +299,8 @@ final class ApiController extends Controller
public function apiItemPriceCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemPriceCreate($request))) {
$response->data['item_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
@ -371,252 +358,6 @@ final class ApiController extends Controller
return [];
}
/**
* Api method to create item attribute
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemAttributeCreate($request))) {
$response->data['attribute_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
return;
}
$attribute = $this->createItemAttributeFromRequest($request);
$this->createModel($request->header->account, $attribute, ItemAttributeMapper::class, 'attribute', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $attribute);
}
/**
* Method to create item attribute from request.
*
* @param RequestAbstract $request Request
*
* @return Attribute
*
* @since 1.0.0
*/
private function createItemAttributeFromRequest(RequestAbstract $request) : Attribute
{
$attribute = new Attribute();
$attribute->ref = (int) $request->getData('item');
$attribute->type = new NullAttributeType((int) $request->getData('type'));
if ($request->hasData('value')) {
$attribute->value = new NullAttributeValue((int) $request->getData('value'));
} else {
$newRequest = clone $request;
$newRequest->setData('value', $request->getData('custom'), true);
$value = $this->createAttributeValueFromRequest($newRequest);
$attribute->value = $value;
}
return $attribute;
}
/**
* Validate item attribute create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateItemAttributeCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['type'] = !$request->hasData('type'))
|| ($val['value'] = (!$request->hasData('value') && !$request->hasData('custom')))
|| ($val['item'] = !$request->hasData('item'))
) {
return $val;
}
return [];
}
/**
* Api method to create item attribute
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeUpdate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemAttributeUpdate($request))) {
$response->data['attribute_update'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
return;
}
$old = ItemAttributeMapper::get()
->with('type')
->with('type/defaults')
->with('value')
->where('id', (int) $request->getData('id'))
->execute();
$new = $this->updateItemAttributeFromRequest($request, $old->deepClone());
if ($new->id === 0) {
// Set response header to invalid request because of invalid data
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidUpdateResponse($request, $response, $new);
return;
}
$this->updateModel($request->header->account, $old, $new, ItemAttributeMapper::class, 'attribute', $request->getOrigin());
if ($new->value->getValue() !== $old->value->getValue()) {
$this->updateModel($request->header->account, $old->value, $new->value, ItemAttributeValueMapper::class, 'attribute_value', $request->getOrigin());
}
$this->createStandardUpdateResponse($request, $response, $new);
}
/**
* Method to create item attribute from request.
*
* @param RequestAbstract $request Request
*
* @return Attribute
*
* @since 1.0.0
*/
private function updateItemAttributeFromRequest(RequestAbstract $request, Attribute $new) : Attribute
{
if ($new->type->custom) {
// @question: we are overwriting the old value, could there be a use case where we want to create a new value and keep the old one?
$new->value->setValue($request->getData('value'), $new->type->datatype);
} else {
// @todo: fix by only accepting the value id to be used
// this is a workaround for now because the front end doesn't allow to dynamically show default values.
$value = $new->type->getDefaultByValue($request->getData('value'));
// Couldn't find matching default value
if ($value->id === 0) {
return new NullAttribute();
}
$new->value = $value;
}
return $new;
}
/**
* Validate item attribute create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateItemAttributeUpdate(RequestAbstract $request) : array
{
$val = [];
if (($val['id'] = !$request->hasData('id'))
|| ($val['value'] = (!$request->hasData('value') && !$request->hasData('custom')))
) {
return $val;
}
return [];
}
/**
* Api method to create item attribute l11n
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemAttributeTypeL11nCreate($request))) {
$response->data['attr_type_l11n_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
return;
}
$attrL11n = $this->createItemAttributeTypeL11nFromRequest($request);
$this->createModel($request->header->account, $attrL11n, ItemAttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $attrL11n);
}
/**
* Method to create item attribute l11n from request.
*
* @param RequestAbstract $request Request
*
* @return BaseStringL11n
*
* @since 1.0.0
*/
private function createItemAttributeTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n
{
$attrL11n = new BaseStringL11n();
$attrL11n->ref = $request->getDataInt('type') ?? 0;
$attrL11n->setLanguage(
$request->getDataString('language') ?? $request->header->l11n->language
);
$attrL11n->content = $request->getDataString('title') ?? '';
return $attrL11n;
}
/**
* Validate item attribute l11n create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateItemAttributeTypeL11nCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['title'] = !$request->hasData('title'))
|| ($val['type'] = !$request->hasData('type'))
) {
return $val;
}
return [];
}
/**
* Api method to create item attribute
*
@ -686,257 +427,6 @@ final class ApiController extends Controller
return [];
}
/**
* Api method to create item attribute type
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemAttributeTypeCreate($request))) {
$response->data['attr_type_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
return;
}
$attrType = $this->createAttributeTypeFromRequest($request);
$this->createModel($request->header->account, $attrType, ItemAttributeTypeMapper::class, 'attr_type', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $attrType);
}
/**
* Method to create item attribute from request.
*
* @param RequestAbstract $request Request
*
* @return AttributeType
*
* @since 1.0.0
*/
private function createAttributeTypeFromRequest(RequestAbstract $request) : AttributeType
{
$attrType = new AttributeType($request->getDataString('name') ?? '');
$attrType->datatype = $request->getDataInt('datatype') ?? 0;
$attrType->custom = $request->getDataBool('custom') ?? false;
$attrType->isRequired = $request->getDataBool('is_required') ?? false;
$attrType->validationPattern = $request->getDataString('validation_pattern') ?? '';
$attrType->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN);
$attrType->setFields($request->getDataInt('fields') ?? 0);
return $attrType;
}
/**
* Validate item attribute create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateItemAttributeTypeCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['title'] = !$request->hasData('title'))
|| ($val['name'] = !$request->hasData('name'))
) {
return $val;
}
return [];
}
/**
* Api method to create item attribute value
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemAttributeValueCreate($request))) {
$response->data['attr_value_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
return;
}
$attrValue = $this->createAttributeValueFromRequest($request);
$this->createModel($request->header->account, $attrValue, ItemAttributeValueMapper::class, 'attr_value', $request->getOrigin());
if ($attrValue->isDefault) {
$this->createModelRelation(
$request->header->account,
(int) $request->getData('type'),
$attrValue->id,
ItemAttributeTypeMapper::class, 'defaults', '', $request->getOrigin()
);
}
$this->createStandardCreateResponse($request, $response, $attrValue);
}
/**
* Method to create item attribute value from request.
*
* @param RequestAbstract $request Request
*
* @return AttributeValue
*
* @since 1.0.0
*/
private function createAttributeValueFromRequest(RequestAbstract $request) : AttributeValue
{
/** @var AttributeType $type */
$type = ItemAttributeTypeMapper::get()
->where('id', $request->getDataInt('type') ?? 0)
->execute();
$attrValue = new AttributeValue();
$attrValue->isDefault = $request->getDataBool('default') ?? false;
$attrValue->setValue($request->getData('value'), $type->datatype);
if ($request->hasData('title')) {
$attrValue->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN);
}
return $attrValue;
}
/**
* Validate item attribute value create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateItemAttributeValueCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['type'] = !$request->hasData('type'))
|| ($val['value'] = !$request->hasData('value'))
) {
return $val;
}
return [];
}
/**
* Api method to create item attribute l11n
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemAttributeValueL11nCreate($request))) {
$response->data['attr_value_l11n_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
return;
}
$attrL11n = $this->createAttributeValueL11nFromRequest($request);
$this->createModel($request->header->account, $attrL11n, ItemAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $attrL11n);
}
/**
* Method to create item attribute l11n from request.
*
* @param RequestAbstract $request Request
*
* @return BaseStringL11n
*
* @since 1.0.0
*/
private function createAttributeValueL11nFromRequest(RequestAbstract $request) : BaseStringL11n
{
$attrL11n = new BaseStringL11n();
$attrL11n->ref = $request->getDataInt('value') ?? 0;
$attrL11n->setLanguage(
$request->getDataString('language') ?? $request->header->l11n->language
);
$attrL11n->content = $request->getDataString('title') ?? '';
return $attrL11n;
}
/**
* Validate item attribute l11n create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateItemAttributeValueL11nCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['title'] = !$request->hasData('title'))
|| ($val['value'] = !$request->hasData('value'))
) {
return $val;
}
return [];
}
/**
* Api method to handle api item attributes
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemAttribute(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemAttributeValueL11nCreate($request))) {
$response->data['attr_value_l11n_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
return;
}
$attrL11n = $this->createAttributeValueL11nFromRequest($request);
$this->createModel($request->header->account, $attrL11n, ItemAttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $attrL11n);
}
/**
* Api method to create item l11n type
*
@ -953,8 +443,8 @@ final class ApiController extends Controller
public function apiItemL11nTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemL11nTypeCreate($request))) {
$response->data['item_l11n_type_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
@ -977,7 +467,7 @@ final class ApiController extends Controller
{
$itemL11nType = new BaseStringL11nType();
$itemL11nType->title = $request->getDataString('title') ?? '';
$itemL11nType->isRequired = (bool) ($request->getData('is_required') ?? false);
$itemL11nType->isRequired = $request->getDataBool('is_required') ?? false;
return $itemL11nType;
}
@ -1017,8 +507,8 @@ final class ApiController extends Controller
public function apiItemRelationTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemRelationTypeCreate($request))) {
$response->data['item_relation_type_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
@ -1080,8 +570,8 @@ final class ApiController extends Controller
public function apiItemL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateItemL11nCreate($request))) {
$response->data['item_l11n_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
@ -1151,8 +641,8 @@ final class ApiController extends Controller
public function apiFileCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateFileCreate($request))) {
$response->data['item_file_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
@ -1243,8 +733,8 @@ final class ApiController extends Controller
public function apiNoteCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateNoteCreate($request))) {
$response->data['item_note_create'] = new FormValidation($val);
$response->header->status = RequestStatusCode::R_400;
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}

View File

@ -4,7 +4,7 @@
*
* PHP Version 8.1
*
* @package Modules\ItemManagement\Models
* @package Modules\ItemManagement\Models\Attribute
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
@ -12,7 +12,7 @@
*/
declare(strict_types=1);
namespace Modules\ItemManagement\Models;
namespace Modules\ItemManagement\Models\Attribute;
use Modules\Attribute\Models\Attribute;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
@ -20,7 +20,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
/**
* Item mapper class.
*
* @package Modules\ItemManagement\Models
* @package Modules\ItemManagement\Models\Attribute
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0

View File

@ -4,7 +4,7 @@
*
* PHP Version 8.1
*
* @package Modules\ItemManagement\Models
* @package Modules\ItemManagement\Models\Attribute
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
@ -12,7 +12,7 @@
*/
declare(strict_types=1);
namespace Modules\ItemManagement\Models;
namespace Modules\ItemManagement\Models\Attribute;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use phpOMS\Localization\BaseStringL11n;
@ -20,7 +20,7 @@ use phpOMS\Localization\BaseStringL11n;
/**
* Item mapper class.
*
* @package Modules\ItemManagement\Models
* @package Modules\ItemManagement\Models\Attribute
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0

View File

@ -4,7 +4,7 @@
*
* PHP Version 8.1
*
* @package Modules\ItemManagement\Models
* @package Modules\ItemManagement\Models\Attribute
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
@ -12,7 +12,7 @@
*/
declare(strict_types=1);
namespace Modules\ItemManagement\Models;
namespace Modules\ItemManagement\Models\Attribute;
use Modules\Attribute\Models\AttributeType;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
@ -20,7 +20,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
/**
* Item mapper class.
*
* @package Modules\ItemManagement\Models
* @package Modules\ItemManagement\Models\Attribute
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0

View File

@ -4,7 +4,7 @@
*
* PHP Version 8.1
*
* @package Modules\ItemManagement\Models
* @package Modules\ItemManagement\Models\Attribute
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
@ -12,7 +12,7 @@
*/
declare(strict_types=1);
namespace Modules\ItemManagement\Models;
namespace Modules\ItemManagement\Models\Attribute;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use phpOMS\Localization\BaseStringL11n;
@ -20,7 +20,7 @@ use phpOMS\Localization\BaseStringL11n;
/**
* Item mapper class.
*
* @package Modules\ItemManagement\Models
* @package Modules\ItemManagement\Models\Attribute
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0

View File

@ -4,7 +4,7 @@
*
* PHP Version 8.1
*
* @package Modules\ItemManagement\Models
* @package Modules\ItemManagement\Models\Attribute
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
@ -12,7 +12,7 @@
*/
declare(strict_types=1);
namespace Modules\ItemManagement\Models;
namespace Modules\ItemManagement\Models\Attribute;
use Modules\Attribute\Models\AttributeValue;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
@ -20,7 +20,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
/**
* Item mapper class.
*
* @package Modules\ItemManagement\Models
* @package Modules\ItemManagement\Models\Attribute
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0

View File

@ -15,6 +15,7 @@ declare(strict_types=1);
namespace Modules\ItemManagement\Models;
use Modules\Editor\Models\EditorDocMapper;
use Modules\ItemManagement\Models\Attribute\ItemAttributeMapper;
use Modules\Media\Models\Media;
use Modules\Media\Models\MediaMapper;
use Modules\Media\Models\MediaType;