feat(P7.1): remove task_type='task' — migrate to issue/defect, update defaults and DB migration
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user