diff --git a/app/Classes/Modules/Segments/ControllersLogic/UpdateConstantPostcodeLogic.php b/app/Classes/Modules/Segments/ControllersLogic/UpdateConstantPostcodeLogic.php index 82edc1a2..f39fdb29 100644 --- a/app/Classes/Modules/Segments/ControllersLogic/UpdateConstantPostcodeLogic.php +++ b/app/Classes/Modules/Segments/ControllersLogic/UpdateConstantPostcodeLogic.php @@ -14,6 +14,8 @@ use App\Classes\Modules\Segments\Standards\Rules\CanUpdateConstant; use App\Classes\Modules\Segments\DataTransferObjects\ConstantObject; use App\Classes\Modules\Segments\Services\AddItemToConstantValueArray; use App\Classes\Modules\Segments\Services\RemoveItemFromConstantValueArray; +use App\Classes\Exceptions\ResourceNotFoundException; +use App\Classes\Modules\Segments\Services\CreatesConstant; class UpdateConstantPostcodeLogic extends AbstractControllerLogic { @@ -46,6 +48,8 @@ class UpdateConstantPostcodeLogic extends AbstractControllerLogic /** @var RemoveItemFromConstantValueArray */ private $removeItemFromConstantValueArray; + /** @var CreatesConstant */ + private $createsConstant; /** * UpdateConstantLogic constructor. @@ -54,9 +58,18 @@ class UpdateConstantPostcodeLogic extends AbstractControllerLogic * @param FetchesSegment $fetchesSegment * @param FetchesConstant $fetchesConstant * @param AddItemToConstantValueArray $addItemToConstantValueArray + * @param CreatesConstant $createsConstant * @param RemoveItemFromConstantValueArray $removeItemFromConstantValueArray */ - public function __construct(CanUpdateConstant $canUpdateConstant, UpdatesConstant $updatesConstant, FetchesSegment $fetchesSegment, FetchesConstant $fetchesConstant,AddItemToConstantValueArray $addItemToConstantValueArray, RemoveItemFromConstantValueArray $removeItemFromConstantValueArray) + public function __construct( + CanUpdateConstant $canUpdateConstant, + UpdatesConstant $updatesConstant, + FetchesSegment $fetchesSegment, + FetchesConstant $fetchesConstant, + AddItemToConstantValueArray $addItemToConstantValueArray, + RemoveItemFromConstantValueArray $removeItemFromConstantValueArray, + CreatesConstant $createsConstant + ) { $this->canUpdateConstant = $canUpdateConstant; $this->updatesConstant = $updatesConstant; @@ -64,6 +77,7 @@ class UpdateConstantPostcodeLogic extends AbstractControllerLogic $this->fetchesConstant = $fetchesConstant; $this->addItemToConstantValueArray = $addItemToConstantValueArray; $this->removeItemFromConstantValueArray = $removeItemFromConstantValueArray; + $this->createsConstant = $createsConstant; } /** * @param Request $request @@ -76,24 +90,42 @@ class UpdateConstantPostcodeLogic extends AbstractControllerLogic { $segment = $this->fetchesSegment->execute(['id' => $request->route('id')]); - $constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $request->input('reference')]); + try { + $constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $request->input('reference')]); - $object = new ConstantObject($constant->reference, $this->addItemToConstantValueArray->execute($constant->value, $request->input('postcode'))); - $this->canUpdateConstant->passes($object); + $constantValue = $this->addItemToConstantValueArray->execute($constant->value, $request->input('postcode')); + + $object = new ConstantObject($request->input('reference'), $constantValue); + + } catch (ResourceNotFoundException $exception){ + + $constantObject = [$request->input('postcode')]; + + $object = new ConstantObject( + $request->input('reference'), + $constantObject + ); + + $constant = $this->createsConstant->execute($segment, $object); + } + + try { + // check if postcode exist in the opposite constant, and delete it + $oppositeConstant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $request->input('reference') == SegmentConstants::CENTER_POSTCODE ? SegmentConstants::OUTSTATION_POSTCODE : SegmentConstants::CENTER_POSTCODE]); + + $oppositeConstantValue = $this->removeItemFromConstantValueArray->execute($oppositeConstant->value, $request->input('postcode')); + + $oppositeObject = new ConstantObject($request->input('reference') == SegmentConstants::CENTER_POSTCODE ? SegmentConstants::OUTSTATION_POSTCODE : SegmentConstants::CENTER_POSTCODE, $oppositeConstantValue); + + $this->updatesConstant->execute($oppositeConstant, $oppositeObject); + + } catch (ResourceNotFoundException $exception){ + // if opposite constant does not exist, do nothing + } $constant = $this->updatesConstant->execute($constant, $object); - $oppositeConstant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $request->input('reference') == SegmentConstants::CENTER_POSTCODE ? SegmentConstants::OUTSTATION_POSTCODE : SegmentConstants::CENTER_POSTCODE]); - - $oppositeObject = new ConstantObject($request->input('reference') == SegmentConstants::CENTER_POSTCODE ? SegmentConstants::OUTSTATION_POSTCODE : SegmentConstants::CENTER_POSTCODE, $this->removeItemFromConstantValueArray->execute($oppositeConstant->value, $request->input('postcode'))); - - $oppositeConstant = $this->updatesConstant->execute($oppositeConstant, $oppositeObject); - - - return $this->response([ - 'CENTER_POSTCODE' => $constant->reference == SegmentConstants::CENTER_POSTCODE ? new ConstantResource($constant) : New ConstantResource($oppositeConstant), - 'OUTSTATION_POSTCODE' => $constant->reference == SegmentConstants::OUTSTATION_POSTCODE ? new ConstantResource($constant) : New ConstantResource($oppositeConstant), - ]); + return $this->resourceResponse(new ConstantResource($constant)); } } \ No newline at end of file