2025-04-16 01:16:54 -07:00
|
|
|
import uuid
|
2025-04-20 16:34:29 -07:00
|
|
|
from datetime import UTC, datetime
|
|
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
|
|
|
|
from pydantic import BaseModel, Field
|
2025-04-16 01:16:54 -07:00
|
|
|
|
|
|
|
|
|
|
|
class Folder(BaseModel):
|
|
|
|
"""Represents a folder that contains documents"""
|
|
|
|
|
|
|
|
id: str = Field(default_factory=lambda: str(uuid.uuid4()))
|
|
|
|
name: str
|
|
|
|
description: Optional[str] = None
|
|
|
|
owner: Dict[str, str]
|
|
|
|
document_ids: List[str] = Field(default_factory=list)
|
|
|
|
system_metadata: Dict[str, Any] = Field(
|
|
|
|
default_factory=lambda: {
|
|
|
|
"created_at": datetime.now(UTC),
|
|
|
|
"updated_at": datetime.now(UTC),
|
|
|
|
}
|
|
|
|
)
|
2025-04-20 16:34:29 -07:00
|
|
|
access_control: Dict[str, List[str]] = Field(default_factory=lambda: {"readers": [], "writers": [], "admins": []})
|
2025-04-17 20:52:18 -07:00
|
|
|
rules: List[Dict[str, Any]] = Field(default_factory=list)
|
2025-04-16 01:16:54 -07:00
|
|
|
|
|
|
|
def __hash__(self):
|
|
|
|
return hash(self.id)
|
|
|
|
|
|
|
|
def __eq__(self, other):
|
|
|
|
if not isinstance(other, Folder):
|
|
|
|
return False
|
|
|
|
return self.id == other.id
|
|
|
|
|
|
|
|
|
|
|
|
class FolderCreate(BaseModel):
|
|
|
|
"""Request model for folder creation"""
|
|
|
|
|
|
|
|
name: str
|
|
|
|
description: Optional[str] = None
|