From fb5658739b5bb8c1c62a3b6464e258e203556ec3 Mon Sep 17 00:00:00 2001 From: zhi Date: Sat, 21 Mar 2026 20:28:35 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20code-first=20migration=20=E2=80=94=20re?= =?UTF-8?q?place=20raw=20IDs=20with=20codes=20and=20usernames?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TaskDetailPage: show task_code instead of raw #id in header - TaskDetailPage: show author_username in comment metadata - ProjectDetailPage: show member username instead of User #id - ProposeDetailPage: show created_by_username instead of User #id - TasksPage: fix status filter options to match actual statuses (pending/open/undergoing/completed/closed) - TasksPage: fix status color map for correct status values - Types: add username/full_name to ProjectMember, author_username to Comment, created_by_username to Propose - Supports TODO §3.1 (code-first UI migration) --- src/pages/ProjectDetailPage.tsx | 2 +- src/pages/ProposeDetailPage.tsx | 2 +- src/pages/TaskDetailPage.tsx | 4 ++-- src/pages/TasksPage.tsx | 10 +++++----- src/types/index.ts | 4 ++++ 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/pages/ProjectDetailPage.tsx b/src/pages/ProjectDetailPage.tsx index 9db0a4b..6ba7028 100644 --- a/src/pages/ProjectDetailPage.tsx +++ b/src/pages/ProjectDetailPage.tsx @@ -92,7 +92,7 @@ export default function ProjectDetailPage() {
{members.map((m) => ( - {`User #${m.user_id} (${m.role})`} + {`${m.username || m.full_name || `User #${m.user_id}`} (${m.role})`} {canEditProject && (
-

#{task.id} {task.title}

+

{task.task_code ? `[${task.task_code}]` : `#${task.id}`} {task.title}

{task.status} {task.priority} @@ -261,7 +261,7 @@ export default function TaskDetailPage() {

Comments ({comments.length})

{comments.map((c) => (
-
User #{c.author_id} · {dayjs(c.created_at).format('MM-DD HH:mm')}
+
{c.author_username || `User #${c.author_id}`} · {dayjs(c.created_at).format('MM-DD HH:mm')}

{c.content}

))} diff --git a/src/pages/TasksPage.tsx b/src/pages/TasksPage.tsx index 7bbecec..737e04c 100644 --- a/src/pages/TasksPage.tsx +++ b/src/pages/TasksPage.tsx @@ -27,8 +27,8 @@ export default function TasksPage() { useEffect(() => { fetchTasks() }, [page, statusFilter, priorityFilter]) const statusColors: Record = { - open: '#3b82f6', in_progress: '#f59e0b', resolved: '#10b981', - closed: '#6b7280', blocked: '#ef4444', + pending: '#9ca3af', open: '#3b82f6', undergoing: '#f59e0b', + completed: '#10b981', closed: '#6b7280', } return ( @@ -50,11 +50,11 @@ export default function TasksPage() {
diff --git a/src/types/index.ts b/src/types/index.ts index b647963..523a122 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -27,6 +27,8 @@ export interface Project { export interface ProjectMember { id: number user_id: number + username: string | null + full_name: string | null project_id: number role: string } @@ -59,6 +61,7 @@ export interface Comment { content: string task_id: number author_id: number + author_username: string | null created_at: string updated_at: string | null } @@ -132,6 +135,7 @@ export interface Propose { status: 'open' | 'accepted' | 'rejected' project_id: number created_by_id: number | null + created_by_username: string | null feat_task_id: string | null created_at: string updated_at: string | null