has_id()) { throw $this->get_has_id_exception(); } $converter = new campaigns_converter(); $converter->load_object($target); $result = $this->get_database()->insert( $this->get_tables()->campaigns(), $converter->get_array() ); if ($result === false) { throw $this->get_exception('create'); } return $this->complete( new campaign($this->get_database()->insert_id) ); } public function complete(campaign $target) : campaign { if (!$target->has_id()) { throw $this->get_blank_id_exception(); } $query = new \cx_appengine\string_builder(); $query->push('select * '); $query->push('from '.$this->get_tables()->campaigns().' '); $query->push('where id=%d'); $sql = $this->get_database()->prepare($query, $target->get_id()); $row = $this->get_database()->get_row($sql, ARRAY_A); if ($row === null ) { throw $this->get_exception('complete'); } $converter = new campaigns_converter(); $converter->load_array($row); $target = $converter->get_object(); $mapper = new messages_mapper( $this->get_database(), $this->get_tables() ); $target->message = $mapper->complete($target->message); return $target; } public function load_all(array $filters = [], ?int $limit = null) : array { $query = new \cx_appengine\string_builder(); $query->push('select * '); $query->push('from '.$this->get_tables()->campaigns().' '); $query->push($this->parse_filters($filters)); $query->push($this->parse_limit($limit)); $query->push('order by id desc'); $result = $this->get_database()->get_results($query->get(), ARRAY_A); if ($result === null) { throw $this->get_exception('load_all'); } $campaigns = []; $converter = new campaigns_converter(); $mapper = new messages_mapper( $this->get_database(), $this->get_tables() ); foreach ($result as $row) { $target = $converter->load_array($row)->get_object(); $target->message = $mapper->complete($target->message); array_push($campaigns, $target); } return $campaigns; } public function load_next(campaign_type $type) : ?campaign { $converter = new campaign_type_converter(); $filters = []; $filters['finalized'] = null; $filters['type'] = $converter->load_enum($type)->get_string(); $nexts = $this->load_all($filters); if (empty($nexts)) { return null; } return $nexts[0]; } public function save(campaign $target) : ?campaign { if (!$target->has_id()) { throw $this->get_blank_id_exception(); } $converter = new campaigns_converter(); $converter->load_object($target); $condition = []; $condition['id'] = $target->get_id(); $result = $this->get_database()->update( $this->get_tables()->campaigns(), $converter->get_array(), $condition ); if ($result === false) { throw $this->get_exception('save'); } return $this->complete($target); } }