From 89e3bcdd0ff9195f449c69daa3d92d344e2c570e Mon Sep 17 00:00:00 2001 From: zhi Date: Tue, 17 Mar 2026 16:05:32 +0000 Subject: [PATCH] =?UTF-8?q?feat(P7.1):=20remove=20task=5Ftype=3D'task'=20?= =?UTF-8?q?=E2=80=94=20migrate=20to=20issue/defect,=20update=20defaults=20?= =?UTF-8?q?and=20DB=20migration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/routers/misc.py | 2 +- app/api/routers/tasks.py | 2 +- app/main.py | 6 +++++- app/models/task.py | 2 +- app/schemas/schemas.py | 4 ++-- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/api/routers/misc.py b/app/api/routers/misc.py index f9193f3..4cb975d 100644 --- a/app/api/routers/misc.py +++ b/app/api/routers/misc.py @@ -445,7 +445,7 @@ def create_milestone_task(project_code: str, milestone_id: int, task_data: dict, description=task_data.get("description"), status=TaskStatus.OPEN, priority=TaskPriority.MEDIUM, - task_type=task_data.get("task_type", "task"), + task_type=task_data.get("task_type", "issue"), # P7.1: default changed from 'task' to 'issue' task_subtype=task_data.get("task_subtype"), project_id=project.id, milestone_id=milestone_id, diff --git a/app/api/routers/tasks.py b/app/api/routers/tasks.py index 068371f..e5c5df7 100644 --- a/app/api/routers/tasks.py +++ b/app/api/routers/tasks.py @@ -46,7 +46,7 @@ TASK_SUBTYPE_MAP = { 'story': {'feature', 'improvement', 'refactor'}, 'test': {'regression', 'security', 'smoke', 'stress'}, 'research': set(), - 'task': {'defect'}, + # P7.1: 'task' type removed — defect subtype migrated to issue/defect 'resolution': set(), } ALLOWED_TASK_TYPES = set(TASK_SUBTYPE_MAP.keys()) diff --git a/app/main.py b/app/main.py index 73d4807..594531f 100644 --- a/app/main.py +++ b/app/main.py @@ -129,7 +129,7 @@ def _migrate_schema(): # tasks extra fields result = db.execute(text("SHOW COLUMNS FROM tasks LIKE 'task_type'")) if not result.fetchone(): - db.execute(text("ALTER TABLE tasks ADD COLUMN task_type VARCHAR(32) DEFAULT 'task'")) + db.execute(text("ALTER TABLE tasks ADD COLUMN task_type VARCHAR(32) DEFAULT 'issue'")) result = db.execute(text("SHOW COLUMNS FROM tasks LIKE 'task_subtype'")) if not result.fetchone(): db.execute(text("ALTER TABLE tasks ADD COLUMN task_subtype VARCHAR(64) NULL")) @@ -194,6 +194,10 @@ def _migrate_schema(): if not _has_column(db, "milestones", "started_at"): db.execute(text("ALTER TABLE milestones ADD COLUMN started_at DATETIME NULL")) + # --- P7.1: Migrate task_type='task' to 'issue' --- + if _has_table(db, "tasks") and _has_column(db, "tasks", "task_type"): + db.execute(text("UPDATE tasks SET task_type='issue' WHERE task_type='task'")) + # --- Task status enum migration (old -> new) --- if _has_table(db, "tasks"): # Widen enum first diff --git a/app/models/task.py b/app/models/task.py index 0e6704f..767570b 100644 --- a/app/models/task.py +++ b/app/models/task.py @@ -28,7 +28,7 @@ class Task(Base): task_code = Column(String(64), nullable=True, unique=True, index=True) # Task type/subtype (replaces old issue_type/issue_subtype) - task_type = Column(String(32), default="task") + task_type = Column(String(32), default="issue") # P7.1: default changed from 'task' to 'issue' task_subtype = Column(String(64), nullable=True) project_id = Column(Integer, ForeignKey("projects.id"), nullable=False) diff --git a/app/schemas/schemas.py b/app/schemas/schemas.py index 102b4c3..15ed9ad 100644 --- a/app/schemas/schemas.py +++ b/app/schemas/schemas.py @@ -12,7 +12,7 @@ class TaskTypeEnum(str, Enum): STORY = "story" TEST = "test" RESOLUTION = "resolution" - TASK = "task" + # P7.1: 'task' type removed — defect subtype migrated to issue/defect class TaskStatusEnum(str, Enum): @@ -34,7 +34,7 @@ class TaskPriorityEnum(str, Enum): class TaskBase(BaseModel): title: str description: Optional[str] = None - task_type: TaskTypeEnum = TaskTypeEnum.TASK + task_type: TaskTypeEnum = TaskTypeEnum.ISSUE task_subtype: Optional[str] = None priority: TaskPriorityEnum = TaskPriorityEnum.MEDIUM tags: Optional[str] = None