from pydantic import BaseModel from typing import List, Optional from datetime import datetime class ProjectBase(BaseModel): project_name: str description: Optional[str] = None class ProjectCreate(ProjectBase): pass class ProjectOut(ProjectBase): id: str created_at: datetime class Config: from_attributes = True # Keep old name for backward compatibility Project = ProjectOut class DataFileBase(BaseModel): relative_path: str file_size: int file_type: str file_sha: str direction: Optional[str] = None label: Optional[str] = None extracted_value: Optional[str] = None group_key: Optional[str] = None class DataFileOut(DataFileBase): id: int storage_path: str created_at: datetime class Config: from_attributes = True # Keep old name for backward compatibility DataFile = DataFileOut class DataVersionBase(BaseModel): stage: str commit_id: str author: Optional[str] = None commit_message: Optional[str] = None manifest_snapshot: Optional[str] = None class DataVersionOut(DataVersionBase): id: str project_id: str created_at: datetime class Config: from_attributes = True class DataVersionWithFiles(DataVersionOut): files: List[DataFileOut] = [] # Keep old name for backward compatibility DataVersion = DataVersionOut class DataRecordBase(BaseModel): stage: str commit_id: str commit_message: Optional[str] = None group_key: Optional[str] = None content_hash: Optional[str] = None inputs: Optional[List] = [] outputs: Optional[List] = [] author: Optional[str] = None class DataRecordOut(DataRecordBase): id: str project_id: str version_id: str created_at: datetime class Config: from_attributes = True