Autionmation init...

This commit is contained in:
최준흠 2024-08-27 17:03:04 +09:00
parent e87ce3e741
commit 1928735693
9 changed files with 118 additions and 64 deletions

2
.gitignore vendored
View File

@ -20,7 +20,7 @@ application/logs/*
#codeigniter4
.env
!writeable/*
writeable/*
!writeable/.htaccess
!writeable/index.html
!writeable/caceh/index.html

View File

@ -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,
]
],
]);

View File

@ -38,7 +38,7 @@ class Logger extends BaseConfig
*
* @var int|list<int>
*/
public $threshold = (ENVIRONMENT === 'production') ? 4 : 9;
public $threshold = (ENVIRONMENT === 'production') ? 6 : 9;
/**
* --------------------------------------------------------------------------

View File

@ -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');
});
});
});

View File

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

View File

@ -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'];
}

View File

@ -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();
}

View File

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

View File

@ -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 입니다.