from sqlmodel import SQLModel, Field, Relationship, text from datetime import datetime from typing import Optional, List from sqlalchemy import Column, String, Text class Subject(SQLModel, table=True): __tablename__ = "subject" id: Optional[int] = Field(default=None, primary_key=True) name: str = Field(max_length=100) color: str = Field(default="#6366f1") created_at: datetime = Field(default_factory=datetime.now) error_images: List["ErrorImage"] = Relationship(back_populates="subject") evaluations: List["Evaluation"] = Relationship(back_populates="subject") class ErrorImage(SQLModel, table=True): __tablename__ = "error_image" id: Optional[int] = Field(default=None, primary_key=True) subject_id: int = Field(foreign_key="subject.id") date: str = Field(max_length=20, index=True) filename: str = Field(max_length=255) original_name: str = Field(max_length=255) upload_time: datetime = Field(default_factory=datetime.now) subject: Subject = Relationship(back_populates="error_images") class Evaluation(SQLModel, table=True): __tablename__ = "evaluation" id: Optional[int] = Field(default=None, primary_key=True) subject_id: int = Field(foreign_key="subject.id") date: str = Field(max_length=20) title: str = Field(max_length=200) content: str = Field(default="") filename: Optional[str] = Field(default=None, max_length=255) upload_time: datetime = Field(default_factory=datetime.now) subject: Subject = Relationship(back_populates="evaluations")