diff --git a/surfsense_backend/app/routes/chats_routes.py b/surfsense_backend/app/routes/chats_routes.py
index df80ca4..e10aa50 100644
--- a/surfsense_backend/app/routes/chats_routes.py
+++ b/surfsense_backend/app/routes/chats_routes.py
@@ -88,16 +88,19 @@ async def create_chat(
async def read_chats(
skip: int = 0,
limit: int = 100,
+ search_space_id: int = None,
session: AsyncSession = Depends(get_async_session),
user: User = Depends(current_active_user)
):
try:
+ query = select(Chat).join(SearchSpace).filter(SearchSpace.user_id == user.id)
+
+ # Filter by search_space_id if provided
+ if search_space_id is not None:
+ query = query.filter(Chat.search_space_id == search_space_id)
+
result = await session.execute(
- select(Chat)
- .join(SearchSpace)
- .filter(SearchSpace.user_id == user.id)
- .offset(skip)
- .limit(limit)
+ query.offset(skip).limit(limit)
)
return result.scalars().all()
except OperationalError:
diff --git a/surfsense_backend/app/routes/documents_routes.py b/surfsense_backend/app/routes/documents_routes.py
index 2298005..aa42476 100644
--- a/surfsense_backend/app/routes/documents_routes.py
+++ b/surfsense_backend/app/routes/documents_routes.py
@@ -170,16 +170,19 @@ async def process_file_in_background(
async def read_documents(
skip: int = 0,
limit: int = 300,
+ search_space_id: int = None,
session: AsyncSession = Depends(get_async_session),
user: User = Depends(current_active_user)
):
try:
+ query = select(Document).join(SearchSpace).filter(SearchSpace.user_id == user.id)
+
+ # Filter by search_space_id if provided
+ if search_space_id is not None:
+ query = query.filter(Document.search_space_id == search_space_id)
+
result = await session.execute(
- select(Document)
- .join(SearchSpace)
- .filter(SearchSpace.user_id == user.id)
- .offset(skip)
- .limit(limit)
+ query.offset(skip).limit(limit)
)
db_documents = result.scalars().all()
diff --git a/surfsense_backend/app/routes/search_source_connectors_routes.py b/surfsense_backend/app/routes/search_source_connectors_routes.py
index 786c19d..ff5cce1 100644
--- a/surfsense_backend/app/routes/search_source_connectors_routes.py
+++ b/surfsense_backend/app/routes/search_source_connectors_routes.py
@@ -116,16 +116,18 @@ async def create_search_source_connector(
async def read_search_source_connectors(
skip: int = 0,
limit: int = 100,
+ search_space_id: int = None,
session: AsyncSession = Depends(get_async_session),
user: User = Depends(current_active_user)
):
"""List all search source connectors for the current user."""
try:
+ query = select(SearchSourceConnector).filter(SearchSourceConnector.user_id == user.id)
+
+ # No need to filter by search_space_id as connectors are user-owned, not search space specific
+
result = await session.execute(
- select(SearchSourceConnector)
- .filter(SearchSourceConnector.user_id == user.id)
- .offset(skip)
- .limit(limit)
+ query.offset(skip).limit(limit)
)
return result.scalars().all()
except Exception as e:
diff --git a/surfsense_web/app/dashboard/[search_space_id]/chats/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/chats/page.tsx
index d866282..58c89f4 100644
--- a/surfsense_web/app/dashboard/[search_space_id]/chats/page.tsx
+++ b/surfsense_web/app/dashboard/[search_space_id]/chats/page.tsx
@@ -7,12 +7,15 @@ interface PageProps {
};
}
-export default function ChatsPage({ params }: PageProps) {
+export default async function ChatsPage({ params }: PageProps) {
+ // Await params to properly access dynamic route parameters
+ const searchSpaceId = params.search_space_id;
+
return (
}>
-
+
);
}
\ No newline at end of file
diff --git a/surfsense_web/components/sidebar/AppSidebarProvider.tsx b/surfsense_web/components/sidebar/AppSidebarProvider.tsx
index c4306e9..679157c 100644
--- a/surfsense_web/components/sidebar/AppSidebarProvider.tsx
+++ b/surfsense_web/components/sidebar/AppSidebarProvider.tsx
@@ -118,8 +118,8 @@ export function AppSidebarProvider({
if (typeof window === 'undefined') return;
try {
- // Use the API client instead of direct fetch
- const chats: Chat[] = await apiClient.get('api/v1/chats/?limit=5&skip=0');
+ // Use the API client instead of direct fetch - filter by current search space ID
+ const chats: Chat[] = await apiClient.get(`api/v1/chats/?limit=5&skip=0&search_space_id=${searchSpaceId}`);
// Transform API response to the format expected by AppSidebar
const formattedChats = chats.map(chat => ({
@@ -170,7 +170,7 @@ export function AppSidebarProvider({
// Clean up interval on component unmount
return () => clearInterval(intervalId);
- }, []);
+ }, [searchSpaceId]);
// Handle delete chat
const handleDeleteChat = async () => {
diff --git a/surfsense_web/hooks/use-documents.ts b/surfsense_web/hooks/use-documents.ts
index 923d6e0..cfe2b05 100644
--- a/surfsense_web/hooks/use-documents.ts
+++ b/surfsense_web/hooks/use-documents.ts
@@ -22,7 +22,7 @@ export function useDocuments(searchSpaceId: number) {
try {
setLoading(true);
const response = await fetch(
- `${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/api/v1/documents`,
+ `${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/api/v1/documents?search_space_id=${searchSpaceId}`,
{
headers: {
Authorization: `Bearer ${localStorage.getItem('surfsense_bearer_token')}`,
@@ -57,7 +57,7 @@ export function useDocuments(searchSpaceId: number) {
setLoading(true);
try {
const response = await fetch(
- `${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/api/v1/documents`,
+ `${process.env.NEXT_PUBLIC_FASTAPI_BACKEND_URL}/api/v1/documents?search_space_id=${searchSpaceId}`,
{
headers: {
Authorization: `Bearer ${localStorage.getItem('surfsense_bearer_token')}`,