Spaces:
Sleeping
Sleeping
| """Folder management use cases.""" | |
| from typing import List, Optional | |
| from sqlalchemy.orm import Session | |
| from app.models import Folder | |
| class FolderService: | |
| """Manages folder operations.""" | |
| def __init__(self, db: Session): | |
| self.db = db | |
| def create_folder( | |
| self, | |
| name: str, | |
| org_id: str, | |
| parent_id: Optional[str] = None | |
| ) -> dict: | |
| """Create a new folder.""" | |
| folder = Folder( | |
| name=name, | |
| org_id=org_id, | |
| parent_id=parent_id | |
| ) | |
| self.db.add(folder) | |
| self.db.commit() | |
| self.db.refresh(folder) | |
| return { | |
| "id": folder.id, | |
| "name": folder.name, | |
| "parent_id": folder.parent_id, | |
| "created_at": folder.created_at | |
| } | |
| def list_folders( | |
| self, | |
| org_id: str, | |
| parent_id: Optional[str] = None | |
| ) -> List[dict]: | |
| """List folders for organization.""" | |
| query = self.db.query(Folder).filter(Folder.org_id == org_id) | |
| if parent_id: | |
| query = query.filter(Folder.parent_id == parent_id) | |
| else: | |
| query = query.filter(Folder.parent_id == None) | |
| folders = query.order_by(Folder.created_at.desc()).all() | |
| return [ | |
| { | |
| "id": f.id, | |
| "name": f.name, | |
| "parent_id": f.parent_id, | |
| "created_at": f.created_at | |
| } | |
| for f in folders | |
| ] | |
| def delete_folder(self, folder_id: str, org_id: str) -> None: | |
| """Delete a folder (must be empty).""" | |
| folder = self.db.query(Folder).filter( | |
| Folder.id == folder_id, | |
| Folder.org_id == org_id | |
| ).first() | |
| if not folder: | |
| raise ValueError("Folder not found") | |
| # Check if folder has documents | |
| if folder.documents: | |
| raise ValueError("Folder must be empty before deletion (contains documents)") | |
| # Check if folder has subfolders | |
| subfolders = self.db.query(Folder).filter(Folder.parent_id == folder_id).count() | |
| if subfolders > 0: | |
| raise ValueError("Folder must be empty before deletion (contains subfolders)") | |
| self.db.delete(folder) | |
| self.db.commit() | |