refactor(Core): refactor and optimize code
This commit is contained in:
@@ -2,51 +2,80 @@
|
||||
namespace Sodino\Repositories;
|
||||
|
||||
use Sodino\Models\Rule;
|
||||
use Sodino\Core\Cache;
|
||||
|
||||
/**
|
||||
* Rule Repository
|
||||
*/
|
||||
class RuleRepository {
|
||||
private $table_name;
|
||||
private $cache;
|
||||
private $cache_group = 'rules';
|
||||
private $cache_duration = 3600;
|
||||
|
||||
public function __construct() {
|
||||
global $wpdb;
|
||||
$this->table_name = $wpdb->prefix . 'sodino_rules';
|
||||
$this->cache = Cache::getInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all rules
|
||||
*/
|
||||
public function getAll() {
|
||||
global $wpdb;
|
||||
$results = $wpdb->get_results("SELECT * FROM {$this->table_name} ORDER BY priority DESC, id ASC", ARRAY_A);
|
||||
$rules = [];
|
||||
foreach ($results as $result) {
|
||||
$rules[] = new Rule($result);
|
||||
}
|
||||
return $rules;
|
||||
return $this->cache->remember('all_rules', function() {
|
||||
global $wpdb;
|
||||
$results = $wpdb->get_results(
|
||||
"SELECT * FROM {$this->table_name} ORDER BY priority DESC, id ASC",
|
||||
ARRAY_A
|
||||
);
|
||||
$rules = [];
|
||||
foreach ($results as $result) {
|
||||
$rules[] = new Rule($result);
|
||||
}
|
||||
return $rules;
|
||||
}, $this->cache_duration, $this->cache_group);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get rule by ID
|
||||
*/
|
||||
public function getById($id) {
|
||||
global $wpdb;
|
||||
$result = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$this->table_name} WHERE id = %d", $id), ARRAY_A);
|
||||
return $result ? new Rule($result) : null;
|
||||
return $this->cache->remember("rule_{$id}", function() use ($id) {
|
||||
global $wpdb;
|
||||
$result = $wpdb->get_row(
|
||||
$wpdb->prepare("SELECT * FROM {$this->table_name} WHERE id = %d", $id),
|
||||
ARRAY_A
|
||||
);
|
||||
return $result ? new Rule($result) : null;
|
||||
}, $this->cache_duration, $this->cache_group);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get enabled rules
|
||||
*/
|
||||
public function getEnabled() {
|
||||
global $wpdb;
|
||||
$results = $wpdb->get_results("SELECT * FROM {$this->table_name} WHERE enabled = 1 ORDER BY priority DESC, id ASC", ARRAY_A);
|
||||
$rules = [];
|
||||
foreach ($results as $result) {
|
||||
$rules[] = new Rule($result);
|
||||
}
|
||||
return $rules;
|
||||
return $this->cache->remember('enabled_rules', function() {
|
||||
global $wpdb;
|
||||
$now = current_time('mysql');
|
||||
$results = $wpdb->get_results(
|
||||
$wpdb->prepare(
|
||||
"SELECT * FROM {$this->table_name}
|
||||
WHERE enabled = 1
|
||||
AND (start_date IS NULL OR start_date <= %s)
|
||||
AND (end_date IS NULL OR end_date >= %s)
|
||||
ORDER BY priority DESC, id ASC",
|
||||
$now,
|
||||
$now
|
||||
),
|
||||
ARRAY_A
|
||||
);
|
||||
$rules = [];
|
||||
foreach ($results as $result) {
|
||||
$rules[] = new Rule($result);
|
||||
}
|
||||
return $rules;
|
||||
}, $this->cache_duration, $this->cache_group);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -59,11 +88,16 @@ class RuleRepository {
|
||||
|
||||
if ($rule->id) {
|
||||
$wpdb->update($this->table_name, $data, ['id' => $rule->id]);
|
||||
return $rule->id;
|
||||
$id = $rule->id;
|
||||
} else {
|
||||
$wpdb->insert($this->table_name, $data);
|
||||
return $wpdb->insert_id;
|
||||
$id = $wpdb->insert_id;
|
||||
}
|
||||
|
||||
// Clear cache
|
||||
$this->clearCache();
|
||||
|
||||
return $id;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -71,6 +105,31 @@ class RuleRepository {
|
||||
*/
|
||||
public function delete($id) {
|
||||
global $wpdb;
|
||||
return $wpdb->delete($this->table_name, ['id' => $id]);
|
||||
$result = $wpdb->delete($this->table_name, ['id' => $id]);
|
||||
|
||||
// Clear cache
|
||||
$this->clearCache();
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Increment usage count
|
||||
*/
|
||||
public function incrementUsage($id) {
|
||||
global $wpdb;
|
||||
return $wpdb->query(
|
||||
$wpdb->prepare(
|
||||
"UPDATE {$this->table_name} SET usage_count = usage_count + 1 WHERE id = %d",
|
||||
$id
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear cache
|
||||
*/
|
||||
private function clearCache() {
|
||||
$this->cache->clearGroup($this->cache_group);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user