diff --git a/app/Http/Controllers/Api/V1/User/MeController.php b/app/Http/Controllers/Api/V1/User/MeController.php new file mode 100644 index 0000000..98d9aeb --- /dev/null +++ b/app/Http/Controllers/Api/V1/User/MeController.php @@ -0,0 +1,38 @@ +user(); + $user->load(['roles.permissions']); + + return response()->apiSuccess( + new \App\Http\Resources\V1\Auth\UserResource($user), + __('common.success') + ); + } +} diff --git a/app/Http/Resources/V1/Auth/UserResource.php b/app/Http/Resources/V1/Auth/UserResource.php index 5bcdfc9..281f713 100644 --- a/app/Http/Resources/V1/Auth/UserResource.php +++ b/app/Http/Resources/V1/Auth/UserResource.php @@ -49,13 +49,16 @@ public function toArray(Request $request): array return array_values(array_unique($permissionSlugs)); }), - $this->mergeWhen(isset($this->resource->access_token), [ - 'access_token' => $this->resource->access_token, - 'refresh_token' => $this->resource->refresh_token, - 'access_token_expires_at' => $this->resource->access_token_expires_at?->toISOString(), - 'refresh_token_expires_at' => $this->resource->refresh_token_expires_at?->toISOString(), - 'token_type' => 'Bearer', - ]), + $this->mergeWhen( + array_key_exists('access_token', $this->resource->getAttributes()), + fn () => [ + 'access_token' => $this->resource->getAttributes()['access_token'], + 'refresh_token' => $this->resource->getAttributes()['refresh_token'] ?? null, + 'access_token_expires_at' => optional($this->resource->getAttributes()['access_token_expires_at'] ?? null)?->toISOString(), + 'refresh_token_expires_at' => optional($this->resource->getAttributes()['refresh_token_expires_at'] ?? null)?->toISOString(), + 'token_type' => 'Bearer', + ] + ), ]; } } diff --git a/lang/en/common.php b/lang/en/common.php index cf59e63..0a67c9d 100644 --- a/lang/en/common.php +++ b/lang/en/common.php @@ -11,4 +11,5 @@ */ 'something_went_wrong' => 'Something went wrong! Try again later.', + 'success' => 'Response returned successfully.', ]; diff --git a/routes/api_v1.php b/routes/api_v1.php index 2dbf567..f105c64 100644 --- a/routes/api_v1.php +++ b/routes/api_v1.php @@ -18,8 +18,6 @@ // User Routes Route::middleware(['auth:sanctum', 'ability:access-api'])->group(function () { - Route::get('/me', function (Request $request) { - return auth()->user(); - }); + Route::get('/me', \App\Http\Controllers\Api\V1\User\MeController::class); }); }); diff --git a/tests/Feature/API/V1/User/MeControllerTest.php b/tests/Feature/API/V1/User/MeControllerTest.php new file mode 100644 index 0000000..b2fadf1 --- /dev/null +++ b/tests/Feature/API/V1/User/MeControllerTest.php @@ -0,0 +1,51 @@ +create([ + 'name' => 'John Doe', + 'email' => 'john@example.com', + ]); + + // Authenticate the user with Sanctum + Sanctum::actingAs($user, ['access-api']); + + // Make request to /me endpoint + $response = $this->getJson('/api/v1/me'); + + // Assert response structure + $response + ->assertStatus(200) + ->assertJsonStructure([ + 'status', + 'message', + 'data' => [ + 'id', + 'name', + 'email', + 'email_verified_at', + 'bio', + 'avatar_url', + 'twitter', + 'facebook', + 'linkedin', + 'github', + 'website', + ], + ]) + ->assertJson([ + 'status' => true, + 'data' => [ + 'id' => $user->id, + 'name' => 'John Doe', + 'email' => 'john@example.com', + ], + ]); + }); +});