canAuthenticateUser = $canAuthenticateUser; $this->authenticatesUser = $authenticatesUser; $this->generatesAuthenticationToken = $generatesAuthenticationToken; $this->fetchesUser = $fetchesUser; $this->authenticationRedirect = $authenticationRedirect; $this->connectCompanyModuleToExchangeCompany = $connectCompanyModuleToExchangeCompany; } /** * @param Request $request * @return array * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\AccessUnauthorisedException * @throws \App\Classes\Exceptions\RequestValidationException */ public function execute(Request $request): array { $object = new AuthenticationCredentialsObject($request->input('email'), $request->input('password')); $this->canAuthenticateUser->passes($object); $this->authenticatesUser->execute($object); $user = $this->fetchesUser->execute(['email' => $object->getEmail()]); $companyModule = $user->companyModule()->first(); $this->connectCompanyModuleToExchangeCompany->execute($companyModule, $request->route('exchange_company_id')); return ['shipping_company_module_id' => $companyModule->id]; } }