From c584f94c4a98db226fa4396adb0f57b0442bb666 Mon Sep 17 00:00:00 2001 From: Daniel-I-Am Date: Sun, 8 Nov 2020 13:54:05 +0100 Subject: [PATCH] Make the rank check endpoint dynamic --- .../Commands/HelixRankCheckCommand.php | 67 ------------------ app/Console/Commands/RankCheckCommand.php | 70 +++++++++++++++++++ ...Controller.php => RankCheckController.php} | 16 +++-- config/chaosapi.php | 33 +++++++-- routes/web.php | 2 +- 5 files changed, 109 insertions(+), 79 deletions(-) delete mode 100644 app/Console/Commands/HelixRankCheckCommand.php create mode 100644 app/Console/Commands/RankCheckCommand.php rename app/Http/Controllers/{HelixRankCheckController.php => RankCheckController.php} (75%) diff --git a/app/Console/Commands/HelixRankCheckCommand.php b/app/Console/Commands/HelixRankCheckCommand.php deleted file mode 100644 index 0d3743d..0000000 --- a/app/Console/Commands/HelixRankCheckCommand.php +++ /dev/null @@ -1,67 +0,0 @@ -getFreeCompanyById('9231394073691143535', $apiService); - $members = $fcInfo->content['FreeCompanyMembers']; - foreach ($members as $member) { - $rankedUser = FreeCompanyRankedUser::where('lodestoneId', $member['ID'])->first(); - - if ($rankedUser === null) - { - $rankedUser = new FreeCompanyRankedUser; - $rankedUser->lodestoneId = $member['ID']; - } - - $rankedUser->displayName = $member['Name']; - $rankedUser->ingameRole = $member['Rank']; - $rankedUser->lastSeen = Carbon::now(); - if ($rankedUser->firstSeen === null) - $rankedUser->firstSeen = Carbon::now(); - - $rankedUser->save(); - } - - return 0; - } -} diff --git a/app/Console/Commands/RankCheckCommand.php b/app/Console/Commands/RankCheckCommand.php new file mode 100644 index 0000000..e8f99a7 --- /dev/null +++ b/app/Console/Commands/RankCheckCommand.php @@ -0,0 +1,70 @@ +getFreeCompanyById($lodestoneFreeCompanyId, $apiService); + $members = $fcInfo->content['FreeCompanyMembers']; + foreach ($members as $member) { + $rankedUser = FreeCompanyRankedUser::where('lodestoneId', $member['ID'])->first(); + + if ($rankedUser === null) + { + $rankedUser = new FreeCompanyRankedUser; + $rankedUser->lodestoneId = $member['ID']; + } + + $rankedUser->freeCompanyId = $lodestoneFreeCompanyId; + $rankedUser->displayName = $member['Name']; + $rankedUser->ingameRole = $member['Rank']; + $rankedUser->lastSeen = Carbon::now(); + if ($rankedUser->firstSeen === null) + $rankedUser->firstSeen = Carbon::now(); + + $rankedUser->save(); + } + } + + return 0; + } +} diff --git a/app/Http/Controllers/HelixRankCheckController.php b/app/Http/Controllers/RankCheckController.php similarity index 75% rename from app/Http/Controllers/HelixRankCheckController.php rename to app/Http/Controllers/RankCheckController.php index c3fe873..316dfaa 100644 --- a/app/Http/Controllers/HelixRankCheckController.php +++ b/app/Http/Controllers/RankCheckController.php @@ -7,16 +7,22 @@ use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Str; -class HelixRankCheckController extends Controller +class RankCheckController extends Controller { - public function getRankChanges() + public function getRankChanges(string $discordGuildId) { - $members = FreeCompanyRankedUser::all()->toArray(); - $members = array_map(function ($e) { + if (!in_array($discordGuildId, array_keys(config('chaosapi.free_company_ranked_user_discord_mapping')))) { + abort(404); + } + + $lodestoneFreeCompanyId = config('chaosapi.free_company_ranked_user_discord_mapping.' . $discordGuildId); + + $members = FreeCompanyRankedUser::where('freeCompanyId', $lodestoneFreeCompanyId)->get()->toArray(); + $members = array_map(function ($e) use ($lodestoneFreeCompanyId) { $e['lodestoneId'] = (string)$e['lodestoneId']; $e['shouldBeRole'] = null; - $editable_roles = config('chaosapi.helix.rank_time'); + $editable_roles = config('chaosapi.free_company_ranked_user.' . $lodestoneFreeCompanyId . '.rank_time'); // We don't want to edit council or mentor if (!in_array($e['ingameRole'], array_keys($editable_roles))) return $e; diff --git a/config/chaosapi.php b/config/chaosapi.php index d528f1c..4711fea 100644 --- a/config/chaosapi.php +++ b/config/chaosapi.php @@ -5,12 +5,33 @@ return [ 'cachetime' => 60, - 'helix' => [ - 'rank_time' => [ - "Recruit" => 0, - "Initiate" => 14, - "Member" => 44, + 'free_company_ranked_user' => [ + '9231394073691143535' => [ + 'rank_time' => [ + "Recruit" => 0, + "Initiate" => 14, + "Member" => 44, + ], + 'demotion_time_hours' => 5 ], - 'demotion_time_hours' => 5 + '9231394073691151733' => [ + 'rank_time' => [ + "Early Birb" => 0, + "Tiny Birb" => 14, + ], + 'demotion_time_hours' => 5 + ] + ], + + 'free_company_ranked_user_discord_mapping' => [ + // Helix/Daybreak + '618857558740041738' => '9231394073691143535', + // Birbs + '762877727215714324' => '9231394073691151733', + + // Dan's testing server + '386574965626896384' => '9231394073691151733', + // ChaoticLogic + '178563508034600960' => '9231394073691143535', ] ]; diff --git a/routes/web.php b/routes/web.php index 3fc88d3..097e1e5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -42,7 +42,7 @@ Route::prefix('api')->middleware(ApiAuthorization::class)->group(function() { }); Route::prefix('rank')->group(function() { - Route::get('/check/helix', 'HelixRankCheckController@getRankChanges'); + Route::get('/check/{discordGuildId}', 'RankCheckController@getRankChanges'); Route::get('/check/{freeCompanyId}/discord/{discordGuildId}/{discordUserId}/{currentRank}'); Route::get('/check/{freeCompanyId}/website/{hostname}/{websiteId}/{currentRank}');