'Approve Document', 'message' => 'You have successfully approved the Document' ]; } /** @var CanApproveDocument*/ private $canApproveDocument; /** @var ApprovesDocument */ private $approvesDocument; /** @var RejectsDocument */ private $rejectsDocument; /** @var FetchesDocument */ private $fetchesDocument; /** @var UpdatesCompanyStatus */ private $updatesCompanyStatus; /** * ApproveIdentificationDocumentLogic constructor. * @param CanApproveDocument $canApproveDocument * @param ApprovesDocument $approvesDocument * @param RejectsDocument $rejectsDocument * @param FetchesDocument $fetchesDocument * @param UpdatesCompanyStatus $updatesCompanyStatus */ public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus) { $this->canApproveDocument = $canApproveDocument; $this->approvesDocument = $approvesDocument; $this->rejectsDocument = $rejectsDocument; $this->fetchesDocument = $fetchesDocument; $this->updatesCompanyStatus = $updatesCompanyStatus; } /** * @param Request $request * @return JsonResponse * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException */ public function logic(Request $request) : JsonResponse { $status = $request->route('status'); /** @var Document $document */ $document = $this->fetchesDocument->execute(['id' => $request->route('document_id')]); $this->canApproveDocument->passes(); $document = $status === 'approve' ? $this->approvesDocument->execute($document) : $this->rejectsDocument->execute($document); $this->updatesCompanyStatus->execute($document->owner, $status === 'approve' ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_SUBMISSION); return $this->resourceResponse(new DocumentResource($document)); } }