refactor: replace issues backend with milestone tasks

This commit is contained in:
zhi
2026-03-16 13:22:14 +00:00
parent dc5d06489d
commit 214a9b109d
20 changed files with 836 additions and 1066 deletions

View File

@@ -4,9 +4,7 @@ from datetime import datetime
from enum import Enum
class IssueTypeEnum(str, Enum):
MEETING = "meeting"
SUPPORT = "support"
class TaskTypeEnum(str, Enum):
ISSUE = "issue"
MAINTENANCE = "maintenance"
RESEARCH = "research"
@@ -14,40 +12,39 @@ class IssueTypeEnum(str, Enum):
STORY = "story"
TEST = "test"
RESOLUTION = "resolution"
TASK = "task" # legacy
TASK = "task"
class IssueStatusEnum(str, Enum):
class TaskStatusEnum(str, Enum):
OPEN = "open"
IN_PROGRESS = "in_progress"
RESOLVED = "resolved"
PENDING = "pending"
PROGRESSING = "progressing"
CLOSED = "closed"
BLOCKED = "blocked"
class IssuePriorityEnum(str, Enum):
class TaskPriorityEnum(str, Enum):
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
CRITICAL = "critical"
# Issue schemas
class IssueBase(BaseModel):
# Task schemas
class TaskBase(BaseModel):
title: str
description: Optional[str] = None
issue_type: IssueTypeEnum = IssueTypeEnum.ISSUE
issue_subtype: Optional[str] = None
priority: IssuePriorityEnum = IssuePriorityEnum.MEDIUM
task_type: TaskTypeEnum = TaskTypeEnum.TASK
task_subtype: Optional[str] = None
priority: TaskPriorityEnum = TaskPriorityEnum.MEDIUM
tags: Optional[str] = None
depends_on_id: Optional[int] = None
due_date: Optional[datetime] = None
estimated_effort: Optional[int] = None
estimated_working_time: Optional[str] = None
class TaskCreate(TaskBase):
project_id: Optional[int] = None
milestone_id: Optional[int] = None
class IssueCreate(IssueBase):
project_id: int
reporter_id: int
reporter_id: Optional[int] = None
assignee_id: Optional[int] = None
# Resolution specific
resolution_summary: Optional[str] = None
@@ -55,37 +52,35 @@ class IssueCreate(IssueBase):
pending_matters: Optional[str] = None
class IssueUpdate(BaseModel):
class TaskUpdate(BaseModel):
title: Optional[str] = None
description: Optional[str] = None
issue_type: Optional[IssueTypeEnum] = None
issue_subtype: Optional[str] = None
status: Optional[IssueStatusEnum] = None
priority: Optional[IssuePriorityEnum] = None
task_type: Optional[TaskTypeEnum] = None
task_subtype: Optional[str] = None
status: Optional[TaskStatusEnum] = None
priority: Optional[TaskPriorityEnum] = None
assignee_id: Optional[int] = None
tags: Optional[str] = None
depends_on_id: Optional[int] = None
due_date: Optional[datetime] = None
milestone_id: Optional[int] = None
estimated_effort: Optional[int] = None
# Resolution specific
resolution_summary: Optional[str] = None
positions: Optional[str] = None
pending_matters: Optional[str] = None
class IssueResponse(IssueBase):
class TaskResponse(TaskBase):
id: int
status: IssueStatusEnum
status: TaskStatusEnum
task_code: Optional[str] = None
project_id: int
milestone_id: int
reporter_id: int
assignee_id: Optional[int]
resolution_summary: Optional[str]
positions: Optional[str]
pending_matters: Optional[str]
due_date: Optional[datetime] = None
milestone_id: Optional[int] = None
assignee_id: Optional[int] = None
resolution_summary: Optional[str] = None
positions: Optional[str] = None
pending_matters: Optional[str] = None
created_at: datetime
updated_at: Optional[datetime]
updated_at: Optional[datetime] = None
class Config:
from_attributes = True
@@ -97,7 +92,7 @@ class CommentBase(BaseModel):
class CommentCreate(CommentBase):
issue_id: int
task_id: int
author_id: int
@@ -107,10 +102,10 @@ class CommentUpdate(BaseModel):
class CommentResponse(CommentBase):
id: int
issue_id: int
task_id: int
author_id: int
created_at: datetime
updated_at: Optional[datetime]
updated_at: Optional[datetime] = None
class Config:
from_attributes = True
@@ -147,15 +142,6 @@ class ProjectResponse(BaseModel):
owner_id: int
created_at: datetime
class _ProjectResponse_Inactive(ProjectBase):
id: int
owner_id: int
project_code: str | None = None
created_at: datetime
class Config:
from_attributes = True
# User schemas
class UserBase(BaseModel):

View File

@@ -6,7 +6,7 @@ from datetime import datetime
class WebhookCreate(BaseModel):
url: str
secret: Optional[str] = None
events: str # comma-separated: "issue.created,issue.updated"
events: str # comma-separated: "task.created,task.updated"
project_id: Optional[int] = None
is_active: bool = True