From a359ec4220a6898784f210be63aacd5ddcf61b8c Mon Sep 17 00:00:00 2001 From: Mubbasher Ahmed Qureshi Date: Wed, 23 Jul 2025 12:53:15 +0500 Subject: [PATCH] fix(article): fix API Responses and paths fixed the api responses for article API --- .../Api/V1/Article/GetArticlesController.php | 9 +++-- .../Api/V1/Article/ShowArticleController.php | 2 +- .../V1/Article/GetArticlesRequest.php | 2 +- app/Http/Resources/MetaResource.php | 37 +++++++++++++++++++ .../{Api => }/V1/Article/ArticleResource.php | 2 +- 5 files changed, 45 insertions(+), 7 deletions(-) rename app/Http/Requests/{Api => }/V1/Article/GetArticlesRequest.php (97%) create mode 100644 app/Http/Resources/MetaResource.php rename app/Http/Resources/{Api => }/V1/Article/ArticleResource.php (98%) diff --git a/app/Http/Controllers/Api/V1/Article/GetArticlesController.php b/app/Http/Controllers/Api/V1/Article/GetArticlesController.php index 562627d..b288664 100644 --- a/app/Http/Controllers/Api/V1/Article/GetArticlesController.php +++ b/app/Http/Controllers/Api/V1/Article/GetArticlesController.php @@ -5,8 +5,9 @@ namespace App\Http\Controllers\Api\V1\Article; use App\Http\Controllers\Controller; -use App\Http\Requests\Api\V1\Article\GetArticlesRequest; -use App\Http\Resources\Api\V1\Article\ArticleResource; +use App\Http\Requests\V1\Article\GetArticlesRequest; +use App\Http\Resources\MetaResource; +use App\Http\Resources\V1\Article\ArticleResource; use App\Services\ArticleService; use Dedoc\Scramble\Attributes\Group; use Illuminate\Http\JsonResponse; @@ -26,7 +27,7 @@ public function __construct( * * @unauthenticated * - * @response array{status: true, message: string, data: array{data: ArticleResource[], links: array, meta: array}} + * @response array{status: true, message: string, data: array{articles: ArticleResource[], meta: MetaResource}} */ public function __invoke(GetArticlesRequest $request): JsonResponse { @@ -50,7 +51,7 @@ public function __invoke(GetArticlesRequest $request): JsonResponse return response()->apiSuccess( [ 'articles' => $articleCollectionData['data'], - 'meta' => $articleCollectionData['meta'], + 'meta' => MetaResource::make($articleCollectionData['meta']), ], __('common.success') ); diff --git a/app/Http/Controllers/Api/V1/Article/ShowArticleController.php b/app/Http/Controllers/Api/V1/Article/ShowArticleController.php index 8aa9498..a782aea 100644 --- a/app/Http/Controllers/Api/V1/Article/ShowArticleController.php +++ b/app/Http/Controllers/Api/V1/Article/ShowArticleController.php @@ -5,7 +5,7 @@ namespace App\Http\Controllers\Api\V1\Article; use App\Http\Controllers\Controller; -use App\Http\Resources\Api\V1\Article\ArticleResource; +use App\Http\Resources\V1\Article\ArticleResource; use App\Services\ArticleService; use Dedoc\Scramble\Attributes\Group; use Illuminate\Database\Eloquent\ModelNotFoundException; diff --git a/app/Http/Requests/Api/V1/Article/GetArticlesRequest.php b/app/Http/Requests/V1/Article/GetArticlesRequest.php similarity index 97% rename from app/Http/Requests/Api/V1/Article/GetArticlesRequest.php rename to app/Http/Requests/V1/Article/GetArticlesRequest.php index 5744691..9d0c982 100644 --- a/app/Http/Requests/Api/V1/Article/GetArticlesRequest.php +++ b/app/Http/Requests/V1/Article/GetArticlesRequest.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Http\Requests\Api\V1\Article; +namespace App\Http\Requests\V1\Article; use App\Enums\ArticleStatus; use Illuminate\Foundation\Http\FormRequest; diff --git a/app/Http/Resources/MetaResource.php b/app/Http/Resources/MetaResource.php new file mode 100644 index 0000000..f340850 --- /dev/null +++ b/app/Http/Resources/MetaResource.php @@ -0,0 +1,37 @@ + + */ + public function toArray($request): array + { + /** @var array> $links */ + $links = $this['links'] ?? []; + + return [ + 'current_page' => $this['current_page'] ?? null, + 'from' => $this['from'] ?? null, + 'last_page' => $this['last_page'] ?? null, + 'links' => collect($links)->map(function (array $link): array { + return [ + 'url' => $link['url'] ?? null, + 'label' => $link['label'] ?? null, + 'active' => $link['active'] ?? false, + ]; + })->values(), + 'path' => $this['path'] ?? null, + 'per_page' => $this['per_page'] ?? null, + 'to' => $this['to'] ?? null, + 'total' => $this['total'] ?? null, + ]; + } +} diff --git a/app/Http/Resources/Api/V1/Article/ArticleResource.php b/app/Http/Resources/V1/Article/ArticleResource.php similarity index 98% rename from app/Http/Resources/Api/V1/Article/ArticleResource.php rename to app/Http/Resources/V1/Article/ArticleResource.php index bd416b2..b0d01ad 100644 --- a/app/Http/Resources/Api/V1/Article/ArticleResource.php +++ b/app/Http/Resources/V1/Article/ArticleResource.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace App\Http\Resources\Api\V1\Article; +namespace App\Http\Resources\V1\Article; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource;