with('roles') ->orderBy('id') ->get() ->map(fn (User $user) => [ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, 'avatar_url' => $this->resolveAvatarUrl($user), 'roles' => $user->roles->pluck('name')->values(), ]); return response()->json($users); } public function me(Request $request): JsonResponse { $user = $request->user(); if (!$user) { return response()->json(['message' => 'Unauthenticated.'], 401); } return response()->json([ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, 'avatar_url' => $this->resolveAvatarUrl($user), 'roles' => $user->roles()->pluck('name')->values(), ]); } public function profile(User $user): JsonResponse { return response()->json([ 'id' => $user->id, 'name' => $user->name, 'avatar_url' => $this->resolveAvatarUrl($user), 'created_at' => $user->created_at?->toIso8601String(), ]); } private function resolveAvatarUrl(User $user): ?string { if (!$user->avatar_path) { return null; } return Storage::url($user->avatar_path); } }