from sqlalchemy import Column, String, JSON from database import Base class Space(Base): __tablename__ = "spaces" id = Column(String(50), primary_key=True) name = Column(String(200), nullable=False) class TestCase(Base): __tablename__ = "test_cases" id = Column(String(50), primary_key=True) case_id = Column(String(50), unique=True, nullable=True) text = Column(String(200), nullable=False) module = Column(String(100)) type = Column(String(50), default="General") priority = Column(String(20), default="P2") review_status = Column(String(50), default="Draft") execution_status = Column(String(50), default="UNTESTED") maintainer = Column(String(100)) requirement_id = Column(String(100)) bug_id = Column(String(100)) steps = Column(JSON, nullable=True) # [{action, expected}] tags = Column(JSON, nullable=True) # string[] reviewers = Column(JSON, nullable=True) # string[] (Feishu open_ids) parent_id = Column(String(50), nullable=True) space_id = Column(String(50)) class TestTask(Base): __tablename__ = "test_tasks" id = Column(String(50), primary_key=True) name = Column(String(200), nullable=False) status = Column(String(50), default="PENDING") # PENDING / RUNNING / COMPLETED plan_id = Column(String(50)) assignees = Column(JSON, nullable=True) # string[] created_at = Column(String(50)) class TestPlan(Base): __tablename__ = "test_plans" id = Column(String(50), primary_key=True) name = Column(String(200), nullable=False) type = Column(String(50)) # Self-test / Regression / Requirement / Smoke case_ids = Column(JSON, nullable=True) # string[] assignees = Column(JSON, nullable=True) # string[] (Feishu open_ids) created_at = Column(String(50)) space_id = Column(String(50)) class Bug(Base): __tablename__ = "bugs" id = Column(String(50), primary_key=True) title = Column(String(200), nullable=False) status = Column(String(50), default="OPEN") # OPEN / RESOLVED / CLOSED case_id = Column(String(50))