From e87ce3e741ceb2fdf1dd40cca0379e62d435b92b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0?= Date: Fri, 23 Aug 2024 19:48:19 +0900 Subject: [PATCH] automation init... --- app/Config/Constants.php | 15 +++- .../CLI/Mangboard/UserController.php | 26 ++++-- app/Entities/Mangboard/UserEntity.php | 31 +++---- app/Models/Mangboard/BaseModel.php | 66 +++++++++++++++ app/Models/Mangboard/UserModel.php | 82 +++++++++---------- composer.lock | 44 +++++----- 6 files changed, 170 insertions(+), 94 deletions(-) create mode 100644 app/Models/Mangboard/BaseModel.php diff --git a/app/Config/Constants.php b/app/Config/Constants.php index 7585e23..0248d14 100644 --- a/app/Config/Constants.php +++ b/app/Config/Constants.php @@ -94,5 +94,18 @@ define('EVENT_PRIORITY_NORMAL', 100); define('EVENT_PRIORITY_HIGH', 10); define('MANGBOARD', [ - 'level' => ['unit' => getenv('mangboard.level.unit') ?: 1000] + 'point' => ['unit' => getenv('mangboard.point.unit') ?: 1000], + 'admin' => ['level' => getenv('mangboard.admin.level') ?: 10], + 'manager' => [ + 'level' => [ + 'min' => getenv('mangboard.manager.level.min') ?: 7, + 'max' => getenv('mangboard.manager.level.max') ?: 9, + ] + ], + 'user' => [ + 'level' => [ + 'min' => getenv('mangboard.user.level.min') ?: 1, + 'max' => getenv('mangboard.user.level.max') ?: 5, + ] + ], ]); diff --git a/app/Controllers/CLI/Mangboard/UserController.php b/app/Controllers/CLI/Mangboard/UserController.php index ac118fe..63fbd27 100644 --- a/app/Controllers/CLI/Mangboard/UserController.php +++ b/app/Controllers/CLI/Mangboard/UserController.php @@ -3,10 +3,24 @@ 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; +use Psr\Log\LoggerInterface; class UserController extends BaseController { + private $_model = null; + public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) + { + // Do Not Edit This Line + parent::initController($request, $response, $logger); + // Preload any models, libraries, etc, here. + // E.g.: $this->session = \Config\Services::session(); + $this->_model = new UserModel(); + } + public function index() { // @@ -15,14 +29,14 @@ class UserController extends BaseController { $msg = []; try { - $userModel = new UserModel(); - $entity = $userModel->getEntity($uid); + + $entity = $this->_model->getEntity($uid); if (!$entity) { throw new \Exception("해당 회원[{$uid}]이 없습니다."); } $old_point = $entity->getPoint(); $entity->setPoint($point, $sign); - $entity = $userModel->setEntity($entity); + $entity = $this->_model->setEntity($entity); $msg[] = "[{$entity}] 회원님의 포인트는 {$old_point}->{$entity->getPoint()} 입니다."; } catch (\Exception $e) { $msg[] = $e->getMessage(); @@ -34,14 +48,12 @@ class UserController extends BaseController { $msg = []; try { - $userModel = new UserModel(); - $entity = $userModel->getEntity($uid); + $entity = $this->_model->getEntity($uid); if (!$entity) { throw new \Exception("해당 회원[{$uid}]이 없습니다."); } $old_level = $entity->getLevel(); - $entity->setLevel(MANGBOARD['level']['unit']); - $entity = $userModel->setEntity($entity); + $entity = $this->_model->setLevel($entity); $msg[] = "[{$entity}] 회원님의 레벨은 {$old_level}->{$entity->getLevel()} 입니다."; } catch (\Exception $e) { $msg[] = $e->getMessage(); diff --git a/app/Entities/Mangboard/UserEntity.php b/app/Entities/Mangboard/UserEntity.php index d334834..4381521 100644 --- a/app/Entities/Mangboard/UserEntity.php +++ b/app/Entities/Mangboard/UserEntity.php @@ -14,41 +14,32 @@ class UserEntity extends Entity { return "{$this->getName()}"; } + + public function getUserID() + { + return $this->attributes['user_id']; + } public function getName() { return $this->attributes['user_name']; } + public function getPoint() { return $this->attributes['user_point']; } - public function setPoint(int $point, string $sign = "plus") + public function setPoint(int $point) { - switch (strtolower($sign)) { - case 'minus': - if ($this->attributes['user_point'] < $point) { - throw new \Exception("기존포인트:{$this->attributes['user_point']}가 감소 포인트:-{$point} 작습니다.\n"); - } - $this->attributes['user_point'] -= $point; - break; - case 'plus': - $this->attributes['user_point'] += $point; - break; - default: - throw new \Exception("{$sign}에 해당하는 작업은 수행할수 없습니다.\n"); - // break; - } + + $this->attributes['user_point'] = $point; } public function getLevel() { return $this->attributes['user_level']; } - public function setLevel(int $level_unit) + public function setLevel(int $level) { - $level = intval($this->getPoint() / $level_unit * $level_unit / $level_unit); - if ($this->attributes['user_level'] != $level) { - $this->attributes['user_level'] = $level; - } + $this->attributes['user_level'] = $level; } } diff --git a/app/Models/Mangboard/BaseModel.php b/app/Models/Mangboard/BaseModel.php new file mode 100644 index 0000000..594623d --- /dev/null +++ b/app/Models/Mangboard/BaseModel.php @@ -0,0 +1,66 @@ +asObject($this->returnType)->where($this->primaryKey, $uid)->first(); + } + protected function setEntity($entity) + { + if ($entity->hasChanged()) { + if (!$this->save($entity)) { + throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->errors(), true)); + } + } + return $entity;; + } + + protected function getEntitys(): array + { + return $this->asObject($this->returnType)->findAll(); + } +} diff --git a/app/Models/Mangboard/UserModel.php b/app/Models/Mangboard/UserModel.php index df599b0..82db487 100644 --- a/app/Models/Mangboard/UserModel.php +++ b/app/Models/Mangboard/UserModel.php @@ -3,31 +3,16 @@ namespace App\Models\Mangboard; use App\Entities\Mangboard\UserEntity; -use CodeIgniter\Model; -class UserModel extends Model +class UserModel extends BaseModel { protected $table = 'mb_users'; protected $primaryKey = 'pid'; protected $useAutoIncrement = true; - protected $returnType = 'array'; - protected $useSoftDeletes = false; - protected $protectFields = true; + // protected $returnType = 'array'; + protected $returnType = UserEntity::class; protected $allowedFields = ['pid', 'user_id', 'passwd', 'user_name', 'user_email', 'user_state', 'user_level', 'user_point']; - protected bool $allowEmptyInserts = false; - protected bool $updateOnlyChanged = true; - - protected array $casts = []; - protected array $castHandlers = []; - - // Dates - protected $useTimestamps = false; - protected $dateFormat = 'datetime'; - protected $createdField = 'created_at'; - protected $updatedField = 'updated_at'; - protected $deletedField = 'deleted_at'; - // Validation // protected $validationRules = []; protected $validationRules = [ @@ -46,37 +31,46 @@ class UserModel extends Model // 'updated_at' => 'if_exist|valid_date', // 'created_at' => 'if_exist|valid_date', ]; - protected $validationMessages = []; - protected $skipValidation = false; - protected $cleanValidationRules = true; - // Callbacks - protected $allowCallbacks = true; - protected $beforeInsert = []; - protected $afterInsert = []; - protected $beforeUpdate = []; - protected $afterUpdate = []; - protected $beforeFind = []; - protected $afterFind = []; - protected $beforeDelete = []; - protected $afterDelete = []; - - public function getEntity(string $uid): null|UserEntity + public function setPoint(UserEntity $entity, int $point, $sign = '+'): UserEntity { - return $this->asObject(UserEntity::class)->where($this->primaryKey, $uid)->first(); - } - public function setEntity(UserEntity $entity): UserEntity - { - if ($entity->hasChanged()) { - if (!$this->save($entity)) { - throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . var_export($this->errors(), true)); - } + switch ($sign) { + case '-': + if ($entity->getPoint() < $point) { + throw new \Exception("기존포인트:{$entity->getPoint()}가 감소 포인트:-{$point} 작습니다.\n"); + } + $entity->setPoint($entity->getPoint() - $point); + break; + case '+': + $entity->setPoint($entity->getPoint() + $point); + break; + default: + throw new \Exception("{$sign}에 해당하는 작업은 수행할수 없습니다.\n"); + // break; } - return $entity;; + return $this->setEntity($entity); } - public function getEntitys(): array + private function getLevelByPoint(UserEntity $entity): int { - return $this->asObject(UserEntity::class)->findAll(); + return intval($entity->getPoint() / MANGBOARD['point']['unit'] * MANGBOARD['point']['unit'] / MANGBOARD['point']['unit']); + } + final public function setLevel(UserEntity $entity): 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 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); } } diff --git a/composer.lock b/composer.lock index df20c83..3f9650c 100644 --- a/composer.lock +++ b/composer.lock @@ -144,16 +144,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "79dff0b268932c640297f5208d6298f71855c03e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e", + "reference": "79dff0b268932c640297f5208d6298f71855c03e", "shasum": "" }, "require": { @@ -188,9 +188,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.1" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2024-08-21T13:31:24+00:00" } ], "packages-dev": [ @@ -546,32 +546,32 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.15", + "version": "10.1.16", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae" + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", - "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=8.1", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-text-template": "^3.0", - "sebastian/code-unit-reverse-lookup": "^3.0", - "sebastian/complexity": "^3.0", - "sebastian/environment": "^6.0", - "sebastian/lines-of-code": "^2.0", - "sebastian/version": "^4.0", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { "phpunit/phpunit": "^10.1" @@ -583,7 +583,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1-dev" + "dev-main": "10.1.x-dev" } }, "autoload": { @@ -612,7 +612,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" }, "funding": [ { @@ -620,7 +620,7 @@ "type": "github" } ], - "time": "2024-06-29T08:25:15+00:00" + "time": "2024-08-22T04:31:57+00:00" }, { "name": "phpunit/php-file-iterator",