Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 56
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
AuthController
0.00% covered (danger)
0.00%
0 / 56
0.00% covered (danger)
0.00%
0 / 4
132
0.00% covered (danger)
0.00%
0 / 1
 login
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
30
 register
0.00% covered (danger)
0.00%
0 / 24
0.00% covered (danger)
0.00%
0 / 1
12
 logout
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 me
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Http\Controllers\Api\V1;
4
5use App\Models\User;
6use Illuminate\Http\JsonResponse;
7use Illuminate\Http\Request;
8use Illuminate\Support\Facades\Auth;
9use Illuminate\Support\Facades\Hash;
10use Illuminate\Validation\ValidationException;
11
12class AuthController extends BaseController
13{
14    /**
15     * Login user and create token
16     */
17    public function login(Request $request): JsonResponse
18    {
19        try {
20            $request->validate([
21                'email' => 'required|email',
22                'password' => 'required',
23            ]);
24
25            $user = User::where('email', $request->email)->first();
26
27            if (!$user || !Hash::check($request->password, $user->password)) {
28                return $this->sendError('Invalid credentials', [], 401);
29            }
30
31            $token = $user->createToken('api-token')->plainTextToken;
32
33            return $this->sendResponse([
34                'user' => [
35                    'id' => $user->id,
36                    'name' => $user->name,
37                    'email' => $user->email,
38                ],
39                'token' => $token,
40                'token_type' => 'Bearer',
41            ], 'Login successful');
42        } catch (ValidationException $e) {
43            return $this->sendValidationError($e->errors());
44        } catch (\Exception $e) {
45            return $this->sendError('Login failed: ' . $e->getMessage(), [], 500);
46        }
47    }
48
49    /**
50     * Register a new user
51     */
52    public function register(Request $request): JsonResponse
53    {
54        try {
55            $validated = $request->validate([
56                'name' => 'required|string|max:255',
57                'email' => 'required|string|email|max:255|unique:users',
58                'password' => 'required|string|min:8|confirmed',
59            ]);
60
61            $user = User::create([
62                'name' => $validated['name'],
63                'email' => $validated['email'],
64                'password' => Hash::make($validated['password']),
65            ]);
66
67            $token = $user->createToken('api-token')->plainTextToken;
68
69            return $this->sendResponse([
70                'user' => [
71                    'id' => $user->id,
72                    'name' => $user->name,
73                    'email' => $user->email,
74                ],
75                'token' => $token,
76                'token_type' => 'Bearer',
77            ], 'Registration successful', 201);
78        } catch (ValidationException $e) {
79            return $this->sendValidationError($e->errors());
80        } catch (\Exception $e) {
81            return $this->sendError('Registration failed: ' . $e->getMessage(), [], 500);
82        }
83    }
84
85    /**
86     * Logout user (revoke token)
87     */
88    public function logout(Request $request): JsonResponse
89    {
90        try {
91            $request->user()->currentAccessToken()->delete();
92
93            return $this->sendResponse(null, 'Logged out successfully');
94        } catch (\Exception $e) {
95            return $this->sendError('Logout failed: ' . $e->getMessage(), [], 500);
96        }
97    }
98
99    /**
100     * Get current authenticated user
101     */
102    public function me(Request $request): JsonResponse
103    {
104        return $this->sendResponse([
105            'user' => [
106                'id' => $request->user()->id,
107                'name' => $request->user()->name,
108                'email' => $request->user()->email,
109            ],
110        ], 'User retrieved successfully');
111    }
112}