session = null; } public function createCTPLApplication(Request $req, EntityManagerInterface $em, InsuranceDataValidator $ins_validator, InsuranceConnector $insurance) { // check parameters $required_params = [ 'client_type', 'first_name', 'last_name', 'corporate_name', 'address_number', 'address_barangay', 'address_city', 'address_province', 'zipcode', 'mobile_number', 'email_address', 'make', 'model', 'series', 'color', 'plate_number', 'mv_file_number', 'motor_number', 'serial_chassis', 'year_model', 'mv_type_id', 'body_type', 'is_public', 'line', ]; // check required parameters and api key $res = $this->checkParamsAndKey($req, $em, $required_params); if ($res->isError()) return $res->getReturnResponse(); // create client data $client_data = new ClientData(); $this->setClientData($req, $client_data); // check if client data values are valid $error_message = $ins_validator->validateClientData($client_data); if ($error_message != null) { error_log('client data values are not valid ' . $error_message); // return error message $res->setError(true) ->setErrorMessage($error_message); return $res->getReturnResponse(); } $result = $insurance->processApplication($client_data); // check status of result if ($result['status'] == 'error') { // get message and return error message $message = $result['message']; $res->setError(true) ->setErrorMessage($message); return $res->getReturnResponse(); } // return data portion of result received from insurance api $data = $result['data']; $res->setData($data); return $res->getReturnResponse(); } protected function setClientData(Request $req, ClientData $client_data) { // set client info part $client_data->setClientType($req->request->get('client_type', '')) ->setFirstName($req->request->get('first_name', '')) ->setMiddleName($req->request->get('middle_name', '')) ->setSurname($req->request->get('last_name', '')) ->setCorporateName($req->request->get('corporate_name', '')); // set the client contact info part $client_data->setAddressNumber($req->request->get('address_number', '')) ->setAddressStreet($req->request->get('address_street', '')) ->setAddressBuilding($req->request->get('address_building', '')) ->setAddressBarangay($req->request->get('address_barangay', '')) ->setAddressCity($req->request->get('address_city', '')) ->setAddressProvince($req->request->get('address_province', '')) ->setZipcode($req->request->get('zipcode', 0)) ->setMobileNumber($req->request->get('mobile_number', '')) ->setEmailAddress($req->request->get('email_address', '')); // set the car info part $client_data->setMake($req->request->get('make', '')) ->setModel($req->request->get('model', '')) ->setSeries($req->request->get('series', '')) ->setColor($req->request->get('color', '')) ->setPlateNumber($req->request->get('plate_number', '')) ->setMvFileNumber($req->request->get('mv_file_number', '')) ->setMotorNumber($req->request->get('motor_number', '')) ->setSerialChassis($req->request->get('serial_chassis', '')) ->setYearModel($req->request->get('year_model', 0)) ->setMvTypeID($req->request->get('mv_type_id', 0)) ->setBodyType($req->request->get('body_type', '')) ->setLine($req->request->get('line', '')) ->setPublic($req->request->get('is_public', false)); } protected function checkMissingParameters(Request $req, $params = []) { $missing = []; // check if parameters are there foreach ($params as $param) { if ($req->getMethod() == 'GET') { $check = $req->query->get($param); if (empty($check)) $missing[] = $param; } else if ($req->getMethod() == 'POST') { $check = $req->request->get($param); if (empty($check)) $missing[] = $param; } else return $params; } return $missing; } protected function checkAPIKey($em, $api_key) { // find the api key (session id) $session = $em->getRepository(MobileSession::class)->find($api_key); if ($session == null) return null; return $session; } protected function checkParamsAndKey(Request $req, $em, $params) { // returns APIResult object $res = new APIResult(); // check for api_key in query string $api_key = $req->query->get('api_key'); if (empty($api_key)) { $res->setError(true) ->setErrorMessage('Missing API key'); return $res; } // check missing parameters $missing = $this->checkMissingParameters($req, $params); if (count($missing) > 0) { $miss_string = implode(', ', $missing); $res->setError(true) ->setErrorMessage('Missing parameter(s): ' . $miss_string); return $res; } // check api key $sess = $this->checkAPIKey($em, $req->query->get('api_key')); if ($sess == null) { $res->setError(true) ->setErrorMessage('Invalid API Key'); return $res; } // store session $this->session = $sess; return $res; } }