From 550a59dc48c60f0df42e8706a91eb5d57d5e2194 Mon Sep 17 00:00:00 2001 From: farida Date: Mon, 18 May 2026 15:16:06 +0700 Subject: [PATCH 1/4] feat: create api find by tag name --- src/Http/Controllers/Api/TagsController.php | 10 ++++++++++ src/Routes/ApiRoutes.php | 1 + 2 files changed, 11 insertions(+) diff --git a/src/Http/Controllers/Api/TagsController.php b/src/Http/Controllers/Api/TagsController.php index eb3d6e50..4a85e874 100644 --- a/src/Http/Controllers/Api/TagsController.php +++ b/src/Http/Controllers/Api/TagsController.php @@ -5,6 +5,7 @@ namespace Sendportal\Base\Http\Controllers\Api; use Exception; +use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Http\Resources\Json\AnonymousResourceCollection; use Illuminate\Http\Response; use Sendportal\Base\Facades\Sendportal; @@ -69,6 +70,15 @@ public function show(int $id): TagResource return new TagResource($this->tags->find($workspaceId, $id)); } + /** + * @throws BindingResolutionException + */ + public function showByName(string $name): TagResource + { + $workspaceId = Sendportal::currentWorkspaceId(); + return new TagResource($this->tags->findBy($workspaceId, 'name', $name)); + } + /** * @throws Exception */ diff --git a/src/Routes/ApiRoutes.php b/src/Routes/ApiRoutes.php index adb1c45a..5dbc3d98 100644 --- a/src/Routes/ApiRoutes.php +++ b/src/Routes/ApiRoutes.php @@ -20,6 +20,7 @@ public function sendportalApiRoutes(): callable $apiRouter->apiResource('subscribers', 'SubscribersController'); $apiRouter->post('subscribers/sync', 'SubscribersController@sync')->name('subscribers.sync'); $apiRouter->apiResource('tags', 'TagsController'); + $apiRouter->get('tags/{tag}', 'TagsController@showByName')->name('tags.showByName'); $apiRouter->apiResource('subscribers.tags', 'SubscriberTagsController') ->except(['show', 'update', 'destroy']); From 5122ed9d939612aa6ac3725e8c4c27bf967e9d47 Mon Sep 17 00:00:00 2001 From: farida Date: Mon, 18 May 2026 15:30:00 +0700 Subject: [PATCH 2/4] feat: create api find by campaign name --- src/Http/Controllers/Api/CampaignsController.php | 11 +++++++++++ src/Routes/ApiRoutes.php | 1 + 2 files changed, 12 insertions(+) diff --git a/src/Http/Controllers/Api/CampaignsController.php b/src/Http/Controllers/Api/CampaignsController.php index b50957fd..9e64bc50 100644 --- a/src/Http/Controllers/Api/CampaignsController.php +++ b/src/Http/Controllers/Api/CampaignsController.php @@ -70,6 +70,17 @@ public function show(int $id): CampaignResource return new CampaignResource($campaign); } + /** + * @throws Exception + */ + public function showByName(string $name): CampaignResource + { + $workspaceId = Sendportal::currentWorkspaceId(); + $campaign = $this->campaigns->findBy($workspaceId, 'name', $name); + + return new CampaignResource($campaign); + } + /** * @throws Exception */ diff --git a/src/Routes/ApiRoutes.php b/src/Routes/ApiRoutes.php index 5dbc3d98..5fb9fa10 100644 --- a/src/Routes/ApiRoutes.php +++ b/src/Routes/ApiRoutes.php @@ -15,6 +15,7 @@ public function sendportalApiRoutes(): callable $apiRouter->get('campaigns/stats', 'CampaignsController@stats')->name('campaigns.stats'); $apiRouter->post('campaigns/send-test', 'CampaignTestController@send')->name('campaigns.send-test'); $apiRouter->apiResource('campaigns', 'CampaignsController'); + $apiRouter->get('campaigns/{campaign}', 'CampaignsController@showByName')->name('campaigns.show-by-name'); $apiRouter->post('campaigns/{id}/send', 'CampaignDispatchController@send')->name('campaigns.send'); $apiRouter->apiResource('subscribers', 'SubscribersController'); From d570c5b08ad837601a3c0fc40b9fee1536c5beac Mon Sep 17 00:00:00 2001 From: farida Date: Mon, 18 May 2026 15:30:26 +0700 Subject: [PATCH 3/4] formatting --- src/Routes/ApiRoutes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Routes/ApiRoutes.php b/src/Routes/ApiRoutes.php index 5fb9fa10..f58a0377 100644 --- a/src/Routes/ApiRoutes.php +++ b/src/Routes/ApiRoutes.php @@ -21,7 +21,7 @@ public function sendportalApiRoutes(): callable $apiRouter->apiResource('subscribers', 'SubscribersController'); $apiRouter->post('subscribers/sync', 'SubscribersController@sync')->name('subscribers.sync'); $apiRouter->apiResource('tags', 'TagsController'); - $apiRouter->get('tags/{tag}', 'TagsController@showByName')->name('tags.showByName'); + $apiRouter->get('tags/{tag}', 'TagsController@showByName')->name('tags.show-by-name'); $apiRouter->apiResource('subscribers.tags', 'SubscriberTagsController') ->except(['show', 'update', 'destroy']); From 1941e0482816982fa41eaf36356cf276ddfe0ddd Mon Sep 17 00:00:00 2001 From: farida Date: Fri, 22 May 2026 11:38:15 +0700 Subject: [PATCH 4/4] refactor: simplify --- src/Http/Controllers/Api/CampaignsController.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Http/Controllers/Api/CampaignsController.php b/src/Http/Controllers/Api/CampaignsController.php index 9e64bc50..3e011e78 100644 --- a/src/Http/Controllers/Api/CampaignsController.php +++ b/src/Http/Controllers/Api/CampaignsController.php @@ -76,9 +76,7 @@ public function show(int $id): CampaignResource public function showByName(string $name): CampaignResource { $workspaceId = Sendportal::currentWorkspaceId(); - $campaign = $this->campaigns->findBy($workspaceId, 'name', $name); - - return new CampaignResource($campaign); + return new CampaignResource($this->campaigns->findBy($workspaceId, 'name', $name)); } /**