Files
bogazici-api/app/Http/Controllers/Api/Admin/AuthController.php
2026-03-27 10:41:54 +03:00

119 lines
4.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Api\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use OpenApi\Attributes as OA;
class AuthController extends Controller
{
#[OA\Post(
path: '/api/admin/login',
summary: 'Admin girişi',
description: 'E-posta ve şifre ile giriş yaparak Sanctum token alır.',
tags: ['Auth'],
requestBody: new OA\RequestBody(
required: true,
content: new OA\JsonContent(
required: ['email', 'password'],
properties: [
new OA\Property(property: 'email', type: 'string', format: 'email', example: 'admin@bogazicidenizcilik.com.tr'),
new OA\Property(property: 'password', type: 'string', format: 'password', example: 'password'),
],
),
),
responses: [
new OA\Response(response: 200, description: 'Başarılı giriş', content: new OA\JsonContent(
properties: [
new OA\Property(property: 'data', type: 'object', properties: [
new OA\Property(property: 'token', type: 'string'),
new OA\Property(property: 'user', type: 'object'),
]),
],
)),
new OA\Response(response: 401, description: 'Geçersiz kimlik bilgileri'),
new OA\Response(response: 422, description: 'Validasyon hatası'),
],
)]
public function login(LoginRequest $request): JsonResponse
{
if (! Auth::attempt($request->only('email', 'password'))) {
return response()->json([
'message' => 'Geçersiz e-posta veya şifre.',
], 401);
}
/** @var User $user */
$user = Auth::user();
$token = $user->createToken('admin-token')->plainTextToken;
return response()->json([
'data' => [
'token' => $token,
'user' => [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
'roles' => $user->getRoleNames(),
'permissions' => $user->getAllPermissions()->pluck('name'),
],
],
]);
}
#[OA\Get(
path: '/api/admin/me',
summary: 'Mevcut kullanıcı bilgileri',
description: 'Oturum açmış kullanıcının bilgilerini, rollerini ve izinlerini döndürür.',
security: [['sanctum' => []]],
tags: ['Auth'],
responses: [
new OA\Response(response: 200, description: 'Kullanıcı bilgileri'),
new OA\Response(response: 401, description: 'Yetkisiz erişim'),
],
)]
public function me(Request $request): JsonResponse
{
/** @var User $user */
$user = $request->user();
return response()->json([
'data' => [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
'roles' => $user->getRoleNames(),
'permissions' => $user->getAllPermissions()->pluck('name'),
],
]);
}
#[OA\Post(
path: '/api/admin/logout',
summary: ıkış yap',
description: 'Mevcut token\'ı iptal eder.',
security: [['sanctum' => []]],
tags: ['Auth'],
responses: [
new OA\Response(response: 200, description: 'Başarıyla çıkış yapıldı'),
new OA\Response(response: 401, description: 'Yetkisiz erişim'),
],
)]
public function logout(Request $request): JsonResponse
{
/** @var User $user */
$user = $request->user();
$user->currentAccessToken()->delete();
return response()->json([
'message' => 'Başarıyla çıkış yapıldı.',
]);
}
}