Files
izyim/app/Classes/Modules/Orders/Processors/ConfirmsOrder.php
Omair Saleh 43a9e0ca03 large commit
2019-05-18 12:14:31 +08:00

68 lines
1.7 KiB
PHP

<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
use App\Classes\Modules\Orders\Services\Processors\updatesStep;
use App\Classes\Modules\Orders\Services\SetsOrderWarehouse;
use App\Classes\Modules\Orders\Services\Steps\GenerateOrderSteps;
use App\Classes\ValueObjects\Constants\HttpStatus;
use Illuminate\Http\JsonResponse;
class ConfirmsOrder
{
use updatesStep;
/** @var GenerateOrderSteps */
private $generateOrderSteps;
/** @var SetsOrderWarehouse */
private $setOrderWarehouse;
/**
* ConfirmsOrder constructor.
*/
public function __construct()
{
$this->setOrderWarehouse = new SetsOrderWarehouse();
$this->generateOrderSteps = new GenerateOrderSteps();
}
/**
* @param OrderObject $order
* @param StepObject $step
* @param int $warehouseId
* @return JsonResponse
* @throws InternalServerErrorException
*/
public function execute(OrderObject $order, StepObject $step, ?int $warehouseId = null){
try {
if($warehouseId){
$order->setWarehouseId($warehouseId);
$this->setOrderWarehouse->execute($order);
}
$this->generateOrderSteps->execute($order);
$this->completeStep($order, $step);
return new JsonResponse(null, HttpStatus::RESOURCE_CREATED);
} catch (\Exception $exception){
throw new InternalServerErrorException("Failed to update order step because {$exception->getMessage()}");
}
}
}