""" Database models and data structures. Defines the core data models for projects, tasks, annotations, and users. """ from datetime import datetime from typing import Optional class User: """User model representing a system user.""" def __init__( self, id: str, username: str, email: str, password_hash: str, role: str, oauth_provider: Optional[str], oauth_id: Optional[str], created_at: datetime ): self.id = id self.username = username self.email = email self.password_hash = password_hash self.role = role self.oauth_provider = oauth_provider # 预留 OAuth self.oauth_id = oauth_id # 预留 OAuth self.created_at = created_at @classmethod def from_row(cls, row): """Create User instance from database row.""" return cls( id=row["id"], username=row["username"], email=row["email"], password_hash=row["password_hash"], role=row["role"], oauth_provider=row["oauth_provider"] if "oauth_provider" in row.keys() else None, oauth_id=row["oauth_id"] if "oauth_id" in row.keys() else None, created_at=row["created_at"] ) class Project: """Project model representing a labeling project.""" def __init__( self, id: str, name: str, description: str, config: str, created_at: datetime ): self.id = id self.name = name self.description = description self.config = config self.created_at = created_at @classmethod def from_row(cls, row): """Create Project instance from database row.""" return cls( id=row["id"], name=row["name"], description=row["description"], config=row["config"], created_at=row["created_at"] ) class Task: """Task model representing a labeling task.""" def __init__( self, id: str, project_id: str, name: str, data: str, status: str, assigned_to: Optional[str], created_at: datetime ): self.id = id self.project_id = project_id self.name = name self.data = data self.status = status self.assigned_to = assigned_to self.created_at = created_at @classmethod def from_row(cls, row): """Create Task instance from database row.""" return cls( id=row["id"], project_id=row["project_id"], name=row["name"], data=row["data"], status=row["status"], assigned_to=row["assigned_to"], created_at=row["created_at"] ) class Annotation: """Annotation model representing a labeling result.""" def __init__( self, id: str, task_id: str, user_id: str, result: str, created_at: datetime, updated_at: datetime ): self.id = id self.task_id = task_id self.user_id = user_id self.result = result self.created_at = created_at self.updated_at = updated_at @classmethod def from_row(cls, row): """Create Annotation instance from database row.""" return cls( id=row["id"], task_id=row["task_id"], user_id=row["user_id"], result=row["result"], created_at=row["created_at"], updated_at=row["updated_at"] )