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; $user->load('employee'); if (!empty($user->avatar)) { $user->avatar = get_file($user->avatar); } return response()->json([ 'success' => true, 'token' => $token, 'user' => $user, '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'); if (!empty($user->avatar)) { $user->avatar = get_file($user->avatar); } if ($user->employee && !empty($user->employee->avatar)) { $user->employee->avatar = get_file($user->employee->avatar); } return response()->json([ 'success' => true, 'user' => $user, 'data' => [ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, 'avatar' => $user->avatar, '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')) { $file = $request->file('avatar'); $filename = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension(); $file->storeAs('avatars', $filename, 'public'); $user->avatar = 'avatars/' . $filename; if ($user->employee && \Schema::hasColumn('employees', 'avatar')) { try { $user->employee->avatar = 'avatars/' . $filename; $user->employee->save(); } catch (\Exception $e) {} } } $user->save(); if ($user->employee) { try { $emp = $user->employee; $empFields = [ 'phone', 'date_of_birth', 'gender', 'address_line_1', 'address_line_2', 'city', 'state', 'country', 'postal_code', 'emergency_contact_name', 'emergency_contact_relationship', 'emergency_contact_number', 'bank_name', 'account_holder_name', 'account_number' ]; foreach ($empFields as $field) { if ($request->has($field)) { $emp->{$field} = $request->input($field); } } $emp->save(); } catch (\Exception $e) {} } $freshUser = $user->fresh('employee'); if (!empty($freshUser->avatar)) { $freshUser->avatar = get_file($freshUser->avatar); } if ($freshUser->employee && !empty($freshUser->employee->avatar)) { $freshUser->employee->avatar = get_file($freshUser->employee->avatar); } return response()->json([ 'success' => true, 'message' => 'Profile updated successfully', 'user' => $freshUser, 'data' => [ 'user' => $freshUser, 'employee' => $freshUser->employee, 'avatar' => $freshUser->avatar, ], 'errors' => null, ]); } }