File "AuthController.php"

Full Path: /var/www/html/back/app/Http/Controllers/Api/V1/Auth/AuthController.php
File size: 1.96 KB
MIME-type: text/x-php
Charset: utf-8

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