fix tree
This commit is contained in:
parent
e86f4148f1
commit
25dcb7d17f
|
|
@ -48,23 +48,30 @@ async def list_folders(
|
||||||
current_user: CurrentUser,
|
current_user: CurrentUser,
|
||||||
session: DatabaseSession,
|
session: DatabaseSession,
|
||||||
parent_folder_id: Optional[str] = Query(None),
|
parent_folder_id: Optional[str] = Query(None),
|
||||||
|
all: bool = Query(False, description="Return all folders (ignore parent_folder_id)"),
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
List folders in a specific parent folder.
|
List folders in a specific parent folder or all folders.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
current_user: Current authenticated user
|
current_user: Current authenticated user
|
||||||
session: Database session
|
session: Database session
|
||||||
parent_folder_id: Parent folder ID (None for root folders)
|
parent_folder_id: Parent folder ID (None for root folders)
|
||||||
|
all: If True, return all user's folders (for building tree)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
List of folders
|
List of folders
|
||||||
"""
|
"""
|
||||||
folder_service = FolderService(session)
|
folder_service = FolderService(session)
|
||||||
folders = await folder_service.list_folders(
|
|
||||||
user_id=current_user.id,
|
if all:
|
||||||
parent_folder_id=parent_folder_id,
|
folders = await folder_service.list_all_folders(user_id=current_user.id)
|
||||||
)
|
else:
|
||||||
|
folders = await folder_service.list_folders(
|
||||||
|
user_id=current_user.id,
|
||||||
|
parent_folder_id=parent_folder_id,
|
||||||
|
)
|
||||||
|
|
||||||
return FolderListResponse(items=folders)
|
return FolderListResponse(items=folders)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,20 @@ class FolderRepository:
|
||||||
result = await self.session.execute(query)
|
result = await self.session.execute(query)
|
||||||
return list(result.scalars().all())
|
return list(result.scalars().all())
|
||||||
|
|
||||||
|
async def list_all_by_user(self, user_id: str) -> list[Folder]:
|
||||||
|
"""
|
||||||
|
List ALL folders for a user (no parent filter).
|
||||||
|
|
||||||
|
Args:
|
||||||
|
user_id: User ID
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of all user's folders
|
||||||
|
"""
|
||||||
|
query = select(Folder).where(Folder.user_id == user_id).order_by(Folder.name)
|
||||||
|
result = await self.session.execute(query)
|
||||||
|
return list(result.scalars().all())
|
||||||
|
|
||||||
async def get_all_subfolders(self, folder_id: str) -> list[Folder]:
|
async def get_all_subfolders(self, folder_id: str) -> list[Folder]:
|
||||||
"""
|
"""
|
||||||
Get all subfolders recursively.
|
Get all subfolders recursively.
|
||||||
|
|
|
||||||
|
|
@ -116,6 +116,18 @@ class FolderService:
|
||||||
|
|
||||||
return folders
|
return folders
|
||||||
|
|
||||||
|
async def list_all_folders(self, user_id: str) -> list[Folder]:
|
||||||
|
"""
|
||||||
|
List ALL folders for a user (no parent filter).
|
||||||
|
|
||||||
|
Args:
|
||||||
|
user_id: User ID
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of all user's folders
|
||||||
|
"""
|
||||||
|
return await self.folder_repo.list_all_by_user(user_id)
|
||||||
|
|
||||||
async def rename_folder(
|
async def rename_folder(
|
||||||
self,
|
self,
|
||||||
user_id: str,
|
user_id: str,
|
||||||
|
|
|
||||||
|
|
@ -110,8 +110,8 @@ export default function MoveFolderDialog({ open, onClose, onMove }: MoveFolderDi
|
||||||
const loadAllFolders = async () => {
|
const loadAllFolders = async () => {
|
||||||
try {
|
try {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
// Load all folders (no parent_id filter to get all)
|
// Load all folders with all=true parameter
|
||||||
const response = await api.listFolders();
|
const response = await api.listFolders(null, true);
|
||||||
const allFolders: Folder[] = response.items || [];
|
const allFolders: Folder[] = response.items || [];
|
||||||
|
|
||||||
// Build tree structure
|
// Build tree structure
|
||||||
|
|
|
||||||
|
|
@ -194,9 +194,15 @@ class ApiClient {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
async listFolders(parentFolderId?: string | null): Promise<any> {
|
async listFolders(parentFolderId?: string | null, all: boolean = false): Promise<any> {
|
||||||
|
const params: any = {};
|
||||||
|
if (all) {
|
||||||
|
params.all = true;
|
||||||
|
} else if (parentFolderId) {
|
||||||
|
params.parent_folder_id = parentFolderId;
|
||||||
|
}
|
||||||
const { data } = await this.client.get('/folders', {
|
const { data } = await this.client.get('/folders', {
|
||||||
params: parentFolderId ? { parent_folder_id: parentFolderId } : undefined,
|
params: Object.keys(params).length > 0 ? params : undefined,
|
||||||
});
|
});
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue