<?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
);
}
}