diff --git a/.gitignore b/.gitignore index 3209b68..d61f3b0 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ application/logs/* #codeigniter4 .env -!writeable/* +writeable/* !writeable/.htaccess !writeable/index.html !writeable/caceh/index.html diff --git a/app/Config/Constants.php b/app/Config/Constants.php index 0248d14..cc3c9ed 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -94,18 +94,18 @@ define('EVENT_PRIORITY_NORMAL', 100); define('EVENT_PRIORITY_HIGH', 10); define('MANGBOARD', [ - 'point' => ['unit' => getenv('mangboard.point.unit') ?: 1000], - 'admin' => ['level' => getenv('mangboard.admin.level') ?: 10], + 'point' => ['unit' => 1000], + 'admin' => ['level' => 10], 'manager' => [ 'level' => [ - 'min' => getenv('mangboard.manager.level.min') ?: 7, - 'max' => getenv('mangboard.manager.level.max') ?: 9, + 'min' => 6, + 'max' => 9, ] ], 'user' => [ 'level' => [ - 'min' => getenv('mangboard.user.level.min') ?: 1, - 'max' => getenv('mangboard.user.level.max') ?: 5, + 'min' => 1, + 'max' => 5, ] ], ]); diff --git a/app/Config/Logger.php b/app/Config/Logger.php index ab6997e..bf004c5 100644 --- a/app/Config/Logger.php +++ b/app/Config/Logger.php @@ -38,7 +38,7 @@ class Logger extends BaseConfig * * @var int|list */ - public $threshold = (ENVIRONMENT === 'production') ? 4 : 9; + public $threshold = (ENVIRONMENT === 'production') ? 6 : 9; /** * -------------------------------------------------------------------------- diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 75a2e27..41eb60b 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -9,10 +9,10 @@ $routes->get('/', 'Home::index'); $routes->group('cli', ['namespace' => 'App\Controllers\CLI'], function ($routes) { $routes->group('mangboard', ['namespace' => 'App\Controllers\CLI\Mangboard'], function ($routes) { $routes->group('user', static function ($routes) { - $routes->cli('point/(:num)/(:num)/(:any)', 'UserController::point/$1/$2/$3'); - }); - $routes->group('user', static function ($routes) { - $routes->cli('level/(:num)', 'UserController::level/$1'); + $routes->cli('point', 'UserController::point'); + $routes->cli('point/(:any)', 'UserController::point/$1'); + $routes->cli('level', 'UserController::level'); + $routes->cli('level/(:any)', 'UserController::level/$1'); }); }); }); diff --git a/app/Controllers/CLI/Mangboard/UserController.php b/app/Controllers/CLI/Mangboard/UserController.php index 63fbd27..b80d122 100644 --- a/app/Controllers/CLI/Mangboard/UserController.php +++ b/app/Controllers/CLI/Mangboard/UserController.php @@ -3,7 +3,6 @@ namespace App\Controllers\CLI\Mangboard; use App\Controllers\BaseController; -use App\Entities\Mangboard\UserEntity; use App\Models\Mangboard\UserModel; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; @@ -25,39 +24,56 @@ class UserController extends BaseController { // } - public function point(string $uid, int $point, string $sign = "plus") - { - $msg = []; - try { - $entity = $this->_model->getEntity($uid); - if (!$entity) { - throw new \Exception("해당 회원[{$uid}]이 없습니다."); + public function point($id = null, $point = null, string $sign = "+") + { + try { + $entitys = []; + if ($id) { + $entity = is_numeric($id) ? $this->_model->getEntityByPK(intval($id)) : $this->_model->getEntityByID($id); + if (!$entity) { + throw new \Exception(sprintf("해당 회원[%s:%s]이 없습니다.", gettype($id), $id)); + } + if (is_numeric($point)) { + $entitys[] = $this->_model->setPoint($entity, $point, $sign); + } + } else { + $entitys = $this->_model->getEntitys(); } - $old_point = $entity->getPoint(); - $entity->setPoint($point, $sign); - $entity = $this->_model->setEntity($entity); - $msg[] = "[{$entity}] 회원님의 포인트는 {$old_point}->{$entity->getPoint()} 입니다."; + foreach ($entitys as $entity) { + log_message("debug", __FUNCTION__ . "=>[{$entity}] 회원님의 Point는 {$entity->getPoint()} 입니다."); + } + return "완료되었습니다."; } catch (\Exception $e) { - $msg[] = $e->getMessage(); + log_message('error', '[ERROR] {exception}', ['exception' => $e]); + return $e->getMessage(); } - return implode("\n", $msg); } - public function level(string $uid) + public function level($id = null, $level = null) { - $msg = []; try { - $entity = $this->_model->getEntity($uid); - if (!$entity) { - throw new \Exception("해당 회원[{$uid}]이 없습니다."); + $entitys = []; + if ($id) { + $entity = is_numeric($id) ? $this->_model->getEntityByPK(intval($id)) : $this->_model->getEntityByID($id); + if (!$entity) { + throw new \Exception(sprintf("해당 회원[%s:%s]이 없습니다.", gettype($id), $id)); + } + if (is_numeric($level)) { + $entitys[] = $this->_model->checkLevel($entity, $level); + } + } else { + foreach ($this->_model->getEntitys() as $entity) { + $entitys[] = $this->_model->checkLevel($entity); + } } - $old_level = $entity->getLevel(); - $entity = $this->_model->setLevel($entity); - $msg[] = "[{$entity}] 회원님의 레벨은 {$old_level}->{$entity->getLevel()} 입니다."; + foreach ($entitys as $entity) { + log_message("debug", __FUNCTION__ . "=>[{$entity}] 회원님의 Level은 {$entity->getLevel()} 입니다."); + } + return "완료되었습니다."; } catch (\Exception $e) { - $msg[] = $e->getMessage(); + log_message('error', '[ERROR] {exception}', ['exception' => $e]); + return $e->getMessage(); } - return implode("\n", $msg); } } diff --git a/app/Entities/Mangboard/UserEntity.php b/app/Entities/Mangboard/UserEntity.php index 4381521..1c6e844 100644 --- a/app/Entities/Mangboard/UserEntity.php +++ b/app/Entities/Mangboard/UserEntity.php @@ -12,10 +12,13 @@ class UserEntity extends Entity public function __toString() { - return "{$this->getName()}"; + return "{$this->getPK()}:{$this->getID()}:{$this->getName()}"; } - - public function getUserID() + public function getPK() + { + return $this->attributes['pid']; + } + public function getID() { return $this->attributes['user_id']; } diff --git a/app/Models/Mangboard/BaseModel.php b/app/Models/Mangboard/BaseModel.php index 594623d..8869abf 100644 --- a/app/Models/Mangboard/BaseModel.php +++ b/app/Models/Mangboard/BaseModel.php @@ -45,11 +45,11 @@ class BaseModel extends Model protected $beforeDelete = []; protected $afterDelete = []; - protected function getEntity(string $uid) + final public function getEntity() { - return $this->asObject($this->returnType)->where($this->primaryKey, $uid)->first(); + return $this->asObject($this->returnType)->first(); } - protected function setEntity($entity) + final protected function setEntity($entity) { if ($entity->hasChanged()) { if (!$this->save($entity)) { @@ -59,7 +59,7 @@ class BaseModel extends Model return $entity;; } - protected function getEntitys(): array + final public function getEntitys(): array { return $this->asObject($this->returnType)->findAll(); } diff --git a/app/Models/Mangboard/UserModel.php b/app/Models/Mangboard/UserModel.php index 82db487..e7c3ebd 100644 --- a/app/Models/Mangboard/UserModel.php +++ b/app/Models/Mangboard/UserModel.php @@ -9,7 +9,6 @@ class UserModel extends BaseModel protected $table = 'mb_users'; protected $primaryKey = 'pid'; protected $useAutoIncrement = true; - // protected $returnType = 'array'; protected $returnType = UserEntity::class; protected $allowedFields = ['pid', 'user_id', 'passwd', 'user_name', 'user_email', 'user_state', 'user_level', 'user_point']; @@ -32,6 +31,17 @@ class UserModel extends BaseModel // 'created_at' => 'if_exist|valid_date', ]; + public function getEntityByPK(int $uid): null|UserEntity + { + $this->where($this->primaryKey, $uid); + return $this->getEntity(); + } + public function getEntityByID(string $id): null|UserEntity + { + $this->where('user_id', $id); + return $this->getEntity(); + } + public function setPoint(UserEntity $entity, int $point, $sign = '+'): UserEntity { switch ($sign) { @@ -39,38 +49,57 @@ class UserModel extends BaseModel if ($entity->getPoint() < $point) { throw new \Exception("기존포인트:{$entity->getPoint()}가 감소 포인트:-{$point} 작습니다.\n"); } - $entity->setPoint($entity->getPoint() - $point); + $point = $entity->getPoint() - $point; break; case '+': - $entity->setPoint($entity->getPoint() + $point); + $point = $entity->getPoint() + $point; break; default: - throw new \Exception("{$sign}에 해당하는 작업은 수행할수 없습니다.\n"); + throw new \Exception(__FUNCTION__ . "에서는 {$sign}은 사용할수 없습니다.\n"); // break; } - return $this->setEntity($entity); + if ($entity->getPoint() != $point) { + $old_point = $entity->getPoint(); + $entity->setPoint($point); + $entity = $this->setEntity($entity); + log_message("notice", __FUNCTION__ . "=>{$entity}의 Point가 {$old_point}에서 {$entity->getPoint()}로 변경되었습니다."); + } + return $entity; } - private function getLevelByPoint(UserEntity $entity): int + final public function setLevel(UserEntity $entity, int $level): UserEntity { - return intval($entity->getPoint() / MANGBOARD['point']['unit'] * MANGBOARD['point']['unit'] / MANGBOARD['point']['unit']); + if ($entity->getLevel() != $level) { + $old_level = $entity->getLevel(); + $entity->setLevel($level); + $entity = $this->setEntity($entity); + log_message("notice", __FUNCTION__ . "=>{$entity}의 Level이 {$old_level}에서 {$entity->getLevel()}로 변경되었습니다."); + } + return $entity; } - final public function setLevel(UserEntity $entity): UserEntity + final public function checkLevel(UserEntity $entity, int $level = null): UserEntity { - //관리자면 변경불가 - if ($entity->getUserID() == MANGBOARD['admin']['level']) { - return $entity; - } - //운영자면 변경불가 - if (MANGBOARD['manager']['level']['min'] <= $entity->getLevel() <= MANGBOARD['manager']['level']['max']) { - return $entity; - } //사용자 Point별 Level 계산 - $level = $this->getLevelByPoint($entity); + $level = intval(is_numeric($level) ? $level : $entity->getPoint() / MANGBOARD['point']['unit'] * MANGBOARD['point']['unit'] / MANGBOARD['point']['unit']); + + //관리자면 변경불가 + if ($entity->getLevel() == MANGBOARD['admin']['level']) { + return $entity; + } + + //운영자면 7~9 + if (MANGBOARD['manager']['level']['min'] <= $entity->getLevel() && $entity->getLevel() <= MANGBOARD['manager']['level']['max']) { + $level = $level < MANGBOARD['manager']['level']['min'] ? MANGBOARD['manager']['level']['min'] : $level; + $level = MANGBOARD['manager']['level']['max'] < $level ? MANGBOARD['manager']['level']['max'] : $level; + } + // echo "point:" . $entity->getPoint() . ",level:" . $level . "\n"; + //사용자 Level 1~5; - $level = $level < MANGBOARD['user']['level']['min'] ? MANGBOARD['user']['level']['min'] : $level; - $level = MANGBOARD['user']['level']['max'] < $level ? MANGBOARD['user']['level']['max'] : $level; - $entity->setLevel($level); - return $this->setEntity($entity); + if (MANGBOARD['user']['level']['min'] <= $entity->getLevel() && $entity->getLevel() <= MANGBOARD['user']['level']['max']) { + $level = $level < MANGBOARD['user']['level']['min'] ? MANGBOARD['user']['level']['min'] : $level; + $level = MANGBOARD['user']['level']['max'] < $level ? MANGBOARD['user']['level']['max'] : $level; + } + // echo "point:" . $entity->getPoint() . ",level:" . $level . "\n"; + return $this->setLevel($entity, $level); } } diff --git a/writable/logs/log-2024-08-27.log b/writable/logs/log-2024-08-27.log new file mode 100644 index 0000000..cf6559d --- /dev/null +++ b/writable/logs/log-2024-08-27.log @@ -0,0 +1,6 @@ +NOTICE - 2024-08-27 07:31:25 --> setPoint:3:idcjp:파란의 Point가 3314에서 4314로 변경되었습니다. +NOTICE - 2024-08-27 07:48:01 --> setLevel3:idcjp:파란의 Level이 3에서 4로 변경되었습니다. +DEBUG - 2024-08-27 07:59:33 --> [1:admin:슈퍼바이저] 회원님의 Level은 10 입니다. +DEBUG - 2024-08-27 07:59:33 --> [3:idcjp:파란] 회원님의 Level은 4 입니다. +DEBUG - 2024-08-27 07:59:50 --> [1:admin:슈퍼바이저] 회원님의 Point는 1060 입니다. +DEBUG - 2024-08-27 07:59:50 --> [3:idcjp:파란] 회원님의 Point는 4314 입니다.