check_request_apikey($request)) { return $this->bad_apikey_response(); } $response = new response_builder(); $params = $request->get_json_params(); if (!is_array($params)) { return $response ->set_code(response_code::ERROR) ->set_status(response_status::INCOMPLETE) ->set_message('Request must be JSON') ->build(); } if (!array_key_exists('PhoneNumber', $params)) { return $response ->set_code(response_code::NO_PHONE_NUMBER) ->set_status(response_status::INCOMPLETE) ->set_message('Phone number must be specified in the request.') ->build(); } if (!array_key_exists('Campaign', $params)) { return $response ->set_code(response_code::NO_PHONE_NUMBER) ->set_status(response_status::INCOMPLETE) ->set_message('Campaign must be specified in the request.') ->build(); } try { $this->prepare(); $phone_number = $params['PhoneNumber']; $campaign = intval($params['Campaign']); $this->send($phone_number, $campaign); } catch (exception $exception) { return $response ->set_code(response_code::ERROR) ->set_status(response_status::ERROR) ->set_message($exception->getMessage()) ->build(); } return $response ->set_code(response_code::SUCCESS) ->set_status(response_status::SUCCESS) ->set_message('Successfull saved messages in send log.') ->set_content('') ->build(); } private function send(string $phone_number, int $campaign_id) : void { $filter = [ 'phone_number' => $phone_number ]; $customers = $this->customers_mapper->load_all($filter); if (empty($customers)) { throw new exception('Customer with phone number does not exists.'); } $customer = $customers[0]; $campaign = new campaign($campaign_id); $this->campaigns_repository->complete($campaign); $this->send_log_repository->mark_send($campaign, $customer); } private function prepare() : void { $this->campaigns_repository = new campaigns_repository( $this->get_database(), $this->get_tables() ); $this->send_log_repository = new send_log_repository( $this->get_database(), $this->get_tables() ); $this->customers_mapper = new customers_mapper( $this->get_database(), $this->get_tables() ); $this->messages_mapper = new messages_mapper( $this->get_database(), $this->get_tables() ); } private campaigns_repository $campaigns_repository; private send_log_repository $send_log_repository; private customers_mapper $customers_mapper; private messages_mapper $messages_mapper; }