merge: compare best-general rank data
This commit is contained in:
@@ -4,6 +4,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
|
use sammo\Enums\RankColumn;
|
||||||
|
|
||||||
if (PHP_SAPI !== 'cli') {
|
if (PHP_SAPI !== 'cli') {
|
||||||
http_response_code(404);
|
http_response_code(404);
|
||||||
exit;
|
exit;
|
||||||
@@ -358,6 +360,30 @@ function comparisonApplyTurnFixtureSetup(mixed $setup): void
|
|||||||
$db->update('general', $patch, 'no = %i', $row['id']);
|
$db->update('general', $patch, 'no = %i', $row['id']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
foreach ($setup['rankData'] ?? [] as $row) {
|
||||||
|
if (
|
||||||
|
!is_array($row)
|
||||||
|
|| !is_int($row['generalId'] ?? null)
|
||||||
|
|| !is_string($row['type'] ?? null)
|
||||||
|
|| RankColumn::tryFrom($row['type']) === null
|
||||||
|
|| !is_int($row['value'] ?? null)
|
||||||
|
) {
|
||||||
|
throw new \InvalidArgumentException('invalid setup.rankData row');
|
||||||
|
}
|
||||||
|
$nationId = (int)($db->queryFirstField(
|
||||||
|
'SELECT nation FROM general WHERE no = %i',
|
||||||
|
$row['generalId'],
|
||||||
|
) ?? 0);
|
||||||
|
$db->insertUpdate('rank_data', [
|
||||||
|
'general_id' => $row['generalId'],
|
||||||
|
'nation_id' => $nationId,
|
||||||
|
'type' => $row['type'],
|
||||||
|
'value' => $row['value'],
|
||||||
|
], [
|
||||||
|
'nation_id' => $nationId,
|
||||||
|
'value' => $row['value'],
|
||||||
|
]);
|
||||||
|
}
|
||||||
if (($setup['isolateWorld'] ?? false) === true && ($setup['generals'] ?? []) !== []) {
|
if (($setup['isolateWorld'] ?? false) === true && ($setup['generals'] ?? []) !== []) {
|
||||||
$maxGeneralId = max(array_map(
|
$maxGeneralId = max(array_map(
|
||||||
static fn(array $row): int => (int)$row['id'],
|
static fn(array $row): int => (int)$row['id'],
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
|
use sammo\Enums\RankColumn;
|
||||||
|
|
||||||
if (PHP_SAPI !== 'cli') {
|
if (PHP_SAPI !== 'cli') {
|
||||||
http_response_code(404);
|
http_response_code(404);
|
||||||
exit;
|
exit;
|
||||||
@@ -229,6 +231,19 @@ function comparisonTurnStateSnapshot(array $request): array
|
|||||||
},
|
},
|
||||||
comparisonRowsById('general', 'no', $generalIds),
|
comparisonRowsById('general', 'no', $generalIds),
|
||||||
);
|
);
|
||||||
|
$rankTypes = array_map(
|
||||||
|
static fn(RankColumn $column): string => $column->value,
|
||||||
|
RankColumn::cases(),
|
||||||
|
);
|
||||||
|
$rankData = $generalIds === []
|
||||||
|
? []
|
||||||
|
: iterator_to_array($db->query(
|
||||||
|
'SELECT general_id AS generalId, nation_id AS nationId, `type`, `value`'
|
||||||
|
. ' FROM rank_data WHERE general_id IN %li AND `type` IN %ls'
|
||||||
|
. ' ORDER BY general_id, `type`',
|
||||||
|
$generalIds,
|
||||||
|
$rankTypes,
|
||||||
|
));
|
||||||
|
|
||||||
$cities = array_map(
|
$cities = array_map(
|
||||||
static fn(array $row): array => comparisonPickRow(
|
static fn(array $row): array => comparisonPickRow(
|
||||||
@@ -412,6 +427,7 @@ function comparisonTurnStateSnapshot(array $request): array
|
|||||||
'generalCooldowns' => $generalCooldowns,
|
'generalCooldowns' => $generalCooldowns,
|
||||||
],
|
],
|
||||||
'generals' => $generals,
|
'generals' => $generals,
|
||||||
|
'rankData' => $rankData,
|
||||||
'cities' => $cities,
|
'cities' => $cities,
|
||||||
'nations' => $nations,
|
'nations' => $nations,
|
||||||
'diplomacy' => $diplomacy,
|
'diplomacy' => $diplomacy,
|
||||||
|
|||||||
Reference in New Issue
Block a user