"""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()