From 988ba015b81debd8ca1e076aa79c0a278c4b3d68 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Mon, 28 Mar 2022 21:28:32 +0900 Subject: [PATCH] =?UTF-8?q?refac:=20sammoAPI=20=EC=A0=95=EC=9D=98=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=20=EC=9D=BC=EB=B6=80=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?-=20defs/index.ts=EB=A1=9C=20=EB=B6=84=EB=A6=AC=20-=20API/Natio?= =?UTF-8?q?n/GeneralList=20=ED=98=B8=EC=B6=9C=20=EC=9E=AC=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/API/Nation/GeneralList.php | 51 ++++++++---------- hwe/ts/defs/API/Nation/index.ts | 81 ++++++++++++++++++++++++++++ hwe/ts/util/merge2DArrToObjectArr.ts | 20 +++++++ 3 files changed, 123 insertions(+), 29 deletions(-) create mode 100644 hwe/ts/defs/API/Nation/index.ts create mode 100644 hwe/ts/util/merge2DArrToObjectArr.ts diff --git a/hwe/sammo/API/Nation/GeneralList.php b/hwe/sammo/API/Nation/GeneralList.php index f8962808..ce93e391 100644 --- a/hwe/sammo/API/Nation/GeneralList.php +++ b/hwe/sammo/API/Nation/GeneralList.php @@ -22,24 +22,10 @@ use function sammo\increaseRefresh; class GeneralList extends \sammo\BaseAPI { - - private int $reqType; - private bool $reqForce; private int $permission; public function validateArgs(): ?string { - $v = new Validator($this->args); - $v - ->rule('integer', 'req') - ->rule('boolean', 'force'); - - - if (!$v->validate()) { - return $v->errorStr(); - } - $this->reqType = $this->args['req'] ?? 1; - $this->reqForce = $this->args['force'] ?? false; return null; } @@ -74,11 +60,6 @@ class GeneralList extends \sammo\BaseAPI $nationID = $me['nation']; $this->permission = checkSecretPermission($me, true); - if ($this->reqForce && $this->reqType > $this->permission) { - return '권한이 부족합니다.'; - } - - $this->permission = min($this->reqType, $this->permission); $nationArr = getNationStaticInfo($nationID); @@ -123,12 +104,19 @@ class GeneralList extends \sammo\BaseAPI 'connect' => 0 ]; + $columnRemap = [ + 'special' => 'specialDomestic', + 'special2' => 'specialWar', + ]; + $customViewColumns = [ 'officerLevel' => 0, 'officerLevelText' => 0, + 'specialDomesticTest' => 0, + 'specialWarText' => 0, 'lbonus' => 0, 'ownerName' => 0, - 'honorText' => 0 + 'honorText' => 0, ]; @@ -136,10 +124,14 @@ class GeneralList extends \sammo\BaseAPI 'officerLevel' => function ($rawGeneral) { return $this->getOfficerLevel($rawGeneral); }, - 'special' => function ($rawGeneral) { + 'officerLevelText' => function ($rawGeneral) use ($nationArr) { + $level = $this->getOfficerLevel($rawGeneral); + return getOfficerLevelText($level, $nationArr['level']); + }, + 'specialDomesticTest' => function ($rawGeneral) { return getGeneralSpecialDomesticName($rawGeneral['special']); }, - 'special2' => function ($rawGeneral) { + 'specialWarText' => function ($rawGeneral) { return getGeneralSpecialWarName($rawGeneral['special2']); }, 'personal' => function ($rawGeneral) { @@ -154,10 +146,6 @@ class GeneralList extends \sammo\BaseAPI } return $rawGeneral['owner_name']; }, - 'officerLevelText' => function ($rawGeneral) use ($nationArr) { - $level = $this->getOfficerLevel($rawGeneral); - return getOfficerLevelText($level, $nationArr['level']); - }, 'honorText' => function ($rawGeneral) { return getHonor($rawGeneral['experience']); }, @@ -180,7 +168,12 @@ class GeneralList extends \sammo\BaseAPI if ($reqPermission > $this->permission) { continue; } - $resultColumns[] = $column; + if(key_exists($column, $columnRemap)){ + $resultColumns[$columnRemap[$column]] = $column; + } + else{ + $resultColumns[$column] = $column; + } } foreach ($customViewColumns as $column => $reqPermission) { @@ -209,11 +202,11 @@ class GeneralList extends \sammo\BaseAPI $result = [ 'result' => true, - 'column' => $resultColumns, + 'permission' => $this->permission, + 'column' => array_keys($resultColumns), 'list' => $generalList, ]; - return $result; } } diff --git a/hwe/ts/defs/API/Nation/index.ts b/hwe/ts/defs/API/Nation/index.ts new file mode 100644 index 00000000..71b69f31 --- /dev/null +++ b/hwe/ts/defs/API/Nation/index.ts @@ -0,0 +1,81 @@ + +import type { GameObjType, ValuesOf } from "@/defs"; +import type { ValidResponse } from "@/SammoAPI"; + +export type GeneralListItemP0 = { + no: number, + name: string, + nation: number, + npc: number, + injury: number, + leadership: number, + strength: number, + intel: number, + explevel: number, + dedlevel: number, + gold: number, + rice: number, + killturn: number, + picture: string, + imgsvr: 0 | 1, + age: number, + special: GameObjType, + special2: GameObjType, + personal: GameObjType, + belong: number, + connect: number, + + officerLevel: number, //권한에따라 태수,군사,시종 노출 여부가 다름 + officerLevelText: string, + lbonus: number, + ownerName: string | null, //NPC 출력용에 따라 결과가 다름 + honorText: string, +} + +export type GeneralListItemP1 = { + city: number, + experience: number, + dedication: number, +} & GeneralListItemP0; + +export type GeneralListItemP2 = GeneralListItemP1 & { + officer_level: number, + officer_city: number, + +} +export type GeneralListItemP9 = GeneralListItemP2 & { + owner_name: string, +} + +export type GeneralListItem = +({permission : 0} & GeneralListItemP0) | +({permission : 1} & GeneralListItemP1) | +({permission : 2} & GeneralListItemP2) | +({permission : 9} & GeneralListItemP9); + + +export type RawGeneralListP0 = ValidResponse & { + permission: 0, + column: keyof GeneralListItemP0[], + list: ValuesOf[], +} + +export type RawGeneralListP1 = ValidResponse & { + permission: 1, + column: keyof GeneralListItemP1[], + list: ValuesOf[][], +} + +export type RawGeneralListP2 = ValidResponse & { + permission: 2, + column: keyof GeneralListItemP2[], + list: ValuesOf[][], +} + +export type RawGeneralListP9 = ValidResponse & { + permission: 9, + column: keyof GeneralListItemP9[], + list: ValuesOf[][], +} + +export type GeneralListResponse = RawGeneralListP0 | RawGeneralListP1 | RawGeneralListP2 | RawGeneralListP9; diff --git a/hwe/ts/util/merge2DArrToObjectArr.ts b/hwe/ts/util/merge2DArrToObjectArr.ts new file mode 100644 index 00000000..a019d021 --- /dev/null +++ b/hwe/ts/util/merge2DArrToObjectArr.ts @@ -0,0 +1,20 @@ + +import type { ValuesOf } from "@/defs"; +import { zip } from "lodash"; + +export function merge2DArrToObjectArr>(column: (keyof T)[], list: ValuesOf[][]): T[]{ + const result: T[] = []; + for(const rawItem of list){ + const item: Record = {}; + + if(column.length != item.length){ + throw `column과 item의 길이가 같지 않습니다: ${column.length} != ${list.length}, ${JSON.stringify(item)}`; + } + + for(const [key, value] of zip(column, rawItem)){ + item[key as string] = value; + } + result.push(item as T); + } + return result; +} \ No newline at end of file