Automation/app/Traits/MangboardTrait.php
2024-08-30 19:32:21 +09:00

67 lines
2.5 KiB
PHP

<?php
namespace App\Traits;
use App\Entities\UserEntity;
use App\Models\UserModel;
trait MangboardTrait
{
private $_userModel = null;
public function getUserModel(): UserModel
{
if (is_null($this->_userModel)) {
$this->_userModel = new UserModel();
}
return $this->_userModel;
}
public function setUserPointByMangboardTrait(UserEntity $entity, int $point, $sign = '+'): UserEntity
{
switch ($sign) {
case '-':
if ($point < $point) {
throw new \Exception("기존포인트:{$point}가 감소 포인트:-{$point} 작습니다.\n");
}
$point = $point - $point;
break;
case '+':
$point = $point + $point;
break;
default:
throw new \Exception(__FUNCTION__ . "에서는 {$sign}은 사용할수 없습니다.\n");
// break;
}
$entity = $this->getUserModel()->setPoint($entity, $point);
return $this->setUserLevelByMangboardTrait($entity);
}
public function setUserLevelByMangboardTrait(UserEntity $entity): UserEntity
{
//Admin용 Level로는 변경불가
if ($entity->getLevel() == MANGBOARD['admin']['level']) {
// throw new \Exception("Admin용 Level을 변경하실수 없습니다.\n");
return $entity;
}
//사용자 Point별 Level 계산
$level = intval($entity->getPoint() / MANGBOARD['point']['unit'] * MANGBOARD['point']['unit'] / MANGBOARD['point']['unit']);
//운영자면 7~9
if (MANGBOARD['manager']['level']['min'] <= $level && $level <= 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;
if (MANGBOARD['user']['level']['min'] <= $level && $level <= 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->getUserModel()->setLevel($entity, $level);
}
}