diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 8c3af3936d3f0037e9300d2604e375240adb6f8c..ec21bf5308e5ce5b24086c89cea844a17ee434e4 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 152ef04791f6619e0808e9b9037ff688420276a3..c504bf54c2f14c9b8d8b9eb4a5ddddbe393a55bd 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 0520a9a9f20deeb68fca6425585e4e32293cdf4c..e3d201bda45dd7b8104deef0514b7c3073b3fab9 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 1139ea82e761586514aa6086c52aa26abd9aa7ec..8e123454366819cd9f73b486104cc4fa428d44ae 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;