| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | 
							- <?php
 
- namespace cx_newsletter;
 
- use \wp_rest_request;
 
- use \exception;
 
- class messages_send_endpoint
 
- extends rest_endpoint
 
- implements rest_endpoint_interface {
 
-     use rest_endpoint_with_apikey;
 
-     public function get_method() : string {
 
-         return 'POST';
 
-     }   
 
-     public function get_route() : string {
 
-         return '/message/send/';
 
-     }
 
-     public function action(wp_rest_request $request) : array {
 
-         if (!$this->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;
 
- }
 
 
  |