refac, wip: GeneralLite에는 RankVar가 읽기전용으로 필요
This commit is contained in:
@@ -17,6 +17,9 @@ class GeneralLite
|
|||||||
protected $raw = [];
|
protected $raw = [];
|
||||||
protected $rawCity = null;
|
protected $rawCity = null;
|
||||||
|
|
||||||
|
/** @var Map<RankColumn,int> */
|
||||||
|
protected Map $rankVarRead;
|
||||||
|
|
||||||
/** @var \sammo\ActionLogger */
|
/** @var \sammo\ActionLogger */
|
||||||
protected $logger;
|
protected $logger;
|
||||||
|
|
||||||
@@ -49,7 +52,7 @@ class GeneralLite
|
|||||||
* @param int|null $year 게임 연도
|
* @param int|null $year 게임 연도
|
||||||
* @param int|null $month 게임 월
|
* @param int|null $month 게임 월
|
||||||
*/
|
*/
|
||||||
public function __construct(array $raw, ?array $city, ?array $nation, ?int $year, ?int $month)
|
public function __construct(array $raw, ?Map $rawRank, ?array $city, ?array $nation, ?int $year, ?int $month)
|
||||||
{
|
{
|
||||||
if ($nation === null) {
|
if ($nation === null) {
|
||||||
$nation = getNationStaticInfo($raw['nation']);
|
$nation = getNationStaticInfo($raw['nation']);
|
||||||
@@ -61,6 +64,12 @@ class GeneralLite
|
|||||||
if ($year !== null && $month !== null) {
|
if ($year !== null && $month !== null) {
|
||||||
$this->initLogger($year, $month);
|
$this->initLogger($year, $month);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($rawRank) {
|
||||||
|
$this->rankVarRead = $rawRank;
|
||||||
|
} else {
|
||||||
|
$this->rankVarRead = new Map();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function initLogger(int $year, int $month)
|
function initLogger(int $year, int $month)
|
||||||
@@ -163,6 +172,20 @@ class GeneralLite
|
|||||||
$this->raw[$key] = $value;
|
$this->raw[$key] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function getRankVar(RankColumn $key, $defaultValue = null): int
|
||||||
|
{
|
||||||
|
if (!$this->rankVarRead->hasKey($key)) {
|
||||||
|
if ($defaultValue === null) {
|
||||||
|
throw new \RuntimeException('인자가 없음 : ' . $key->value);
|
||||||
|
}
|
||||||
|
return $defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->rankVarRead[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param \MeekroDB $db
|
* @param \MeekroDB $db
|
||||||
*/
|
*/
|
||||||
@@ -299,7 +322,7 @@ class GeneralLite
|
|||||||
/**
|
/**
|
||||||
* @var string[] $column
|
* @var string[] $column
|
||||||
*/
|
*/
|
||||||
[$column,,] = static::mergeQueryColumn($column, $queryMode);
|
[$column, $rankColumn,] = static::mergeQueryColumn($column, $queryMode);
|
||||||
|
|
||||||
if ($generalIDList === null) {
|
if ($generalIDList === null) {
|
||||||
$rawGenerals = Util::convertArrayToDict(
|
$rawGenerals = Util::convertArrayToDict(
|
||||||
@@ -315,13 +338,31 @@ class GeneralLite
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @var Map<int,Map<RankColumn,int|float>> */
|
||||||
|
$rawRanks = new Map();
|
||||||
|
if ($rankColumn) {
|
||||||
|
$rawValue = $db->queryAllLists(
|
||||||
|
'SELECT `general_id`, `type`, `value` FROM rank_data WHERE general_id IN %li AND `type` IN %ls',
|
||||||
|
$generalIDList,
|
||||||
|
array_map(fn (\BackedEnum $e) => $e->value, $rankColumn)
|
||||||
|
);
|
||||||
|
foreach ($rawValue as [$generalID, $rawRankType, $rankValue]) {
|
||||||
|
if (!$rawRanks->hasKey($generalID)) {
|
||||||
|
$rawRanks[$generalID] = new Map();
|
||||||
|
}
|
||||||
|
|
||||||
|
$rankType = RankColumn::from($rawRankType);
|
||||||
|
$rawRanks[$generalID][$rankType] = $rankValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$result = [];
|
$result = [];
|
||||||
foreach ($generalIDList as $generalID) {
|
foreach ($generalIDList as $generalID) {
|
||||||
if (!key_exists($generalID, $rawGenerals)) {
|
if (!key_exists($generalID, $rawGenerals)) {
|
||||||
$result[$generalID] = new DummyGeneral($queryMode->value > 0);
|
$result[$generalID] = new DummyGeneral($queryMode->value > 0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$result[$generalID] = new static($rawGenerals[$generalID], null, null, $year, $month);
|
$result[$generalID] = new static($rawGenerals[$generalID], $rawRanks[$generalID] ?? null, null, null, $year, $month);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
@@ -344,8 +385,9 @@ class GeneralLite
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string[] $column
|
* @var string[] $column
|
||||||
|
* @var RankColumn[] $rankColumn
|
||||||
*/
|
*/
|
||||||
[$column,,] = static::mergeQueryColumn($column, $queryMode);
|
[$column, $rankColumn,] = static::mergeQueryColumn($column, $queryMode);
|
||||||
|
|
||||||
$rawGeneral = $db->queryFirstRow('SELECT %l FROM general WHERE no = %i', Util::formatListOfBackticks($column), $generalID);
|
$rawGeneral = $db->queryFirstRow('SELECT %l FROM general WHERE no = %i', Util::formatListOfBackticks($column), $generalID);
|
||||||
|
|
||||||
@@ -353,7 +395,20 @@ class GeneralLite
|
|||||||
return new DummyGeneral($queryMode->value > 0);
|
return new DummyGeneral($queryMode->value > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
$general = new static($rawGeneral, null, null, $year, $month);
|
$rawRankValues = new Map();
|
||||||
|
if ($rankColumn) {
|
||||||
|
$rawValue = $db->queryAllLists(
|
||||||
|
'SELECT `type`, `value` FROM rank_data WHERE general_id = %i AND `type` IN %ls',
|
||||||
|
$generalID,
|
||||||
|
array_map(fn (\BackedEnum $e) => $e->value, $rankColumn)
|
||||||
|
);
|
||||||
|
foreach ($rawValue as [$rawRankType, $rankValue]) {
|
||||||
|
$rankType = RankColumn::tryFrom($rawRankType);
|
||||||
|
$rawRankValues->put($rankType, $rankValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$general = new static($rawGeneral, $rawRankValues, null, null, $year, $month);
|
||||||
|
|
||||||
return $general;
|
return $general;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user