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분 캐시 + }); +}