| 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;
- }
|