From 245a8583e285a60340a993d22b52b9af5a7dd63a Mon Sep 17 00:00:00 2001 From: Hide_D Date: Tue, 19 Jul 2022 00:25:22 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=B6=80=EB=8C=80=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/sammo/API/Troop/ExitTroop.php | 46 +++++++++++++++++++++ hwe/sammo/API/Troop/JoinTroop.php | 23 +++++------ hwe/sammo/API/Troop/KickFromTroop.php | 57 +++++++++++++++++++++++++++ hwe/sammo/API/Troop/NewTroop.php | 10 +++-- hwe/ts/SammoAPI.ts | 10 ++++- 5 files changed, 128 insertions(+), 18 deletions(-) create mode 100644 hwe/sammo/API/Troop/KickFromTroop.php diff --git a/hwe/sammo/API/Troop/ExitTroop.php b/hwe/sammo/API/Troop/ExitTroop.php index e69de29b..0d71879c 100644 --- a/hwe/sammo/API/Troop/ExitTroop.php +++ b/hwe/sammo/API/Troop/ExitTroop.php @@ -0,0 +1,46 @@ +generalID; + $db = DB::db(); + + $troopID = $db->queryFirstField('SELECT troop FROM general WHERE no = %i', $generalID); + if($troopID == 0){ + return '부대에 소속되어 있지 않습니다.'; + } + + if($generalID != $troopID){ + $db->update('general', [ + 'troop' => 0, + ], '`no` = %i', $generalID); + return null; + } + + //부대장이다. + $db->update('general', [ + 'troop' => 0, + ], '`troop` = %i', $troopID); + $db->delete('troop', 'troop_leader = %i', $troopID); + + return null; + } +} diff --git a/hwe/sammo/API/Troop/JoinTroop.php b/hwe/sammo/API/Troop/JoinTroop.php index 37b942c7..42477001 100644 --- a/hwe/sammo/API/Troop/JoinTroop.php +++ b/hwe/sammo/API/Troop/JoinTroop.php @@ -8,7 +8,7 @@ use sammo\DB; use sammo\StringUtil; use sammo\Validator; -class SetTroopName extends \sammo\BaseAPI +class JoinTroop extends \sammo\BaseAPI { public function validateArgs(): ?string { @@ -32,10 +32,7 @@ class SetTroopName extends \sammo\BaseAPI public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag) { $userID = $session->userID; - $troopName = StringUtil::neutralize($this->args['troopName']); - if (!$troopName) { - return '부대 이름이 없습니다.'; - } + $troopID = $this->args['troopID']; $db = DB::db(); $me = $db->queryFirstRow('SELECT `no`,nation,`troop`,`officer_level`,permission,penalty FROM general WHERE `owner`=%i', $userID); @@ -47,17 +44,15 @@ class SetTroopName extends \sammo\BaseAPI return '국가에 소속되어 있지 않습니다.'; } + $troopExists = $db->queryFirstField('SELECT `troop_leader` FROM `troop` WHERE `troop_leader` = %i AND `nation` = %i', $troopID, $nationID); + if (!$troopExists) { + return '부대가 올바르지 않습니다.'; + } $generalID = $me['no']; - $db->insert('troop', [ - 'name' => $troopName, - 'troop_leader' => $generalID, - 'nation' => $nationID, - ]); - - if ($db->affectedRows() == 0) { - return '부대가 생성되지 않았습니다.'; - } + $db->update('general', [ + 'troop' => $troopID, + ], '`no` = %i AND `troop` = %i', $generalID, 0); return null; } diff --git a/hwe/sammo/API/Troop/KickFromTroop.php b/hwe/sammo/API/Troop/KickFromTroop.php new file mode 100644 index 00000000..619fc753 --- /dev/null +++ b/hwe/sammo/API/Troop/KickFromTroop.php @@ -0,0 +1,57 @@ +args); + $v->rule('required', [ + 'troopID', + 'generalID', + ]) + ->rule('integer', 'troopID') + ->rule('integer', 'generalID'); + + if (!$v->validate()) { + return $v->errorStr(); + } + return null; + } + + + public function getRequiredSessionMode(): int + { + return static::REQ_GAME_LOGIN; + } + + public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag) + { + $generalID = $this->args['generalID']; + $db = DB::db(); + + $troopID = $db->queryFirstField('SELECT troop FROM general WHERE no = %i', $generalID); + if($troopID == 0){ + return '부대에 소속되어 있지 않습니다.'; + } + + if($troopID != $this->args['troopID']){ + return '다른 부대에 소속되어 있습니다.'; + } + + if($troopID == $generalID){ + return '부대장을 추방할 수 없습니다.'; + } + + $db->update('general', [ + 'troop' => 0, + ], '`no` = %i AND `troop` = %i', $generalID, $troopID); + return null; + } +} diff --git a/hwe/sammo/API/Troop/NewTroop.php b/hwe/sammo/API/Troop/NewTroop.php index 95723d71..69e5521f 100644 --- a/hwe/sammo/API/Troop/NewTroop.php +++ b/hwe/sammo/API/Troop/NewTroop.php @@ -8,7 +8,7 @@ use sammo\DB; use sammo\StringUtil; use sammo\Validator; -class SetTroopName extends \sammo\BaseAPI +class NewTroop extends \sammo\BaseAPI { public function validateArgs(): ?string { @@ -48,7 +48,7 @@ class SetTroopName extends \sammo\BaseAPI } $generalID = $me['no']; - + $db->insert('troop', [ 'name'=>$troopName, 'troop_leader'=>$generalID, @@ -56,9 +56,13 @@ class SetTroopName extends \sammo\BaseAPI ]); if($db->affectedRows() == 0){ - return '부대가 생성되지 않았습니다.'; + return '부대가 생성되지 않았습니다. 버그일 수 있습니다.'; } + $db->update('general', [ + 'troop'=>$generalID + ], '`no` = %i', $generalID); + return null; } } diff --git a/hwe/ts/SammoAPI.ts b/hwe/ts/SammoAPI.ts index 2d8290a0..b63d498b 100644 --- a/hwe/ts/SammoAPI.ts +++ b/hwe/ts/SammoAPI.ts @@ -236,12 +236,20 @@ const apiRealPath = { }, Troop: { NewTroop: POST as APICallT<{ - name: string; + troopName: string; }>, + JoinTroop: PATCH as APICallT<{ + troopID: number; + }>, + ExitTroop: PATCH as APICallT, SetTroopName: PATCH as APICallT<{ troopID: number; troopName: string; }>, + KickFromTroop: PATCH as APICallT<{ + troopID: number; + generalID: number; + }> }, Vote: { AddComment: POST as APICallT<{