From c548c6ce484874d02b8dfb432127b9da5311742e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EB=8F=99=ED=98=84?= <hando1220@ajou.ac.kr> Date: Sat, 29 Mar 2025 15:28:33 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=A1=9C=EA=B7=B8=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EB=A0=88=EC=9D=B4=EB=B8=94=20=EA=B0=9D=EC=B2=B4=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Home.tsx | 18 +++--------------- src/pages/log/List.tsx | 36 ++++++++++++------------------------ src/pages/routing/Edit.tsx | 2 ++ src/types/log.ts | 16 ++++++++++++++-- 4 files changed, 31 insertions(+), 41 deletions(-) diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 8c3af39..ec21bf5 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -8,7 +8,7 @@ import { Skeleton } from '@/components/ui/skeleton'; import { Badge } from '@/components/ui/badge'; import { Card, CardHeader, CardTitle, CardContent, CardFooter, CardDescription } from '@/components/ui/card'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; -import { Log, LogListResponse } from '@/types/log'; +import { Log, LogListResponse, ActionLabels, TypeLabels } from '@/types/log'; interface ProjectInfo { routing: number; @@ -16,18 +16,6 @@ interface ProjectInfo { certificate: number; } -const ACTION = { - CREATE: '생성', - UPDATE: '수정', - DELETE: '삭제', -}; - -const TYPE = { - ROUTING: '라우팅', - CERTIFICATE: '인증서', - FORWARDING: '포워딩', -}; - export default function Home() { const { authFetch, selectedProject } = useAuthStore(); const [logs, setLogs] = useState<Log[] | null>(null); @@ -184,8 +172,8 @@ export default function Home() { <TableCell>{log.createdAt}</TableCell> <TableCell> <div className="flex items-center gap-2"> - <Badge variant="default">{TYPE[log.type]}</Badge> - <Badge variant="secondary">{ACTION[log.action]}</Badge> + <Badge variant="default">{TypeLabels[log.type]}</Badge> + <Badge variant="secondary">{ActionLabels[log.action]}</Badge> <div>{log.description.split('\n').join(' / ')}</div> </div> </TableCell> diff --git a/src/pages/log/List.tsx b/src/pages/log/List.tsx index 152ef04..c504bf5 100644 --- a/src/pages/log/List.tsx +++ b/src/pages/log/List.tsx @@ -28,7 +28,7 @@ import { DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { cn } from '@/lib/utils'; -import { Log, LogListResponse, Action, Type } from '@/types/log'; +import { Log, LogListResponse, Action, Type, ActionLabels, TypeLabels } from '@/types/log'; interface PageInfo { first: boolean; @@ -37,18 +37,6 @@ interface PageInfo { totalPages: number; } -const ACTION = { - CREATE: '생성', - UPDATE: '수정', - DELETE: '삭제', -}; - -const TYPE = { - ROUTING: '라우팅', - CERTIFICATE: '인증서', - FORWARDING: '포워딩', -}; - export default function LogList() { const { authFetch, selectedProject } = useAuthStore(); const [searchParams, setSearchParams] = useSearchParams(); @@ -63,7 +51,7 @@ export default function LogList() { useEffect(() => { setLogs(null); - authFetch(`/api/logs?projectId=${selectedProject?.id}&page=${page - 1}&${searchParams.toString().toLowerCase()}`) + authFetch(`/api/logs?projectId=${selectedProject?.id}&page=${page - 1}&${searchParams.toString()}`) .then((response): Promise<LogListResponse> => { if (!response.ok) throw new Error(`로그 목록 조회 실패: (${response.status})`); @@ -114,9 +102,9 @@ export default function LogList() { }) } > - <DropdownMenuRadioItem value="ROUTING">라우팅</DropdownMenuRadioItem> - <DropdownMenuRadioItem value="FORWARDING">포워딩</DropdownMenuRadioItem> - <DropdownMenuRadioItem value="CERTIFICATE">인증서</DropdownMenuRadioItem> + <DropdownMenuRadioItem value="routing">라우팅</DropdownMenuRadioItem> + <DropdownMenuRadioItem value="forwarding">포워딩</DropdownMenuRadioItem> + <DropdownMenuRadioItem value="certificate">인증서</DropdownMenuRadioItem> </DropdownMenuRadioGroup> <DropdownMenuSeparator /> <DropdownMenuLabel>설정 내용</DropdownMenuLabel> @@ -131,9 +119,9 @@ export default function LogList() { }) } > - <DropdownMenuRadioItem value="CREATE">생성</DropdownMenuRadioItem> - <DropdownMenuRadioItem value="UPDATE">수정</DropdownMenuRadioItem> - <DropdownMenuRadioItem value="DELETE">삭제</DropdownMenuRadioItem> + <DropdownMenuRadioItem value="create">생성</DropdownMenuRadioItem> + <DropdownMenuRadioItem value="update">수정</DropdownMenuRadioItem> + <DropdownMenuRadioItem value="delete">삭제</DropdownMenuRadioItem> </DropdownMenuRadioGroup> </DropdownMenuContent> </DropdownMenu> @@ -163,7 +151,7 @@ export default function LogList() { }) } > - {TYPE[type]} + {TypeLabels[type]} <X className="cursor-pointer" /> </Badge> )} @@ -179,7 +167,7 @@ export default function LogList() { }) } > - {ACTION[action]} + {ActionLabels[action]} <X className="cursor-pointer" /> </Badge> )} @@ -234,8 +222,8 @@ export default function LogList() { <TableCell>{log.createdAt}</TableCell> <TableCell> <div className="flex items-center gap-2"> - <Badge variant="default">{TYPE[log.type]}</Badge> - <Badge variant="secondary">{ACTION[log.action]}</Badge> + <Badge variant="default">{TypeLabels[log.type]}</Badge> + <Badge variant="secondary">{ActionLabels[log.action]}</Badge> <div>{log.description.split('\n').join(' / ')}</div> </div> </TableCell> diff --git a/src/pages/routing/Edit.tsx b/src/pages/routing/Edit.tsx index 0520a9a..e3d201b 100644 --- a/src/pages/routing/Edit.tsx +++ b/src/pages/routing/Edit.tsx @@ -151,6 +151,8 @@ export default function RoutingEdit() { if (code == 'DUPLICATED_DOMAIN_NAME') { form.setError('domain', { type: 'custom' }); toast.error('이미 사용중인 도메인입니다'); + } else if (code == 'NOT_FOUND_FORWARDING') { + toast.error('서버 오류가 발생했습니다. 관리자에게 문의하세요.'); } else { toast.error('라우팅 설정 수정에 실패하였습니다'); } diff --git a/src/types/log.ts b/src/types/log.ts index 1139ea8..8e12345 100644 --- a/src/types/log.ts +++ b/src/types/log.ts @@ -1,5 +1,17 @@ -export type Action = 'CREATE' | 'UPDATE' | 'DELETE'; -export type Type = 'ROUTING' | 'CERTIFICATE' | 'FORWARDING'; +export type Action = 'create' | 'update' | 'delete'; +export type Type = 'routing' | 'certificate' | 'forwarding'; + +export const ActionLabels: Record<Action, string> = { + create: '생성', + update: '수정', + delete: '삭제', +}; + +export const TypeLabels: Record<Type, string> = { + routing: '라우팅', + certificate: '인증서', + forwarding: '포워딩', +}; export interface Log { id: number; -- GitLab