From f4f7373272feb73947c728878e6894cb54445382 Mon Sep 17 00:00:00 2001 From: Nicholas Ciechanowski Date: Thu, 26 Oct 2023 20:14:05 +1100 Subject: [PATCH 1/2] feat: add helper, clean up code, remove test route --- app/Helpers/Slack.php | 39 +++++++++++++++++++ .../Controllers/Api/WebHookController.php | 30 ++++---------- app/Models/Quote.php | 9 ++--- .../views/livewire/pages/admin/send.blade.php | 8 ++-- .../views/livewire/pages/quote/list.blade.php | 4 +- routes/api.php | 1 - 6 files changed, 56 insertions(+), 35 deletions(-) create mode 100644 app/Helpers/Slack.php diff --git a/app/Helpers/Slack.php b/app/Helpers/Slack.php new file mode 100644 index 0000000..9977b99 --- /dev/null +++ b/app/Helpers/Slack.php @@ -0,0 +1,39 @@ +url = config('bot.webhook'); + } + + private function send($text): \GuzzleHttp\Promise\PromiseInterface|\Illuminate\Http\Client\Response + { + return Http::post($this->url, ['text' => $text]); + } + + public function sendText(string $text): \GuzzleHttp\Promise\PromiseInterface|\Illuminate\Http\Client\Response + { + activity() + ->event('send') + ->log("Manually sent quote: $text"); + + return $this->send($text); + } + + public function sendQuote(Quote $quote): \GuzzleHttp\Promise\PromiseInterface|\Illuminate\Http\Client\Response + { + activity() + ->performedOn($quote) + ->event('send') + ->log("Requested quote: $quote"); + + return $this->send($quote->quote); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Api/WebHookController.php b/app/Http/Controllers/Api/WebHookController.php index 05cf9cd..2777146 100644 --- a/app/Http/Controllers/Api/WebHookController.php +++ b/app/Http/Controllers/Api/WebHookController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Api; +use App\Helpers\Slack; use App\Http\Controllers\Controller; use App\Models\Quote; use Illuminate\Http\Request; @@ -9,11 +10,11 @@ use Illuminate\Support\Facades\Http; class WebHookController extends Controller { - public function webHookSend(string $payload) - { - // TODO: move this to a helper class so we can reuse code between API and FE - $data = ['text' => $payload]; - $response = Http::post(config('bot.webhook'), $data); + + private Slack $slack; + + public function __construct() { + $this->slack = new Slack(); } public function sendQuote(Request $request) @@ -24,28 +25,13 @@ class WebHookController extends Controller return; } - activity() - ->event('send') - ->log("Manually sent quote: $quote"); - - $this->webHookSend($quote); + $this->slack->sendText($quote); } public function sendRandomQuote() { $quote = Quote::inRandomOrder()->first(); - activity() - ->performedOn($quote) - ->event('send') - ->log("Requested quote: $quote->quote"); - - $this->webHookSend($quote->quote); + $this->slack->sendQuote($quote); } - - public function test() - { - var_dump('secrets'); - } - } diff --git a/app/Models/Quote.php b/app/Models/Quote.php index 0c0bf07..f68e9e6 100644 --- a/app/Models/Quote.php +++ b/app/Models/Quote.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Helpers\Slack; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Spatie\Activitylog\LogOptions; @@ -22,13 +23,9 @@ class Quote extends Model public function request(): void { - // Send the quote - // If success, add it to the transactions + $slack = new Slack(); - activity() - ->performedOn($this) - ->event('send') - ->log("Requested quote: $this->quote"); + $slack->sendQuote($this); } public function tapActivity(Activity $activity, string $eventName) diff --git a/resources/views/livewire/pages/admin/send.blade.php b/resources/views/livewire/pages/admin/send.blade.php index 337def7..a5579c6 100644 --- a/resources/views/livewire/pages/admin/send.blade.php +++ b/resources/views/livewire/pages/admin/send.blade.php @@ -1,5 +1,6 @@ validate(); - // TODO: move this to a helper class so we can reuse code between API and FE - $response = Http::post(config('bot.webhook'), ['text' => $validated['quote']]); + $slack = new Slack(); - activity() - ->event('send') - ->log("Manually sent quote: {$validated['quote']}"); + $slack->sendText($validated['quote']); $this->quote = ''; } diff --git a/resources/views/livewire/pages/quote/list.blade.php b/resources/views/livewire/pages/quote/list.blade.php index 6cea788..c9eb0f5 100644 --- a/resources/views/livewire/pages/quote/list.blade.php +++ b/resources/views/livewire/pages/quote/list.blade.php @@ -20,7 +20,6 @@ new #[Layout('layouts.guest')] class extends Component $this->authorize('request', $quote); $quote->request(); - // TODO: add code to send a notification } public function delete(Quote $quote): void @@ -64,9 +63,12 @@ new #[Layout('layouts.guest')] class extends Component @if(auth()->user())
+ @if(auth()->user()->is_admin) + {{-- For now this is admin only, when we add credits we can make it avaliable to users --}}
{{ __('Request') }}
+ @endif @if(auth()->user()->is_admin) group(function () { - Route::get('/test', [WebHookController::class, 'test']); Route::post('/sendQuote', [WebHookController::class, 'sendQuote']); Route::post('/randomQuote', [WebHookController::class, 'sendRandomQuote']); From dcf8c28f1aabfcd65a49586260b7e2603464eec0 Mon Sep 17 00:00:00 2001 From: Nicholas Ciechanowski Date: Sat, 28 Oct 2023 22:47:32 +1100 Subject: [PATCH 2/2] fix: return type and typing on send --- app/Helpers/Slack.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/Helpers/Slack.php b/app/Helpers/Slack.php index 9977b99..04ba3aa 100644 --- a/app/Helpers/Slack.php +++ b/app/Helpers/Slack.php @@ -3,22 +3,24 @@ namespace App\Helpers; use App\Models\Quote; +use Illuminate\Http\Client\Response; use Illuminate\Support\Facades\Http; class Slack { private string $url; - public function __construct() { + public function __construct() + { $this->url = config('bot.webhook'); } - private function send($text): \GuzzleHttp\Promise\PromiseInterface|\Illuminate\Http\Client\Response + private function send(string $text): Response { return Http::post($this->url, ['text' => $text]); } - public function sendText(string $text): \GuzzleHttp\Promise\PromiseInterface|\Illuminate\Http\Client\Response + public function sendText(string $text): Response { activity() ->event('send') @@ -27,7 +29,7 @@ class Slack return $this->send($text); } - public function sendQuote(Quote $quote): \GuzzleHttp\Promise\PromiseInterface|\Illuminate\Http\Client\Response + public function sendQuote(Quote $quote): Response { activity() ->performedOn($quote)