From 362182fb5336798d8b9d4b46066d2b1408a70d6d Mon Sep 17 00:00:00 2001 From: caadiq Date: Thu, 22 Jan 2026 21:44:14 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=82=AC=EC=9A=A9=20=EC=A4=91=EC=9D=B8?= =?UTF-8?q?=20hooks=20=EB=B3=B5=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 실제로 사용 중인 hooks를 잘못 삭제함: - useMemberData.js (useMembers, useMemberDetail) - useAlbumData.js (useAlbums, useAlbumDetail, useAlbumGallery) - useScheduleData.js (useScheduleData, useScheduleDetail, useUpcomingSchedules, useCategories) Co-Authored-By: Claude Opus 4.5 --- frontend-temp/src/hooks/common/index.js | 14 ++++++ .../src/hooks/common/useAlbumData.js | 37 ++++++++++++++ .../src/hooks/common/useMemberData.js | 25 ++++++++++ .../src/hooks/common/useScheduleData.js | 49 +++++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 frontend-temp/src/hooks/common/useAlbumData.js create mode 100644 frontend-temp/src/hooks/common/useMemberData.js create mode 100644 frontend-temp/src/hooks/common/useScheduleData.js diff --git a/frontend-temp/src/hooks/common/index.js b/frontend-temp/src/hooks/common/index.js index 0b12f91..e640453 100644 --- a/frontend-temp/src/hooks/common/index.js +++ b/frontend-temp/src/hooks/common/index.js @@ -1,2 +1,16 @@ // 토스트 export { default as useToast } from './useToast'; + +// 멤버 데이터 +export { useMembers, useMemberDetail } from './useMemberData'; + +// 앨범 데이터 +export { useAlbums, useAlbumDetail, useAlbumGallery } from './useAlbumData'; + +// 스케줄 데이터 +export { + useScheduleData, + useScheduleDetail, + useUpcomingSchedules, + useCategories, +} from './useScheduleData'; diff --git a/frontend-temp/src/hooks/common/useAlbumData.js b/frontend-temp/src/hooks/common/useAlbumData.js new file mode 100644 index 0000000..52b8c7e --- /dev/null +++ b/frontend-temp/src/hooks/common/useAlbumData.js @@ -0,0 +1,37 @@ +import { useQuery } from '@tanstack/react-query'; +import { albumApi } from '@/api'; + +/** + * 앨범 목록 조회 훅 + */ +export function useAlbums() { + return useQuery({ + queryKey: ['albums'], + queryFn: albumApi.getAlbums, + staleTime: 1000 * 60 * 10, // 10분 캐시 + }); +} + +/** + * 앨범 상세 조회 훅 + * @param {string} name - 앨범 이름 + */ +export function useAlbumDetail(name) { + return useQuery({ + queryKey: ['album', name], + queryFn: () => albumApi.getAlbumByName(name), + enabled: !!name, + }); +} + +/** + * 앨범 갤러리 조회 훅 + * @param {string} name - 앨범 이름 + */ +export function useAlbumGallery(name) { + return useQuery({ + queryKey: ['album', name, 'gallery'], + queryFn: () => albumApi.getAlbumGallery(name), + enabled: !!name, + }); +} diff --git a/frontend-temp/src/hooks/common/useMemberData.js b/frontend-temp/src/hooks/common/useMemberData.js new file mode 100644 index 0000000..ff82df3 --- /dev/null +++ b/frontend-temp/src/hooks/common/useMemberData.js @@ -0,0 +1,25 @@ +import { useQuery } from '@tanstack/react-query'; +import { memberApi } from '@/api'; + +/** + * 멤버 목록 조회 훅 + */ +export function useMembers() { + return useQuery({ + queryKey: ['members'], + queryFn: memberApi.getMembers, + staleTime: 1000 * 60 * 10, // 10분 캐시 + }); +} + +/** + * 멤버 상세 조회 훅 + * @param {string} name - 멤버 이름 + */ +export function useMemberDetail(name) { + return useQuery({ + queryKey: ['member', name], + queryFn: () => memberApi.getMemberByName(name), + enabled: !!name, + }); +} diff --git a/frontend-temp/src/hooks/common/useScheduleData.js b/frontend-temp/src/hooks/common/useScheduleData.js new file mode 100644 index 0000000..56bc9e6 --- /dev/null +++ b/frontend-temp/src/hooks/common/useScheduleData.js @@ -0,0 +1,49 @@ +import { useQuery } from '@tanstack/react-query'; +import { scheduleApi } from '@/api'; + +/** + * 스케줄 목록 조회 훅 (월별) + * @param {number} year - 년도 + * @param {number} month - 월 (1-12) + */ +export function useScheduleData(year, month) { + return useQuery({ + queryKey: ['schedules', year, month], + queryFn: () => scheduleApi.getSchedules(year, month), + enabled: !!year && !!month, + }); +} + +/** + * 스케줄 상세 조회 훅 + * @param {number} id - 스케줄 ID + */ +export function useScheduleDetail(id) { + return useQuery({ + queryKey: ['schedule', id], + queryFn: () => scheduleApi.getSchedule(id), + enabled: !!id, + }); +} + +/** + * 다가오는 스케줄 조회 훅 + * @param {number} limit - 조회 개수 + */ +export function useUpcomingSchedules(limit = 3) { + return useQuery({ + queryKey: ['schedules', 'upcoming', limit], + queryFn: () => scheduleApi.getUpcomingSchedules(limit), + }); +} + +/** + * 카테고리 목록 조회 훅 + */ +export function useCategories() { + return useQuery({ + queryKey: ['categories'], + queryFn: scheduleApi.getCategories, + staleTime: 1000 * 60 * 10, // 10분 캐시 + }); +}