This commit is contained in:
itqop 2026-01-05 15:26:53 +03:00
parent e86f4148f1
commit 25dcb7d17f
5 changed files with 48 additions and 9 deletions

View File

@ -48,23 +48,30 @@ async def list_folders(
current_user: CurrentUser,
session: DatabaseSession,
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:
current_user: Current authenticated user
session: Database session
parent_folder_id: Parent folder ID (None for root folders)
all: If True, return all user's folders (for building tree)
Returns:
List of folders
"""
folder_service = FolderService(session)
folders = await folder_service.list_folders(
user_id=current_user.id,
parent_folder_id=parent_folder_id,
)
if all:
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)

View File

@ -89,6 +89,20 @@ class FolderRepository:
result = await self.session.execute(query)
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]:
"""
Get all subfolders recursively.

View File

@ -116,6 +116,18 @@ class FolderService:
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(
self,
user_id: str,

View File

@ -110,8 +110,8 @@ export default function MoveFolderDialog({ open, onClose, onMove }: MoveFolderDi
const loadAllFolders = async () => {
try {
setLoading(true);
// Load all folders (no parent_id filter to get all)
const response = await api.listFolders();
// Load all folders with all=true parameter
const response = await api.listFolders(null, true);
const allFolders: Folder[] = response.items || [];
// Build tree structure

View File

@ -194,9 +194,15 @@ class ApiClient {
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', {
params: parentFolderId ? { parent_folder_id: parentFolderId } : undefined,
params: Object.keys(params).length > 0 ? params : undefined,
});
return data;
}