validate([ 'email' => 'required|email', 'password' => 'required', 'device_name' => 'nullable|string', ]); $user = User::where('email', $request->email)->first(); if (!$user || !Hash::check($request->password, $user->password)) { return response()->json([ 'success' => false, 'data' => null, 'message' => 'Invalid email or password', 'errors' => ['email' => ['Invalid email or password']], ], 401); } if ($user->is_enable_login == 0 || $user->status === 'inactive') { return response()->json([ 'success' => false, 'data' => null, 'message' => 'Your account login is disabled', 'errors' => null, ], 403); } $deviceName = $request->device_name ?? 'mobile_app'; $token = $user->createToken($deviceName)->plainTextToken; return response()->json([ 'success' => true, 'token' => $token, 'user' => $user->load('employee'), 'data' => [ 'token' => $token, 'user' => $user, ], 'message' => 'Login successful', 'errors' => null, ]); } public function logout(Request $request) { if ($request->user() && $request->user()->currentAccessToken()) { $request->user()->currentAccessToken()->delete(); } return response()->json([ 'success' => true, 'data' => null, 'message' => 'Successfully logged out', 'errors' => null, ]); } public function user(Request $request) { $user = $request->user()->load('employee'); return response()->json([ 'success' => true, 'user' => $user, 'data' => [ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, 'user' => $user, 'employee' => $user->employee, ], 'message' => null, 'errors' => null, ]); } public function updateProfile(Request $request) { $user = $request->user(); $request->validate([ 'name' => 'nullable|string|max:255', 'email' => 'nullable|email|unique:users,email,' . $user->id, 'avatar' => 'nullable|image|mimes:jpeg,png,jpg,webp|max:5120', ]); if ($request->filled('name')) { $user->name = $request->name; } if ($request->filled('email')) { $user->email = $request->email; } if ($request->hasFile('avatar')) { $avatarPath = $request->file('avatar')->store('avatars', 'public'); $user->avatar = asset('storage/' . $avatarPath); } $user->save(); return response()->json([ 'success' => true, 'message' => 'Profile updated successfully', 'user' => $user->fresh('employee'), 'data' => $user->fresh('employee'), 'errors' => null, ]); } }