diff --git a/backend/app/Traits/ApiResponse.php b/backend/app/Traits/ApiResponse.php new file mode 100644 index 00000000..5c9997d8 --- /dev/null +++ b/backend/app/Traits/ApiResponse.php @@ -0,0 +1,31 @@ +json([ + 'data' => $data + ], $statusCode); + } + + $message = $message ?? __('messages.successful'); + + return response()->json([ + 'message' => $message + ], $statusCode); + } + + public function errorResponse(string $message, string $type = 'logical_exception', int $statusCode = 422): JsonResponse + { + return response()->json([ + 'type' => $type, + 'message' => $message + ], $statusCode); + } +} diff --git a/backend/app/User/Controller/Auth/AuthController.php b/backend/app/User/Controller/Auth/AuthController.php index 806a637b..49640cb4 100644 --- a/backend/app/User/Controller/Auth/AuthController.php +++ b/backend/app/User/Controller/Auth/AuthController.php @@ -4,61 +4,63 @@ namespace App\User\Controller\Auth; use App\Http\Controllers\Controller; use App\Models\User; +use App\Traits\ApiResponse; use App\User\Requests\Auth\LoginRequest; -use App\User\Requests\Auth\ًRegisterRequest; +use App\User\Requests\Auth\RegisterRequest; use Illuminate\Http\JsonResponse; +use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; class AuthController extends Controller { - public function register(ًRegisterRequest $request): JsonResponse + use ApiResponse; + + public function register(RegisterRequest $request): JsonResponse { $user = User::query()->create([ - 'name' => $request->name, + 'username' => $request->username, 'email' => $request->email, 'password' => Hash::make($request->password), ]); $token = $user->createToken('Register Token')->accessToken; - return response()->json([ - 'success' => true, + return $this->successResponse([ 'token_type' => 'Bearer', 'access_token' => $token, - 'user' => [ - 'id' => $user->id, - 'username' => $user->username, - ], - ], 201); + ]); } - public function login(loginRequest $request): JsonResponse + public function login(LoginRequest $request): JsonResponse { + $user = null; + if ($request->filled('email')) { $user = User::query() - ->where('name', $request->name)->first(); - } - elseif ($request->filled('username')) { + ->where('email', $request->email) + ->first(); + } elseif ($request->filled('username')) { $user = User::query() - ->where('name', $request->name) + ->where('username', $request->username) ->first(); } if (!$user || !Hash::check($request->password, $user->password)) { - return response()->json([ - 'message' => 'Invalid credentials' - ], 401); + return $this->errorResponse(''); } $token = $user->createToken('Login Token')->accessToken; - return response()->json([ - 'success' => true, - 'token' => $token, - 'user' => [ - 'id' => $user->id, - 'name' => $user->name, - ], + return $this->successResponse([ + 'token_type' => 'Bearer', + 'access_token' => $token, ]); } + + public function logout(Request $request): JsonResponse + { + $request->user()->token()->revoke(); + + return $this->successResponse(); + } } diff --git a/backend/app/User/Requests/Auth/LoginRequest.php b/backend/app/User/Requests/Auth/LoginRequest.php index d00d7154..18442f03 100644 --- a/backend/app/User/Requests/Auth/LoginRequest.php +++ b/backend/app/User/Requests/Auth/LoginRequest.php @@ -22,7 +22,7 @@ class LoginRequest extends FormRequest public function rules(): array { return [ - 'name' => 'required_without:email|string', + 'username' => 'required_without:email|string', 'email' => 'required_without:name|email', 'password' => 'required|string', ]; diff --git a/backend/app/User/Requests/Auth/ًRegisterRequest.php b/backend/app/User/Requests/Auth/RegisterRequest.php similarity index 84% rename from backend/app/User/Requests/Auth/ًRegisterRequest.php rename to backend/app/User/Requests/Auth/RegisterRequest.php index e26d14e1..54f8c783 100644 --- a/backend/app/User/Requests/Auth/ًRegisterRequest.php +++ b/backend/app/User/Requests/Auth/RegisterRequest.php @@ -4,7 +4,7 @@ namespace App\User\Requests\Auth; use Illuminate\Foundation\Http\FormRequest; -class ًRegisterRequest extends FormRequest +class RegisterRequest extends FormRequest { /** * Determine if the user is authorized to make this request. @@ -22,7 +22,7 @@ class ًRegisterRequest extends FormRequest public function rules(): array { return [ - 'name' => 'required_without:email|unique:users,name', + 'username' => 'required_without:email|unique:users,name', 'email' => 'required_without:name|email|unique:users,email', 'password' => 'required|string|regex:/^(?=.*[a-zA-Z])(?=.*\d).+$/|min:8', ]; diff --git a/backend/routes/api.php b/backend/routes/api.php index 608543fc..fa658a85 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -10,10 +10,11 @@ Route::get('/user', function (Request $request) { Route::prefix('user')->group(function () { Route::prefix('Auth') - ->namespace('Auth') + ->name('Auth') ->controller(AuthController::class) ->group(function () { Route::post('register', 'register')->name('register'); Route::post('login', 'login')->name('login'); + Route::post('logout', 'logout')->middleware('auth:api')->name('logout'); }); });