Ragora-Server / app /application /folder_service.py
Peterase's picture
deploy: initial deployment to Hugging Face Spaces
f02c5b9
Raw History Blame Contribute Delete
2.36 kB
"""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()