'Update User', 'message' => 'You have successfully update a user' ]; } /** @var FetchesUser */ private $fetchesUser; /** @var CanUpdateCompany */ private $canUpdateCompany; /** @var UpdatesCompany */ private $updatesCompany; /** @var CanCreateDocument */ private $canCreateDocument; /** @var CreatesDocument */ private $createsDocument; /** @var CanCreateFile */ private $canCreateFIle; /** @var CreatesFile */ private $createsFile; /** @var Convert64ToFile */ private $convert64ToFile; /** * UpdateUserLogic constructor. * @param FetchesUser $fetchesUser * @param CanUpdateCompany $canUpdateCompany * @param UpdatesCompany $updatesCompany * @param CanCreateDocument $canCreateDocument * @param CreatesDocument $createsDocument * @param CanCreateFile $canCreateFile * @param CreatesFile $createsFile * @param Convert64ToFile $convert64ToFile */ public function __construct( FetchesUser $fetchesUser, CanUpdateCompany $canUpdateCompany, UpdatesCompany $updatesCompany, CanCreateDocument $canCreateDocument, CreatesDocument $createsDocument, CanCreateFile $canCreateFile, CreatesFile $createsFile, Convert64ToFile $convert64ToFile ) { $this->fetchesUser = $fetchesUser; $this->canUpdateCompany = $canUpdateCompany; $this->updatesCompany = $updatesCompany; $this->canCreateDocument = $canCreateDocument; $this->createsDocument = $createsDocument; $this->canCreateFile = $canCreateFile; $this->createsFile = $createsFile; $this->convert64ToFile = $convert64ToFile; } /** * @param Request $request * @return JsonResponse * @throws ErrorException */ public function logic(Request $request) : JsonResponse { try { DB::beginTransaction(); $user_query = $this->fetchesUser->execute(['id' => \Auth::user()->id]); $company_query = $user_query->company()->first(); $company_object = new CompanyObject( $request->input('company_name', $company_query->name), $request->input('company_reference', $company_query->refence), $request->input('type', $company_query->type) ); $this->canUpdateCompany->passes($company_object); $company_query = $this->updatesCompany->execute($company_query, $company_object); $document_type = $company_query->type == 1 ? DocumentType::COMPANY_PUBLIC_SMS_REGISTER : DocumentType::COMPANY_PERSONAL_IC; $document_object = new DocumentObject( $user_query->id, OwnerType::COMPANY, $document_type, $request->input('document_reference'), ObjectStatus::PENDING, null, null, null, null ); $this->canCreateDocument->passes($document_object); $document_query = $this->createsDocument->execute($document_object); $file = $this->convert64ToFile->convert($request->input('file')); $file_type = $company_query->type == 1 ? FileType::COMPANY_PUBLIC_SMS_REGISTER : FileType::COMPANY_PERSONAL_IC; $file_object = new FileObject( $document_query->id, !empty($file[0]) ? json_encode($file[0]) : null, $file_type ); $this->canCreateFile->passes($file_object); $file_query = $this->createsFile->execute($file_object); DB::commit(); return $this->resourceResponse(new UserResource(\Auth::user())); } catch (\Exception $exception) { throw new ErrorException($exception->getMessage(), $exception->getCode()); } } }