<?php declare(strict_types=1); namespace App\Http\Controllers\Api\V1\Auth; use App\Attributes\OpenApiResponse; use App\Domain\Auth\AuthService; use App\Domain\Auth\Requests\LoginRequest; use App\Domain\Auth\Requests\LogoutRequest; use App\Http\Controllers\Api\ApiController; use App\Responses\MessageResponse; use App\Responses\ResponseDto; use App\Responses\TokenResponse; use Knuckles\Scribe\Attributes\Group; use Knuckles\Scribe\Attributes\Unauthenticated; class AuthController extends ApiController { protected AuthService $authService; public function __construct() { $this->authService = app()->make(AuthService::class); } /** * Логин */ #[Group('auth')] #[Unauthenticated] #[OpenApiResponse(TokenResponse::class)] public function login(LoginRequest $request): TokenResponse|MessageResponse { $result = $this->authService->login($request); if ($result) { return new TokenResponse( status: 200, message: 'Авторизация прошла успешно!', token: auth()->user()->token(), userId: auth()->id() ); } else { return new MessageResponse( message: 'При авторизации произошла ошибка.', status: 401 ); } } /** * Логаут */ #[Group('auth')] #[OpenApiResponse(MessageResponse::class)] public function logout(LogoutRequest $request) { $this->authService->logout(auth()->user()); return new MessageResponse( message: 'ok', status: 200 ); } /** * Профайл пользователя */ #[Group('auth')] #[OpenApiResponse(ResponseDto::class)] public function profile(): ResponseDto { return new ResponseDto( data: auth()->user(), status: true ); } }