From 512b61acca67e4c7bdce997f66d216a956441e16 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 17 Oct 2024 22:59:30 +0900 Subject: [PATCH 1/8] =?UTF-8?q?Feat:=20=EC=BD=9C=EB=B0=B1=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20api=20=EB=B0=8F=20=EB=AC=B4=ED=95=9C=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../call-back/list/CallBackListPage.tsx | 56 +++++++++++++++---- .../sinitto/call-back/list/api/hooks/index.ts | 1 + .../list/api/hooks/useGetCallbacks.ts | 33 +++++++++++ .../list/api/types/callbacks.response.ts | 19 +++++++ .../sinitto/call-back/list/api/types/index.ts | 1 + .../components/request-row/RequestRow.tsx | 56 +++++++++++++------ 6 files changed, 138 insertions(+), 28 deletions(-) create mode 100644 src/pages/sinitto/call-back/list/api/hooks/index.ts create mode 100644 src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts create mode 100644 src/pages/sinitto/call-back/list/api/types/callbacks.response.ts create mode 100644 src/pages/sinitto/call-back/list/api/types/index.ts diff --git a/src/pages/sinitto/call-back/list/CallBackListPage.tsx b/src/pages/sinitto/call-back/list/CallBackListPage.tsx index 5f575055..ee11c09f 100644 --- a/src/pages/sinitto/call-back/list/CallBackListPage.tsx +++ b/src/pages/sinitto/call-back/list/CallBackListPage.tsx @@ -1,23 +1,59 @@ +import { useRef, useCallback } from 'react'; import { Outlet } from 'react-router-dom'; +import { useCallbacks } from './api/hooks'; import { RequestRow } from './components'; -import { CALLBACK_MOCK_DATA } from './data'; +import { Spinner } from '@chakra-ui/react'; import styled from '@emotion/styled'; export const CallBackListPage = () => { - // TODO: 콜백 요청 리스트 불러오기 + const { data, isLoading, isError, fetchNextPage, hasNextPage } = + useCallbacks(10); + const observerRef = useRef(null); + + const lastElementRef = useCallback( + (node: HTMLButtonElement | null) => { + if (isLoading) return ; + + if (observerRef.current) observerRef.current.disconnect(); + + observerRef.current = new IntersectionObserver((entries) => { + if (entries[0].isIntersecting && hasNextPage) { + fetchNextPage(); + } + }); + + if (node) observerRef.current.observe(node); + }, + [isLoading, fetchNextPage, hasNextPage] + ); return ( <> - {CALLBACK_MOCK_DATA.map((data) => ( - - ))} + {isLoading && } + {isError &&

데이터를 불러오는데 오류가 발생했습니다

} + {data && + (data.pages.length === 0 ? ( +

콜백 요청이 없습니다.

+ ) : ( + data?.pages.map((page, pageIndex) => + page.content.map((callback, index) => { + const isLastElement = + pageIndex === data.pages.length - 1 && + index === page.content.length - 1; + return ( + + ); + }) + ) + ))}
diff --git a/src/pages/sinitto/call-back/list/api/hooks/index.ts b/src/pages/sinitto/call-back/list/api/hooks/index.ts new file mode 100644 index 00000000..c1f5f5d9 --- /dev/null +++ b/src/pages/sinitto/call-back/list/api/hooks/index.ts @@ -0,0 +1 @@ +export { useCallbacks } from './useGetCallbacks.ts'; diff --git a/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts b/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts new file mode 100644 index 00000000..ac74ae62 --- /dev/null +++ b/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts @@ -0,0 +1,33 @@ +import type { CallbacksResponse } from '../types/callbacks.response'; +import { fetchInstance } from '@/shared/api/instance'; +import { BASE_URI } from '@/shared/constants'; +import { useInfiniteQuery } from '@tanstack/react-query'; + +const getCallbacksPath = () => `${BASE_URI}/api/callbacks`; + +const getCallbacks = async (page: number, size: number) => { + const response = await fetchInstance.get( + getCallbacksPath(), + { + params: { + page, + size, + }, + } + ); + return response.data; +}; + +export const useCallbacks = (size: number) => { + return useInfiniteQuery({ + queryKey: ['callbacks', size], + queryFn: ({ pageParam = 0 }) => getCallbacks(pageParam, size), + getNextPageParam: (lastPage) => { + if (!lastPage.last) { + return lastPage.number + 1; + } + return undefined; + }, + initialPageParam: 0, + }); +}; diff --git a/src/pages/sinitto/call-back/list/api/types/callbacks.response.ts b/src/pages/sinitto/call-back/list/api/types/callbacks.response.ts new file mode 100644 index 00000000..580ad6ed --- /dev/null +++ b/src/pages/sinitto/call-back/list/api/types/callbacks.response.ts @@ -0,0 +1,19 @@ +export type CallbacksResponse = { + totalElements: number; + totalPages: number; + first: boolean; + last: boolean; + size: number; + content: Array; + number: number; + numberOfElements: number; + empty: boolean; +}; + +export type Callback = { + callbackId: number; + seniorName: string; + postTime: string; + status: string; + seniorId: number; +}; diff --git a/src/pages/sinitto/call-back/list/api/types/index.ts b/src/pages/sinitto/call-back/list/api/types/index.ts new file mode 100644 index 00000000..77c2c660 --- /dev/null +++ b/src/pages/sinitto/call-back/list/api/types/index.ts @@ -0,0 +1 @@ +export type { CallbacksResponse } from './callbacks.response'; diff --git a/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx b/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx index f400a4f7..afe6cd4e 100644 --- a/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx +++ b/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx @@ -1,3 +1,4 @@ +import { forwardRef } from 'react'; import { useNavigate } from 'react-router-dom'; import ArrowImg from '../../assets/arrow.png'; @@ -5,27 +6,46 @@ import styled from '@emotion/styled'; type Props = { name: string; - time: number; + time: string; id: string; }; -export const RequestRow = ({ name, time, id }: Props) => { - const navigate = useNavigate(); - - const handleClick = () => { - navigate(`/call-back/${id}`); - }; - - return ( - - - {name}님의 요청 - - - - - ); -}; +export const RequestRow = forwardRef( + ({ name, time, id }, ref) => { + const navigate = useNavigate(); + + const handleClick = () => { + navigate(`/call-back/${id}`); + }; + + const getTimeAgo = (postTime: string) => { + const postDate = new Date(postTime); + const now = new Date(); + const differenceInMinutes = Math.floor( + (now.getTime() - postDate.getTime()) / 60000 + ); + + if (differenceInMinutes < 60) { + return differenceInMinutes > 0 + ? differenceInMinutes + '분 전' + : '방금 전'; + } else { + const differenceInHours = Math.floor(differenceInMinutes / 60); + return differenceInHours + '시간 전'; + } + }; + + return ( + + + {name}님의 요청 + + + + + ); + } +); const Wrapper = styled.button` width: 100%; From c37bbd0c4d9d524166de6f599502eeb167908687 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 17 Oct 2024 23:43:07 +0900 Subject: [PATCH 2/8] =?UTF-8?q?Feat:=20=EC=BD=9C=EB=B0=B1=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=20api=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../call-back/detail/CallBackDetailPage.tsx | 63 +++++++++++++------ .../call-back/detail/api/hooks/index.ts | 1 + .../detail/api/hooks/useGetCallback.ts | 22 +++++++ .../detail/api/types/callback.response.ts | 7 +++ .../call-back/detail/api/types/index.ts | 1 + .../guide-line-list/guide-line-button.tsx | 8 ++- .../data/guide-line/guid-line-categories.ts | 10 +-- .../call-back/list/CallBackListPage.tsx | 4 +- .../call-back/list/api/callback-list.api.ts | 25 ++++++++ .../sinitto/call-back/list/api/hooks/index.ts | 2 +- .../list/api/hooks/useGetCallbacks.ts | 2 +- .../list/api/types/callbacks.response.ts | 2 +- 12 files changed, 117 insertions(+), 30 deletions(-) create mode 100644 src/pages/sinitto/call-back/detail/api/hooks/index.ts create mode 100644 src/pages/sinitto/call-back/detail/api/hooks/useGetCallback.ts create mode 100644 src/pages/sinitto/call-back/detail/api/types/callback.response.ts create mode 100644 src/pages/sinitto/call-back/detail/api/types/index.ts create mode 100644 src/pages/sinitto/call-back/list/api/callback-list.api.ts diff --git a/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx b/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx index 9492eebc..a053f8f3 100644 --- a/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx +++ b/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx @@ -1,11 +1,15 @@ import { useState } from 'react'; -import { useParams, Outlet } from 'react-router-dom'; +import { useParams, Outlet, useNavigate } from 'react-router-dom'; +import { AxiosError } from 'axios'; + +import { useGetCallback } from './api/hooks'; import { GuideLineList } from './components/guide-line-list'; import { PostAcceptMenu } from './components/menu/post-accept'; import { PreAcceptMenu } from './components/menu/pre-accept'; import { Notice } from '@/shared/components'; import { Divider } from '@chakra-ui/react'; +import { Spinner } from '@chakra-ui/react'; import styled from '@emotion/styled'; export type CallBackDetailParams = { @@ -15,8 +19,8 @@ export type CallBackDetailParams = { export const CallBackDetailPage = () => { const { callBackId = '' } = useParams(); const [accept, setAccept] = useState(false); - - console.log(callBackId); + const { data, isLoading, isError, error } = useGetCallback(callBackId); + const navigate = useNavigate(); const handleRequestAccept = () => { // 도움 수락 @@ -31,24 +35,47 @@ export const CallBackDetailPage = () => { // 도움 포기 }; + if (isError) { + let errorMessage = ''; + if (error instanceof AxiosError) { + switch (error.response?.status) { + case 409: + errorMessage = '이미 진행 중인 콜백 요청이 있습니다.'; + break; + default: + errorMessage = '콜백 요청을 불러오는 중 오류가 발생했습니다.'; + } + } else { + errorMessage = '콜백 요청을 불러오는 중 오류가 발생했습니다.'; + } + + alert(errorMessage); + navigate('/call-back'); + } + return ( <> - - - - {accept ? ( - - ) : ( - + {isLoading && } + {data && ( + <> + + + + {accept ? ( + + ) : ( + + )} + )} diff --git a/src/pages/sinitto/call-back/detail/api/hooks/index.ts b/src/pages/sinitto/call-back/detail/api/hooks/index.ts new file mode 100644 index 00000000..976d77a4 --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/hooks/index.ts @@ -0,0 +1 @@ +export { useGetCallback } from './useGetCallback'; diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useGetCallback.ts b/src/pages/sinitto/call-back/detail/api/hooks/useGetCallback.ts new file mode 100644 index 00000000..25f21ecc --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/hooks/useGetCallback.ts @@ -0,0 +1,22 @@ +import type { CallbackResponse } from '../types'; +import { fetchInstance } from '@/shared/api/instance'; +import { BASE_URI } from '@/shared/constants'; +import { useQuery } from '@tanstack/react-query'; + +const getCallbackPath = (callbackId: string) => + `${BASE_URI}/api/callbacks/${callbackId}`; + +const getCallback = async (callbackId: string) => { + const response = await fetchInstance.get( + getCallbackPath(callbackId) + ); + return response.data; +}; + +export const useGetCallback = (callbackId: string) => { + return useQuery({ + queryKey: ['callback', callbackId], + queryFn: () => getCallback(callbackId), + enabled: !!callbackId, + }); +}; diff --git a/src/pages/sinitto/call-back/detail/api/types/callback.response.ts b/src/pages/sinitto/call-back/detail/api/types/callback.response.ts new file mode 100644 index 00000000..715b3568 --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/types/callback.response.ts @@ -0,0 +1,7 @@ +export type CallbackResponse = { + callbackId: number; + seniorName: string; + postTime: string; + status: string; + seniorId: number; +}; diff --git a/src/pages/sinitto/call-back/detail/api/types/index.ts b/src/pages/sinitto/call-back/detail/api/types/index.ts new file mode 100644 index 00000000..91cf9d0c --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/types/index.ts @@ -0,0 +1 @@ +export type { CallbackResponse } from './callback.response'; diff --git a/src/pages/sinitto/call-back/detail/components/guide-line-list/guide-line-button.tsx b/src/pages/sinitto/call-back/detail/components/guide-line-list/guide-line-button.tsx index a556540f..64298928 100644 --- a/src/pages/sinitto/call-back/detail/components/guide-line-list/guide-line-button.tsx +++ b/src/pages/sinitto/call-back/detail/components/guide-line-list/guide-line-button.tsx @@ -6,7 +6,7 @@ import styled from '@emotion/styled'; type Props = { title: string; - id: string; + id: string | null; backgroundColor: string; }; @@ -15,7 +15,11 @@ export const GuideLineButton = ({ title, backgroundColor, id }: Props) => { const location = useLocation(); const handleClick = () => { - navigate(`${location.pathname}/${id}`); + if (id == null) { + alert('개발 예정입니다.'); + } else { + navigate(`${location.pathname}/${id}`); + } }; return ( diff --git a/src/pages/sinitto/call-back/detail/data/guide-line/guid-line-categories.ts b/src/pages/sinitto/call-back/detail/data/guide-line/guid-line-categories.ts index 9a1bb3e8..2222a1d4 100644 --- a/src/pages/sinitto/call-back/detail/data/guide-line/guid-line-categories.ts +++ b/src/pages/sinitto/call-back/detail/data/guide-line/guid-line-categories.ts @@ -1,22 +1,22 @@ export const GUIDE_LINE_CATEGORIES = [ { title: '택시 호출하기', - id: 'taxi', + id: 'TAXI', backgroundColor: '#81b6ff', }, { - title: '드라마 방영시간 알려주기', - id: 'drama', + title: '음식 배달 주문하기', + id: 'DELIVERY', backgroundColor: '#b28bff', }, { title: '서류 제출 도와주기', - id: 'document', + id: null, backgroundColor: '#ffa7b5', }, { title: '대중교통 이동 도와주기', - id: 'document', + id: null, backgroundColor: '#ff4d68', }, ]; diff --git a/src/pages/sinitto/call-back/list/CallBackListPage.tsx b/src/pages/sinitto/call-back/list/CallBackListPage.tsx index ee11c09f..d4977638 100644 --- a/src/pages/sinitto/call-back/list/CallBackListPage.tsx +++ b/src/pages/sinitto/call-back/list/CallBackListPage.tsx @@ -1,14 +1,14 @@ import { useRef, useCallback } from 'react'; import { Outlet } from 'react-router-dom'; -import { useCallbacks } from './api/hooks'; +import { useGetCallbacks } from './api/hooks'; import { RequestRow } from './components'; import { Spinner } from '@chakra-ui/react'; import styled from '@emotion/styled'; export const CallBackListPage = () => { const { data, isLoading, isError, fetchNextPage, hasNextPage } = - useCallbacks(10); + useGetCallbacks(10); const observerRef = useRef(null); const lastElementRef = useCallback( diff --git a/src/pages/sinitto/call-back/list/api/callback-list.api.ts b/src/pages/sinitto/call-back/list/api/callback-list.api.ts new file mode 100644 index 00000000..c904b9ac --- /dev/null +++ b/src/pages/sinitto/call-back/list/api/callback-list.api.ts @@ -0,0 +1,25 @@ +import { CallbacksResponse } from './types'; +import { fetchInstance } from '@/shared/api/instance'; + +const getCallbackListPath = '/api/callbacks'; + +export const CallbackListQueryKey = (page: number, size: number) => [ + getCallbackListPath, + page, + size, +]; + +export const getCallbackList = async ( + page: number, + size: number +): Promise => { + const response = await fetchInstance.get(getCallbackListPath, { + params: { + pageable: { + page, + size, + }, + }, + }); + return response.data; +}; diff --git a/src/pages/sinitto/call-back/list/api/hooks/index.ts b/src/pages/sinitto/call-back/list/api/hooks/index.ts index c1f5f5d9..06d07882 100644 --- a/src/pages/sinitto/call-back/list/api/hooks/index.ts +++ b/src/pages/sinitto/call-back/list/api/hooks/index.ts @@ -1 +1 @@ -export { useCallbacks } from './useGetCallbacks.ts'; +export { useGetCallbacks } from './useGetCallbacks.ts'; diff --git a/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts b/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts index ac74ae62..c0447e12 100644 --- a/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts +++ b/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts @@ -18,7 +18,7 @@ const getCallbacks = async (page: number, size: number) => { return response.data; }; -export const useCallbacks = (size: number) => { +export const useGetCallbacks = (size: number) => { return useInfiniteQuery({ queryKey: ['callbacks', size], queryFn: ({ pageParam = 0 }) => getCallbacks(pageParam, size), diff --git a/src/pages/sinitto/call-back/list/api/types/callbacks.response.ts b/src/pages/sinitto/call-back/list/api/types/callbacks.response.ts index 580ad6ed..6cde33b6 100644 --- a/src/pages/sinitto/call-back/list/api/types/callbacks.response.ts +++ b/src/pages/sinitto/call-back/list/api/types/callbacks.response.ts @@ -10,7 +10,7 @@ export type CallbacksResponse = { empty: boolean; }; -export type Callback = { +type Callback = { callbackId: number; seniorName: string; postTime: string; From 7c9ccacda2deb92ea1316dbd32854b392d323316 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Oct 2024 01:58:25 +0900 Subject: [PATCH 3/8] =?UTF-8?q?Feat:=20=EC=8B=9C=EB=8B=88=EB=98=90=20?= =?UTF-8?q?=EA=B0=80=EC=9D=B4=EB=93=9C=EB=9D=BC=EC=9D=B8=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../call-back/detail/CallBackDetailPage.tsx | 28 ++------- .../guide-line-list/GuideLineList.tsx | 2 +- .../list/api/types/callbacks.response.ts | 12 +--- .../guide-line/SinittoGuideLinePage.tsx | 59 ++++++++++++++++--- .../sinitto/guide-line/api/hooks/index.ts | 1 + .../guide-line/api/hooks/useGetGuideline.ts | 22 +++++++ .../api/types/guideline.response.ts | 5 ++ .../sinitto/guide-line/api/types/index.ts | 1 + .../guide-line/data/categories/categories.ts | 14 +---- .../detail => shared}/api/hooks/index.ts | 0 .../api/hooks/useGetCallback.ts | 2 +- .../api => shared}/types/callback.response.ts | 0 .../detail/api => shared}/types/index.ts | 0 src/shared/utils/handle-callback-error.ts | 29 +++++++++ src/shared/utils/index.ts | 1 + 15 files changed, 123 insertions(+), 53 deletions(-) create mode 100644 src/pages/sinitto/guide-line/api/hooks/index.ts create mode 100644 src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts create mode 100644 src/pages/sinitto/guide-line/api/types/guideline.response.ts create mode 100644 src/pages/sinitto/guide-line/api/types/index.ts rename src/{pages/sinitto/call-back/detail => shared}/api/hooks/index.ts (100%) rename src/{pages/sinitto/call-back/detail => shared}/api/hooks/useGetCallback.ts (92%) rename src/{pages/sinitto/call-back/detail/api => shared}/types/callback.response.ts (100%) rename src/{pages/sinitto/call-back/detail/api => shared}/types/index.ts (100%) create mode 100644 src/shared/utils/handle-callback-error.ts create mode 100644 src/shared/utils/index.ts diff --git a/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx b/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx index a053f8f3..9f44f125 100644 --- a/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx +++ b/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx @@ -1,13 +1,12 @@ import { useState } from 'react'; -import { useParams, Outlet, useNavigate } from 'react-router-dom'; +import { useParams, Outlet } from 'react-router-dom'; -import { AxiosError } from 'axios'; - -import { useGetCallback } from './api/hooks'; import { GuideLineList } from './components/guide-line-list'; import { PostAcceptMenu } from './components/menu/post-accept'; import { PreAcceptMenu } from './components/menu/pre-accept'; +import { useGetCallback } from '@/shared/api/hooks'; import { Notice } from '@/shared/components'; +import { handleCallbackError } from '@/shared/utils'; import { Divider } from '@chakra-ui/react'; import { Spinner } from '@chakra-ui/react'; import styled from '@emotion/styled'; @@ -20,7 +19,8 @@ export const CallBackDetailPage = () => { const { callBackId = '' } = useParams(); const [accept, setAccept] = useState(false); const { data, isLoading, isError, error } = useGetCallback(callBackId); - const navigate = useNavigate(); + + handleCallbackError(isError, error); const handleRequestAccept = () => { // 도움 수락 @@ -35,24 +35,6 @@ export const CallBackDetailPage = () => { // 도움 포기 }; - if (isError) { - let errorMessage = ''; - if (error instanceof AxiosError) { - switch (error.response?.status) { - case 409: - errorMessage = '이미 진행 중인 콜백 요청이 있습니다.'; - break; - default: - errorMessage = '콜백 요청을 불러오는 중 오류가 발생했습니다.'; - } - } else { - errorMessage = '콜백 요청을 불러오는 중 오류가 발생했습니다.'; - } - - alert(errorMessage); - navigate('/call-back'); - } - return ( <> diff --git a/src/pages/sinitto/call-back/detail/components/guide-line-list/GuideLineList.tsx b/src/pages/sinitto/call-back/detail/components/guide-line-list/GuideLineList.tsx index 3b9bfea0..e8c31094 100644 --- a/src/pages/sinitto/call-back/detail/components/guide-line-list/GuideLineList.tsx +++ b/src/pages/sinitto/call-back/detail/components/guide-line-list/GuideLineList.tsx @@ -7,7 +7,7 @@ export const GuideLineList = () => { {GUIDE_LINE_CATEGORIES.map((data) => ( ; + content: Array; number: number; numberOfElements: number; empty: boolean; }; - -type Callback = { - callbackId: number; - seniorName: string; - postTime: string; - status: string; - seniorId: number; -}; diff --git a/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx b/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx index 13603aad..99e1a730 100644 --- a/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx +++ b/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx @@ -1,8 +1,13 @@ import { useParams } from 'react-router-dom'; -import { CATEGORIES, GUIDE_LINE_MOCK_DATA } from './data'; -import { Category, MockData } from './types'; +import { useGetGuideline } from './api/hooks'; +import { GuidelineResponse } from './api/types'; +import { CATEGORIES } from './data'; +import { Category } from './types'; +import { useGetCallback } from '@/shared/api/hooks'; +import { handleCallbackError } from '@/shared/utils'; import { Container } from '@chakra-ui/react'; +import { Spinner } from '@chakra-ui/react'; import styled from '@emotion/styled'; type GuideLineParams = { @@ -12,17 +17,52 @@ type GuideLineParams = { export const SinittoGuideLinePage = () => { const { callBackId = '', guideLineId = '' } = useParams(); - console.log(callBackId, guideLineId); - const guideLineInfo = CATEGORIES.find((item: Category) => item.id === guideLineId)?.name || null; + const { + data: callBack, + isLoading: isCallBackLoading, + isError: isCallBackError, + error: callBackError, + } = useGetCallback(callBackId); + const seniorId = + !isCallBackLoading && callBack ? callBack.seniorId : undefined; + + const { + data: guideLine, + isLoading: isGuideLineLoading, + isError: isGuideLineError, + } = useGetGuideline(Number(seniorId), guideLineId); + + handleCallbackError(isCallBackError, callBackError); + return ( - {guideLineInfo} - {GUIDE_LINE_MOCK_DATA.map((data: MockData, index: number) => ( - - ))} + {isCallBackLoading || isGuideLineLoading ? ( + + ) : ( + <> + + <EmphasisSpan>{guideLineInfo}</EmphasisSpan> 가이드라인 + + {isGuideLineError && ( +

데이터를 불러오는 중에 오류가 발생했습니다.

+ )} + {guideLine && + (guideLine.length == 0 ? ( +

등록된 가이드라인이 없습니다.

+ ) : ( + guideLine.map((data: GuidelineResponse, index: number) => ( + + )) + ))} + + )}
); }; @@ -41,5 +81,8 @@ const Title = styled.h2` margin-bottom: 20px; font-size: var(--font-size-xxl); font-weight: 700; +`; + +const EmphasisSpan = styled.span` color: #c69090; `; diff --git a/src/pages/sinitto/guide-line/api/hooks/index.ts b/src/pages/sinitto/guide-line/api/hooks/index.ts new file mode 100644 index 00000000..ad81d6a8 --- /dev/null +++ b/src/pages/sinitto/guide-line/api/hooks/index.ts @@ -0,0 +1 @@ +export { useGetGuideline } from './useGetGuideline'; diff --git a/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts b/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts new file mode 100644 index 00000000..6e55fa1b --- /dev/null +++ b/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts @@ -0,0 +1,22 @@ +import type { GuidelineResponse } from '../types'; +import { fetchInstance } from '@/shared/api/instance'; +import { BASE_URI } from '@/shared/constants'; +import { useQuery } from '@tanstack/react-query'; + +const getGuidelinesPath = (seniorId: number, type: string) => + `${BASE_URI}/api/guardguidelines/${seniorId}/${type}`; + +const getGuidelines = async (seniorId: number, type: string) => { + const response = await fetchInstance.get( + getGuidelinesPath(seniorId, type) + ); + return response.data; +}; + +export const useGetGuideline = (seniorId: number, type: string) => { + return useQuery({ + queryKey: ['Guideline', seniorId, type], + queryFn: () => getGuidelines(seniorId, type), + enabled: !!seniorId && !!type, + }); +}; diff --git a/src/pages/sinitto/guide-line/api/types/guideline.response.ts b/src/pages/sinitto/guide-line/api/types/guideline.response.ts new file mode 100644 index 00000000..d1c38418 --- /dev/null +++ b/src/pages/sinitto/guide-line/api/types/guideline.response.ts @@ -0,0 +1,5 @@ +export type GuidelineResponse = { + type: string; + title: string; + content: string; +}; diff --git a/src/pages/sinitto/guide-line/api/types/index.ts b/src/pages/sinitto/guide-line/api/types/index.ts new file mode 100644 index 00000000..766d25ea --- /dev/null +++ b/src/pages/sinitto/guide-line/api/types/index.ts @@ -0,0 +1 @@ +export type { GuidelineResponse } from './guideline.response'; diff --git a/src/pages/sinitto/guide-line/data/categories/categories.ts b/src/pages/sinitto/guide-line/data/categories/categories.ts index 9c7780a3..beddb30a 100644 --- a/src/pages/sinitto/guide-line/data/categories/categories.ts +++ b/src/pages/sinitto/guide-line/data/categories/categories.ts @@ -1,18 +1,10 @@ export const CATEGORIES = [ { name: '택시', - id: 'taxi', + id: 'TAXI', }, { - name: '드라마 방영시간', - id: 'drama', - }, - { - name: '서류 제출', - id: 'document', - }, - { - name: '대중교통 이동', - id: 'document', + name: '음식 배달 주문', + id: 'DELIVERY', }, ]; diff --git a/src/pages/sinitto/call-back/detail/api/hooks/index.ts b/src/shared/api/hooks/index.ts similarity index 100% rename from src/pages/sinitto/call-back/detail/api/hooks/index.ts rename to src/shared/api/hooks/index.ts diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useGetCallback.ts b/src/shared/api/hooks/useGetCallback.ts similarity index 92% rename from src/pages/sinitto/call-back/detail/api/hooks/useGetCallback.ts rename to src/shared/api/hooks/useGetCallback.ts index 25f21ecc..3bf2a7fc 100644 --- a/src/pages/sinitto/call-back/detail/api/hooks/useGetCallback.ts +++ b/src/shared/api/hooks/useGetCallback.ts @@ -1,4 +1,4 @@ -import type { CallbackResponse } from '../types'; +import type { CallbackResponse } from '../../types'; import { fetchInstance } from '@/shared/api/instance'; import { BASE_URI } from '@/shared/constants'; import { useQuery } from '@tanstack/react-query'; diff --git a/src/pages/sinitto/call-back/detail/api/types/callback.response.ts b/src/shared/types/callback.response.ts similarity index 100% rename from src/pages/sinitto/call-back/detail/api/types/callback.response.ts rename to src/shared/types/callback.response.ts diff --git a/src/pages/sinitto/call-back/detail/api/types/index.ts b/src/shared/types/index.ts similarity index 100% rename from src/pages/sinitto/call-back/detail/api/types/index.ts rename to src/shared/types/index.ts diff --git a/src/shared/utils/handle-callback-error.ts b/src/shared/utils/handle-callback-error.ts new file mode 100644 index 00000000..3f975e12 --- /dev/null +++ b/src/shared/utils/handle-callback-error.ts @@ -0,0 +1,29 @@ +import { useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { AxiosError } from 'axios'; + +export const handleCallbackError = (isError: boolean, error: unknown) => { + const navigate = useNavigate(); + + useEffect(() => { + if (isError) { + let errorMessage = ''; + + if (error instanceof AxiosError) { + switch (error.response?.status) { + case 409: + errorMessage = '이미 진행 중인 콜백 요청이 있습니다.'; + break; + default: + errorMessage = '데이터를 불러오는 중 오류가 발생했습니다.'; + } + } else { + errorMessage = '데이터를 불러오는 중 오류가 발생했습니다.'; + } + + alert(errorMessage); + navigate('/call-back'); + } + }, [isError, error, navigate]); +}; diff --git a/src/shared/utils/index.ts b/src/shared/utils/index.ts new file mode 100644 index 00000000..d2cfe48f --- /dev/null +++ b/src/shared/utils/index.ts @@ -0,0 +1 @@ +export { handleCallbackError } from './handle-callback-error'; From 9b7262e60820a8e44b801766813737886e35b6b7 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Oct 2024 04:26:03 +0900 Subject: [PATCH 4/8] =?UTF-8?q?Feat:=20=EC=8B=9C=EB=8B=88=EB=98=90=20?= =?UTF-8?q?=EC=BD=9C=EB=B0=B1=20=EC=88=98=EB=9D=BD/=EC=B7=A8=EC=86=8C/?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../call-back/detail/CallBackDetailPage.tsx | 76 +++++++++---------- .../call-back/detail/api/hooks/index.ts | 4 + .../detail/api/hooks/useAcceptCallback.ts | 23 ++++++ .../detail/api/hooks/useCancelCallback.ts | 23 ++++++ .../detail/api/hooks/useCompleteCallback.ts | 23 ++++++ .../detail/api/hooks/useGetAccepted.ts | 19 +++++ .../detail/components/menu/CallbackMenu.tsx | 60 +++++++++++++++ .../call-back/detail/components/menu/index.ts | 3 +- 8 files changed, 190 insertions(+), 41 deletions(-) create mode 100644 src/pages/sinitto/call-back/detail/api/hooks/index.ts create mode 100644 src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts create mode 100644 src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts create mode 100644 src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts create mode 100644 src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts create mode 100644 src/pages/sinitto/call-back/detail/components/menu/CallbackMenu.tsx diff --git a/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx b/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx index 9f44f125..b8ce12a2 100644 --- a/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx +++ b/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx @@ -1,14 +1,12 @@ -import { useState } from 'react'; import { useParams, Outlet } from 'react-router-dom'; +import { useGetAccepted } from './api/hooks'; +import { CallbackMenu } from './components'; import { GuideLineList } from './components/guide-line-list'; -import { PostAcceptMenu } from './components/menu/post-accept'; -import { PreAcceptMenu } from './components/menu/pre-accept'; import { useGetCallback } from '@/shared/api/hooks'; import { Notice } from '@/shared/components'; import { handleCallbackError } from '@/shared/utils'; -import { Divider } from '@chakra-ui/react'; -import { Spinner } from '@chakra-ui/react'; +import { Divider, Spinner } from '@chakra-ui/react'; import styled from '@emotion/styled'; export type CallBackDetailParams = { @@ -17,47 +15,47 @@ export type CallBackDetailParams = { export const CallBackDetailPage = () => { const { callBackId = '' } = useParams(); - const [accept, setAccept] = useState(false); - const { data, isLoading, isError, error } = useGetCallback(callBackId); - handleCallbackError(isError, error); + const { + data: callbackData, + isLoading: isCallBackLoading, + isError: isCallBackError, + error: callBackError, + } = useGetCallback(callBackId); + handleCallbackError(isCallBackError, callBackError); - const handleRequestAccept = () => { - // 도움 수락 - setAccept(true); - }; - - const handleComplete = () => { - // 도움 완료 - }; - - const handleCancle = () => { - // 도움 포기 - }; + const { + data: currentReq, + isLoading: iscurrentReqLoading, + isError: iscurrentReqError, + } = useGetAccepted(); + const accept = + iscurrentReqError || !currentReq + ? false + : currentReq.callbackId == Number(callBackId); return ( <> - {isLoading && } - {data && ( - <> - - - - {accept ? ( - + ) : ( + callbackData && ( + <> + - ) : ( - - )} - + + + {iscurrentReqLoading ? ( + + ) : ( + + )} + + ) )} diff --git a/src/pages/sinitto/call-back/detail/api/hooks/index.ts b/src/pages/sinitto/call-back/detail/api/hooks/index.ts new file mode 100644 index 00000000..a6ce3d05 --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/hooks/index.ts @@ -0,0 +1,4 @@ +export { useAcceptCallback } from './useAcceptCallback'; +export { useCancelCallback } from './useCancelCallback'; +export { useCompleteCallback } from './useCompleteCallback'; +export { useGetAccepted } from './useGetAccepted'; diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts b/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts new file mode 100644 index 00000000..05b8458a --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts @@ -0,0 +1,23 @@ +import { fetchInstance } from '@/shared/api/instance'; +import { BASE_URI } from '@/shared/constants'; +import { useMutation } from '@tanstack/react-query'; + +const getacceptCallbackPath = (callbackId: number) => + `${BASE_URI}/api/callbacks/accept/${callbackId}`; + +const acceptCallback = async (callbackId: number) => { + const response = await fetchInstance.put(getacceptCallbackPath(callbackId)); + return response.data; +}; + +export const useAcceptCallback = () => { + return useMutation({ + mutationFn: acceptCallback, + onSuccess: () => { + alert('콜백 요청이 수락되었습니다.'); + }, + onError: (error) => { + alert(`콜백 요청 수락 신청 중 오류가 발생했습니다: ${error.message}`); + }, + }); +}; diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts b/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts new file mode 100644 index 00000000..8570118a --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts @@ -0,0 +1,23 @@ +import { fetchInstance } from '@/shared/api/instance'; +import { BASE_URI } from '@/shared/constants'; +import { useMutation } from '@tanstack/react-query'; + +const getCancelCallbackPath = (callbackId: number) => + `${BASE_URI}/api/callbacks/cancel/${callbackId}`; + +const CancelCallback = async (callbackId: number) => { + const response = await fetchInstance.put(getCancelCallbackPath(callbackId)); + return response.data; +}; + +export const useCancelCallback = () => { + return useMutation({ + mutationFn: CancelCallback, + onSuccess: () => { + alert('진행중인 콜백 서비스가 취소되었습니다.'); + }, + onError: (error) => { + alert(`콜백 서비스 취소 중 오류가 발생했습니다: ${error.message}`); + }, + }); +}; diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts b/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts new file mode 100644 index 00000000..36ddf333 --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts @@ -0,0 +1,23 @@ +import { fetchInstance } from '@/shared/api/instance'; +import { BASE_URI } from '@/shared/constants'; +import { useMutation } from '@tanstack/react-query'; + +const getCompleteCallbackPath = (callbackId: number) => + `${BASE_URI}/api/callbacks/complete/${callbackId}`; + +const CompleteCallback = async (callbackId: number) => { + const response = await fetchInstance.put(getCompleteCallbackPath(callbackId)); + return response.data; +}; + +export const useCompleteCallback = () => { + return useMutation({ + mutationFn: CompleteCallback, + onSuccess: () => { + alert('진행중인 콜백 서비스가 완료되었습니다.'); + }, + onError: (error) => { + alert(`콜백 서비스 완료 중 오류가 발생했습니다: ${error.message}`); + }, + }); +}; diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts b/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts new file mode 100644 index 00000000..f17ef35e --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts @@ -0,0 +1,19 @@ +import { fetchInstance } from '@/shared/api/instance'; +import { BASE_URI } from '@/shared/constants'; +import type { CallbackResponse } from '@/shared/types'; +import { useQuery } from '@tanstack/react-query'; + +const getAcceptedPath = () => `${BASE_URI}/api/callbacks/sinitto/accepted`; + +const getAccepted = async () => { + const response = await fetchInstance.get(getAcceptedPath()); + return response.data; +}; + +export const useGetAccepted = () => { + return useQuery({ + queryKey: ['acceptedCallback'], + queryFn: getAccepted, + staleTime: 0, + }); +}; diff --git a/src/pages/sinitto/call-back/detail/components/menu/CallbackMenu.tsx b/src/pages/sinitto/call-back/detail/components/menu/CallbackMenu.tsx new file mode 100644 index 00000000..6d91951d --- /dev/null +++ b/src/pages/sinitto/call-back/detail/components/menu/CallbackMenu.tsx @@ -0,0 +1,60 @@ +import { useNavigate } from 'react-router-dom'; + +import { + useAcceptCallback, + useCancelCallback, + useCompleteCallback, +} from '../../api/hooks'; +import { PostAcceptMenu } from '../../components/menu/post-accept'; +import { PreAcceptMenu } from '../../components/menu/pre-accept'; +import { Spinner } from '@chakra-ui/react'; + +type MenuProps = { + callBackId: number; + accept: boolean; +}; + +export const CallbackMenu = ({ callBackId, accept }: MenuProps) => { + const navigate = useNavigate(); + + const { + mutate: acceptCallback, + isPending: isAcceptLoading, + isSuccess: isAcceptSuccess, + } = useAcceptCallback(); + if (isAcceptSuccess) { + window.location.reload(); + } + + const { + mutate: completeCallback, + isPending: isCompleteLoading, + isSuccess: isCompleteSuccess, + } = useCompleteCallback(); + if (isCompleteSuccess) { + navigate('/call-back'); // TODO: 완료 이후 이동 페이지 지정 필요 + } + + const { + mutate: cancelCallback, + isPending: isCancelLoading, + isSuccess: isCancelSuccess, + } = useCancelCallback(); + if (isCancelSuccess) { + navigate('/call-back'); // TODO: 취소 이후 이동 페이지 지정 필요 + } + + const isLoading = isAcceptLoading || isCancelLoading || isCompleteLoading; + + return isLoading ? ( + + ) : accept ? ( + completeCallback(callBackId)} + handleCancle={() => cancelCallback(callBackId)} + phoneNumber='010-1234-5678' // TODO: api로 콜백 조회 시 response에 전화번호 추가 필요 + /> + ) : ( + acceptCallback(callBackId)} /> + ); +}; diff --git a/src/pages/sinitto/call-back/detail/components/menu/index.ts b/src/pages/sinitto/call-back/detail/components/menu/index.ts index d3f62dfd..84f6c869 100644 --- a/src/pages/sinitto/call-back/detail/components/menu/index.ts +++ b/src/pages/sinitto/call-back/detail/components/menu/index.ts @@ -1,2 +1 @@ -export * from './post-accept'; -export * from './pre-accept'; +export { CallbackMenu } from './CallbackMenu'; From 150f0dae18dd246a9954c2ba93c38e97b67b750f Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Oct 2024 05:01:08 +0900 Subject: [PATCH 5/8] =?UTF-8?q?Fix:=20eslint=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../call-back/detail/CallBackDetailPage.tsx | 13 +++++-- .../components/request-row/RequestRow.tsx | 2 ++ .../guide-line/SinittoGuideLinePage.tsx | 15 +++++--- src/shared/utils/handle-callback-error.ts | 34 +++++-------------- 4 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx b/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx index b8ce12a2..2288b5e4 100644 --- a/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx +++ b/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx @@ -1,4 +1,5 @@ -import { useParams, Outlet } from 'react-router-dom'; +import { useEffect } from 'react'; +import { useParams, Outlet, useNavigate } from 'react-router-dom'; import { useGetAccepted } from './api/hooks'; import { CallbackMenu } from './components'; @@ -15,6 +16,7 @@ export type CallBackDetailParams = { export const CallBackDetailPage = () => { const { callBackId = '' } = useParams(); + const navigate = useNavigate(); const { data: callbackData, @@ -22,7 +24,14 @@ export const CallBackDetailPage = () => { isError: isCallBackError, error: callBackError, } = useGetCallback(callBackId); - handleCallbackError(isCallBackError, callBackError); + + useEffect(() => { + if (isCallBackError) { + const errorMessage = handleCallbackError(callBackError); + alert(errorMessage); + navigate('/call-back'); + } + }, [isCallBackError, callBackError, navigate]); const { data: currentReq, diff --git a/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx b/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx index afe6cd4e..11088ff2 100644 --- a/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx +++ b/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx @@ -47,6 +47,8 @@ export const RequestRow = forwardRef( } ); +RequestRow.displayName = 'RequestRow'; + const Wrapper = styled.button` width: 100%; height: 60px; diff --git a/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx b/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx index 99e1a730..4dd1c996 100644 --- a/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx +++ b/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx @@ -1,4 +1,5 @@ -import { useParams } from 'react-router-dom'; +import { useEffect } from 'react'; +import { useParams, useNavigate } from 'react-router-dom'; import { useGetGuideline } from './api/hooks'; import { GuidelineResponse } from './api/types'; @@ -6,8 +7,7 @@ import { CATEGORIES } from './data'; import { Category } from './types'; import { useGetCallback } from '@/shared/api/hooks'; import { handleCallbackError } from '@/shared/utils'; -import { Container } from '@chakra-ui/react'; -import { Spinner } from '@chakra-ui/react'; +import { Container, Spinner } from '@chakra-ui/react'; import styled from '@emotion/styled'; type GuideLineParams = { @@ -17,6 +17,7 @@ type GuideLineParams = { export const SinittoGuideLinePage = () => { const { callBackId = '', guideLineId = '' } = useParams(); + const navigate = useNavigate(); const guideLineInfo = CATEGORIES.find((item: Category) => item.id === guideLineId)?.name || null; @@ -35,7 +36,13 @@ export const SinittoGuideLinePage = () => { isError: isGuideLineError, } = useGetGuideline(Number(seniorId), guideLineId); - handleCallbackError(isCallBackError, callBackError); + useEffect(() => { + if (isCallBackError) { + const errorMessage = handleCallbackError(callBackError); + alert(errorMessage); + navigate('/call-back'); + } + }, [isCallBackError, callBackError, navigate]); return ( diff --git a/src/shared/utils/handle-callback-error.ts b/src/shared/utils/handle-callback-error.ts index 3f975e12..aecebd26 100644 --- a/src/shared/utils/handle-callback-error.ts +++ b/src/shared/utils/handle-callback-error.ts @@ -1,29 +1,13 @@ -import { useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; - import { AxiosError } from 'axios'; -export const handleCallbackError = (isError: boolean, error: unknown) => { - const navigate = useNavigate(); - - useEffect(() => { - if (isError) { - let errorMessage = ''; - - if (error instanceof AxiosError) { - switch (error.response?.status) { - case 409: - errorMessage = '이미 진행 중인 콜백 요청이 있습니다.'; - break; - default: - errorMessage = '데이터를 불러오는 중 오류가 발생했습니다.'; - } - } else { - errorMessage = '데이터를 불러오는 중 오류가 발생했습니다.'; - } - - alert(errorMessage); - navigate('/call-back'); +export const handleCallbackError = (error: unknown): string => { + if (error instanceof AxiosError) { + switch (error.response?.status) { + case 409: + return '이미 진행 중인 콜백 요청이 있습니다.'; + default: + return '데이터를 불러오는 중 오류가 발생했습니다.'; } - }, [isError, error, navigate]); + } + return '데이터를 불러오는 중 오류가 발생했습니다.'; }; From e9f41a441ca89be1a996a9ff10535668965ca0bd Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Oct 2024 11:20:01 +0900 Subject: [PATCH 6/8] =?UTF-8?q?Fix:=20api=20=ED=98=B8=EC=B6=9C=20=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C=EC=97=90=20BASE=5FURI=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sinitto/call-back/detail/api/hooks/useAcceptCallback.ts | 3 +-- .../sinitto/call-back/detail/api/hooks/useCancelCallback.ts | 3 +-- .../sinitto/call-back/detail/api/hooks/useCompleteCallback.ts | 3 +-- .../sinitto/call-back/detail/api/hooks/useGetAccepted.ts | 3 +-- src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts | 3 +-- src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts | 3 +-- src/shared/api/hooks/useGetCallback.ts | 4 +--- 7 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts b/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts index 05b8458a..6754ee33 100644 --- a/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts +++ b/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts @@ -1,9 +1,8 @@ import { fetchInstance } from '@/shared/api/instance'; -import { BASE_URI } from '@/shared/constants'; import { useMutation } from '@tanstack/react-query'; const getacceptCallbackPath = (callbackId: number) => - `${BASE_URI}/api/callbacks/accept/${callbackId}`; + `/api/callbacks/accept/${callbackId}`; const acceptCallback = async (callbackId: number) => { const response = await fetchInstance.put(getacceptCallbackPath(callbackId)); diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts b/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts index 8570118a..d12403db 100644 --- a/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts +++ b/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts @@ -1,9 +1,8 @@ import { fetchInstance } from '@/shared/api/instance'; -import { BASE_URI } from '@/shared/constants'; import { useMutation } from '@tanstack/react-query'; const getCancelCallbackPath = (callbackId: number) => - `${BASE_URI}/api/callbacks/cancel/${callbackId}`; + `/api/callbacks/cancel/${callbackId}`; const CancelCallback = async (callbackId: number) => { const response = await fetchInstance.put(getCancelCallbackPath(callbackId)); diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts b/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts index 36ddf333..f6a20e56 100644 --- a/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts +++ b/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts @@ -1,9 +1,8 @@ import { fetchInstance } from '@/shared/api/instance'; -import { BASE_URI } from '@/shared/constants'; import { useMutation } from '@tanstack/react-query'; const getCompleteCallbackPath = (callbackId: number) => - `${BASE_URI}/api/callbacks/complete/${callbackId}`; + `/api/callbacks/complete/${callbackId}`; const CompleteCallback = async (callbackId: number) => { const response = await fetchInstance.put(getCompleteCallbackPath(callbackId)); diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts b/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts index f17ef35e..2f736ed3 100644 --- a/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts +++ b/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts @@ -1,9 +1,8 @@ import { fetchInstance } from '@/shared/api/instance'; -import { BASE_URI } from '@/shared/constants'; import type { CallbackResponse } from '@/shared/types'; import { useQuery } from '@tanstack/react-query'; -const getAcceptedPath = () => `${BASE_URI}/api/callbacks/sinitto/accepted`; +const getAcceptedPath = () => `/api/callbacks/sinitto/accepted`; const getAccepted = async () => { const response = await fetchInstance.get(getAcceptedPath()); diff --git a/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts b/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts index c0447e12..f7fbfdd4 100644 --- a/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts +++ b/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts @@ -1,9 +1,8 @@ import type { CallbacksResponse } from '../types/callbacks.response'; import { fetchInstance } from '@/shared/api/instance'; -import { BASE_URI } from '@/shared/constants'; import { useInfiniteQuery } from '@tanstack/react-query'; -const getCallbacksPath = () => `${BASE_URI}/api/callbacks`; +const getCallbacksPath = () => `/api/callbacks`; const getCallbacks = async (page: number, size: number) => { const response = await fetchInstance.get( diff --git a/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts b/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts index 6e55fa1b..f458b95c 100644 --- a/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts +++ b/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts @@ -1,10 +1,9 @@ import type { GuidelineResponse } from '../types'; import { fetchInstance } from '@/shared/api/instance'; -import { BASE_URI } from '@/shared/constants'; import { useQuery } from '@tanstack/react-query'; const getGuidelinesPath = (seniorId: number, type: string) => - `${BASE_URI}/api/guardguidelines/${seniorId}/${type}`; + `/api/guardguidelines/${seniorId}/${type}`; const getGuidelines = async (seniorId: number, type: string) => { const response = await fetchInstance.get( diff --git a/src/shared/api/hooks/useGetCallback.ts b/src/shared/api/hooks/useGetCallback.ts index 3bf2a7fc..3eada9ad 100644 --- a/src/shared/api/hooks/useGetCallback.ts +++ b/src/shared/api/hooks/useGetCallback.ts @@ -1,10 +1,8 @@ import type { CallbackResponse } from '../../types'; import { fetchInstance } from '@/shared/api/instance'; -import { BASE_URI } from '@/shared/constants'; import { useQuery } from '@tanstack/react-query'; -const getCallbackPath = (callbackId: string) => - `${BASE_URI}/api/callbacks/${callbackId}`; +const getCallbackPath = (callbackId: string) => `/api/callbacks/${callbackId}`; const getCallback = async (callbackId: string) => { const response = await fetchInstance.get( From fc235bf276216743bf1e36dd797a25b00df40e6a Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Oct 2024 11:26:43 +0900 Subject: [PATCH 7/8] =?UTF-8?q?Fix:=EA=B2=BD=EB=A1=9C=20=EC=83=81=EC=88=98?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx | 3 ++- .../call-back/list/components/request-row/RequestRow.tsx | 3 ++- src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx b/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx index 2288b5e4..2f8c70a1 100644 --- a/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx +++ b/src/pages/sinitto/call-back/detail/CallBackDetailPage.tsx @@ -4,6 +4,7 @@ import { useParams, Outlet, useNavigate } from 'react-router-dom'; import { useGetAccepted } from './api/hooks'; import { CallbackMenu } from './components'; import { GuideLineList } from './components/guide-line-list'; +import { RouterPath } from '@/app/routes/path'; import { useGetCallback } from '@/shared/api/hooks'; import { Notice } from '@/shared/components'; import { handleCallbackError } from '@/shared/utils'; @@ -29,7 +30,7 @@ export const CallBackDetailPage = () => { if (isCallBackError) { const errorMessage = handleCallbackError(callBackError); alert(errorMessage); - navigate('/call-back'); + navigate(RouterPath.CALL_BACK_LIST); } }, [isCallBackError, callBackError, navigate]); diff --git a/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx b/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx index 11088ff2..10b1c1aa 100644 --- a/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx +++ b/src/pages/sinitto/call-back/list/components/request-row/RequestRow.tsx @@ -2,6 +2,7 @@ import { forwardRef } from 'react'; import { useNavigate } from 'react-router-dom'; import ArrowImg from '../../assets/arrow.png'; +import { RouterPath } from '@/app/routes/path'; import styled from '@emotion/styled'; type Props = { @@ -15,7 +16,7 @@ export const RequestRow = forwardRef( const navigate = useNavigate(); const handleClick = () => { - navigate(`/call-back/${id}`); + navigate(`${RouterPath.CALL_BACK_LIST}/${id}`); }; const getTimeAgo = (postTime: string) => { diff --git a/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx b/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx index 4dd1c996..5dfa173b 100644 --- a/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx +++ b/src/pages/sinitto/guide-line/SinittoGuideLinePage.tsx @@ -5,6 +5,7 @@ import { useGetGuideline } from './api/hooks'; import { GuidelineResponse } from './api/types'; import { CATEGORIES } from './data'; import { Category } from './types'; +import { RouterPath } from '@/app/routes/path'; import { useGetCallback } from '@/shared/api/hooks'; import { handleCallbackError } from '@/shared/utils'; import { Container, Spinner } from '@chakra-ui/react'; @@ -40,7 +41,7 @@ export const SinittoGuideLinePage = () => { if (isCallBackError) { const errorMessage = handleCallbackError(callBackError); alert(errorMessage); - navigate('/call-back'); + navigate(RouterPath.CALL_BACK_LIST); } }, [isCallBackError, callBackError, navigate]); From d1b51d6fc27177632d3a9fe5afccb1e8fb2600bd Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 18 Oct 2024 12:07:34 +0900 Subject: [PATCH 8/8] =?UTF-8?q?Fix:=20api=20hook=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../detail/api/accept-call-back.api.ts | 9 +++++++++ .../detail/api/cancel-call-back.api.ts | 9 +++++++++ .../detail/api/complete-call-back.api.ts | 9 +++++++++ .../call-back/detail/api/get-accepted.api.ts | 9 +++++++++ .../detail/api/hooks/useAcceptCallback.ts | 10 +--------- .../detail/api/hooks/useCancelCallback.ts | 10 +--------- .../detail/api/hooks/useCompleteCallback.ts | 10 +--------- .../detail/api/hooks/useGetAccepted.ts | 10 +--------- .../sinitto/call-back/detail/api/index.ts | 4 ++++ .../call-back/list/api/get-call-backs.api.ts | 17 +++++++++++++++++ .../list/api/hooks/useGetCallbacks.ts | 18 +----------------- src/pages/sinitto/call-back/list/api/index.ts | 1 + .../guide-line/api/get-guideline.api.ts | 12 ++++++++++++ .../guide-line/api/hooks/useGetGuideline.ts | 13 +------------ src/pages/sinitto/guide-line/api/index.ts | 1 + src/shared/api/get-call-back.api.ts | 11 +++++++++++ src/shared/api/hooks/useGetCallback.ts | 12 +----------- src/shared/api/index.ts | 1 + 18 files changed, 90 insertions(+), 76 deletions(-) create mode 100644 src/pages/sinitto/call-back/detail/api/accept-call-back.api.ts create mode 100644 src/pages/sinitto/call-back/detail/api/cancel-call-back.api.ts create mode 100644 src/pages/sinitto/call-back/detail/api/complete-call-back.api.ts create mode 100644 src/pages/sinitto/call-back/detail/api/get-accepted.api.ts create mode 100644 src/pages/sinitto/call-back/detail/api/index.ts create mode 100644 src/pages/sinitto/call-back/list/api/get-call-backs.api.ts create mode 100644 src/pages/sinitto/call-back/list/api/index.ts create mode 100644 src/pages/sinitto/guide-line/api/get-guideline.api.ts create mode 100644 src/pages/sinitto/guide-line/api/index.ts create mode 100644 src/shared/api/get-call-back.api.ts create mode 100644 src/shared/api/index.ts diff --git a/src/pages/sinitto/call-back/detail/api/accept-call-back.api.ts b/src/pages/sinitto/call-back/detail/api/accept-call-back.api.ts new file mode 100644 index 00000000..ed40d8c1 --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/accept-call-back.api.ts @@ -0,0 +1,9 @@ +import { fetchInstance } from '@/shared/api/instance'; + +const getacceptCallbackPath = (callbackId: number) => + `/api/callbacks/accept/${callbackId}`; + +export const acceptCallback = async (callbackId: number) => { + const response = await fetchInstance.put(getacceptCallbackPath(callbackId)); + return response.data; +}; diff --git a/src/pages/sinitto/call-back/detail/api/cancel-call-back.api.ts b/src/pages/sinitto/call-back/detail/api/cancel-call-back.api.ts new file mode 100644 index 00000000..c52e648e --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/cancel-call-back.api.ts @@ -0,0 +1,9 @@ +import { fetchInstance } from '@/shared/api/instance'; + +const getCancelCallbackPath = (callbackId: number) => + `/api/callbacks/cancel/${callbackId}`; + +export const CancelCallback = async (callbackId: number) => { + const response = await fetchInstance.put(getCancelCallbackPath(callbackId)); + return response.data; +}; diff --git a/src/pages/sinitto/call-back/detail/api/complete-call-back.api.ts b/src/pages/sinitto/call-back/detail/api/complete-call-back.api.ts new file mode 100644 index 00000000..69a4e192 --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/complete-call-back.api.ts @@ -0,0 +1,9 @@ +import { fetchInstance } from '@/shared/api/instance'; + +const getCompleteCallbackPath = (callbackId: number) => + `/api/callbacks/complete/${callbackId}`; + +export const CompleteCallback = async (callbackId: number) => { + const response = await fetchInstance.put(getCompleteCallbackPath(callbackId)); + return response.data; +}; diff --git a/src/pages/sinitto/call-back/detail/api/get-accepted.api.ts b/src/pages/sinitto/call-back/detail/api/get-accepted.api.ts new file mode 100644 index 00000000..5ceef520 --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/get-accepted.api.ts @@ -0,0 +1,9 @@ +import { fetchInstance } from '@/shared/api/instance'; +import type { CallbackResponse } from '@/shared/types'; + +const getAcceptedPath = () => `/api/callbacks/sinitto/accepted`; + +export const getAccepted = async () => { + const response = await fetchInstance.get(getAcceptedPath()); + return response.data; +}; diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts b/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts index 6754ee33..39b9919c 100644 --- a/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts +++ b/src/pages/sinitto/call-back/detail/api/hooks/useAcceptCallback.ts @@ -1,14 +1,6 @@ -import { fetchInstance } from '@/shared/api/instance'; +import { acceptCallback } from '../accept-call-back.api'; import { useMutation } from '@tanstack/react-query'; -const getacceptCallbackPath = (callbackId: number) => - `/api/callbacks/accept/${callbackId}`; - -const acceptCallback = async (callbackId: number) => { - const response = await fetchInstance.put(getacceptCallbackPath(callbackId)); - return response.data; -}; - export const useAcceptCallback = () => { return useMutation({ mutationFn: acceptCallback, diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts b/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts index d12403db..f351f266 100644 --- a/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts +++ b/src/pages/sinitto/call-back/detail/api/hooks/useCancelCallback.ts @@ -1,14 +1,6 @@ -import { fetchInstance } from '@/shared/api/instance'; +import { CancelCallback } from '../cancel-call-back.api'; import { useMutation } from '@tanstack/react-query'; -const getCancelCallbackPath = (callbackId: number) => - `/api/callbacks/cancel/${callbackId}`; - -const CancelCallback = async (callbackId: number) => { - const response = await fetchInstance.put(getCancelCallbackPath(callbackId)); - return response.data; -}; - export const useCancelCallback = () => { return useMutation({ mutationFn: CancelCallback, diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts b/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts index f6a20e56..7f0af2b8 100644 --- a/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts +++ b/src/pages/sinitto/call-back/detail/api/hooks/useCompleteCallback.ts @@ -1,14 +1,6 @@ -import { fetchInstance } from '@/shared/api/instance'; +import { CompleteCallback } from '../complete-call-back.api'; import { useMutation } from '@tanstack/react-query'; -const getCompleteCallbackPath = (callbackId: number) => - `/api/callbacks/complete/${callbackId}`; - -const CompleteCallback = async (callbackId: number) => { - const response = await fetchInstance.put(getCompleteCallbackPath(callbackId)); - return response.data; -}; - export const useCompleteCallback = () => { return useMutation({ mutationFn: CompleteCallback, diff --git a/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts b/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts index 2f736ed3..e5cd7f35 100644 --- a/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts +++ b/src/pages/sinitto/call-back/detail/api/hooks/useGetAccepted.ts @@ -1,14 +1,6 @@ -import { fetchInstance } from '@/shared/api/instance'; -import type { CallbackResponse } from '@/shared/types'; +import { getAccepted } from '../get-accepted.api'; import { useQuery } from '@tanstack/react-query'; -const getAcceptedPath = () => `/api/callbacks/sinitto/accepted`; - -const getAccepted = async () => { - const response = await fetchInstance.get(getAcceptedPath()); - return response.data; -}; - export const useGetAccepted = () => { return useQuery({ queryKey: ['acceptedCallback'], diff --git a/src/pages/sinitto/call-back/detail/api/index.ts b/src/pages/sinitto/call-back/detail/api/index.ts new file mode 100644 index 00000000..e28364b2 --- /dev/null +++ b/src/pages/sinitto/call-back/detail/api/index.ts @@ -0,0 +1,4 @@ +export { acceptCallback } from './accept-call-back.api'; +export { CancelCallback } from './cancel-call-back.api'; +export { CompleteCallback } from './complete-call-back.api'; +export { getAccepted } from './get-accepted.api'; diff --git a/src/pages/sinitto/call-back/list/api/get-call-backs.api.ts b/src/pages/sinitto/call-back/list/api/get-call-backs.api.ts new file mode 100644 index 00000000..3bd83f9b --- /dev/null +++ b/src/pages/sinitto/call-back/list/api/get-call-backs.api.ts @@ -0,0 +1,17 @@ +import type { CallbacksResponse } from './types'; +import { fetchInstance } from '@/shared/api/instance'; + +const getCallbacksPath = () => `/api/callbacks`; + +export const getCallbacks = async (page: number, size: number) => { + const response = await fetchInstance.get( + getCallbacksPath(), + { + params: { + page, + size, + }, + } + ); + return response.data; +}; diff --git a/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts b/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts index f7fbfdd4..8bcc96aa 100644 --- a/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts +++ b/src/pages/sinitto/call-back/list/api/hooks/useGetCallbacks.ts @@ -1,22 +1,6 @@ -import type { CallbacksResponse } from '../types/callbacks.response'; -import { fetchInstance } from '@/shared/api/instance'; +import { getCallbacks } from '../get-call-backs.api'; import { useInfiniteQuery } from '@tanstack/react-query'; -const getCallbacksPath = () => `/api/callbacks`; - -const getCallbacks = async (page: number, size: number) => { - const response = await fetchInstance.get( - getCallbacksPath(), - { - params: { - page, - size, - }, - } - ); - return response.data; -}; - export const useGetCallbacks = (size: number) => { return useInfiniteQuery({ queryKey: ['callbacks', size], diff --git a/src/pages/sinitto/call-back/list/api/index.ts b/src/pages/sinitto/call-back/list/api/index.ts new file mode 100644 index 00000000..a2626325 --- /dev/null +++ b/src/pages/sinitto/call-back/list/api/index.ts @@ -0,0 +1 @@ +export { getCallbacks } from './get-call-backs.api'; diff --git a/src/pages/sinitto/guide-line/api/get-guideline.api.ts b/src/pages/sinitto/guide-line/api/get-guideline.api.ts new file mode 100644 index 00000000..4bc12141 --- /dev/null +++ b/src/pages/sinitto/guide-line/api/get-guideline.api.ts @@ -0,0 +1,12 @@ +import type { GuidelineResponse } from './types'; +import { fetchInstance } from '@/shared/api/instance'; + +const getGuidelinesPath = (seniorId: number, type: string) => + `/api/guardguidelines/${seniorId}/${type}`; + +export const getGuidelines = async (seniorId: number, type: string) => { + const response = await fetchInstance.get( + getGuidelinesPath(seniorId, type) + ); + return response.data; +}; diff --git a/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts b/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts index f458b95c..57ffd458 100644 --- a/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts +++ b/src/pages/sinitto/guide-line/api/hooks/useGetGuideline.ts @@ -1,17 +1,6 @@ -import type { GuidelineResponse } from '../types'; -import { fetchInstance } from '@/shared/api/instance'; +import { getGuidelines } from '../get-guideline.api'; import { useQuery } from '@tanstack/react-query'; -const getGuidelinesPath = (seniorId: number, type: string) => - `/api/guardguidelines/${seniorId}/${type}`; - -const getGuidelines = async (seniorId: number, type: string) => { - const response = await fetchInstance.get( - getGuidelinesPath(seniorId, type) - ); - return response.data; -}; - export const useGetGuideline = (seniorId: number, type: string) => { return useQuery({ queryKey: ['Guideline', seniorId, type], diff --git a/src/pages/sinitto/guide-line/api/index.ts b/src/pages/sinitto/guide-line/api/index.ts new file mode 100644 index 00000000..f68afdec --- /dev/null +++ b/src/pages/sinitto/guide-line/api/index.ts @@ -0,0 +1 @@ +export { getGuidelines } from './get-guideline.api'; diff --git a/src/shared/api/get-call-back.api.ts b/src/shared/api/get-call-back.api.ts new file mode 100644 index 00000000..c2962ad5 --- /dev/null +++ b/src/shared/api/get-call-back.api.ts @@ -0,0 +1,11 @@ +import type { CallbackResponse } from '../types'; +import { fetchInstance } from '@/shared/api/instance'; + +const getCallbackPath = (callbackId: string) => `/api/callbacks/${callbackId}`; + +export const getCallback = async (callbackId: string) => { + const response = await fetchInstance.get( + getCallbackPath(callbackId) + ); + return response.data; +}; diff --git a/src/shared/api/hooks/useGetCallback.ts b/src/shared/api/hooks/useGetCallback.ts index 3eada9ad..03c373a8 100644 --- a/src/shared/api/hooks/useGetCallback.ts +++ b/src/shared/api/hooks/useGetCallback.ts @@ -1,16 +1,6 @@ -import type { CallbackResponse } from '../../types'; -import { fetchInstance } from '@/shared/api/instance'; +import { getCallback } from '../get-call-back.api'; import { useQuery } from '@tanstack/react-query'; -const getCallbackPath = (callbackId: string) => `/api/callbacks/${callbackId}`; - -const getCallback = async (callbackId: string) => { - const response = await fetchInstance.get( - getCallbackPath(callbackId) - ); - return response.data; -}; - export const useGetCallback = (callbackId: string) => { return useQuery({ queryKey: ['callback', callbackId], diff --git a/src/shared/api/index.ts b/src/shared/api/index.ts new file mode 100644 index 00000000..5ac75c09 --- /dev/null +++ b/src/shared/api/index.ts @@ -0,0 +1 @@ +export { getCallback } from './get-call-back.api';