From b64710c8fdf591a4cd58c837b0d588e75e27c225 Mon Sep 17 00:00:00 2001 From: caadiq Date: Thu, 22 Jan 2026 00:45:55 +0900 Subject: [PATCH] =?UTF-8?q?refactor(frontend-temp):=20=EC=8A=A4=EC=BC=80?= =?UTF-8?q?=EC=A4=84=20API=EB=8F=84=20=EC=83=88=20=ED=98=95=EC=8B=9D?= =?UTF-8?q?=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - flattenScheduleResponse → transformSchedule 함수로 변경 - 새 API 형식(schedules 배열, datetime, category 객체) 지원 Co-Authored-By: Claude Opus 4.5 --- frontend-temp/src/api/schedules.js | 55 +++++++++++++++++++----------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/frontend-temp/src/api/schedules.js b/frontend-temp/src/api/schedules.js index cae1b68..69c1cba 100644 --- a/frontend-temp/src/api/schedules.js +++ b/frontend-temp/src/api/schedules.js @@ -5,24 +5,37 @@ import { fetchApi, fetchAuthApi, fetchFormData } from './client'; import { getTodayKST } from '@/utils'; /** - * API 응답을 플랫 배열로 변환 - * 백엔드가 날짜별 그룹화된 객체를 반환하므로 변환 필요 + * API 응답을 프론트엔드 형식으로 변환 + * - datetime → date, time 분리 + * - category 객체 → category_id, category_name, category_color 플랫화 + * - members 배열 → member_names 문자열 */ -function flattenScheduleResponse(data) { - const schedules = []; - for (const [date, dayData] of Object.entries(data)) { - for (const schedule of dayData.schedules || []) { - const category = schedule.category || {}; - schedules.push({ - ...schedule, - date, - category_id: category.id, - category_name: category.name, - category_color: category.color, - }); - } +function transformSchedule(schedule) { + const category = schedule.category || {}; + + // datetime에서 date와 time 분리 + let date = ''; + let time = null; + if (schedule.datetime) { + const parts = schedule.datetime.split('T'); + date = parts[0]; + time = parts[1] || null; } - return schedules; + + // members 배열을 문자열로 (기존 코드 호환성) + const memberNames = Array.isArray(schedule.members) + ? schedule.members.join(',') + : ''; + + return { + ...schedule, + date, + time, + category_id: category.id, + category_name: category.name, + category_color: category.color, + member_names: memberNames, + }; } // ==================== 공개 API ==================== @@ -32,7 +45,7 @@ function flattenScheduleResponse(data) { */ export async function getSchedules(year, month) { const data = await fetchApi(`/schedules?year=${year}&month=${month}`); - return flattenScheduleResponse(data); + return (data.schedules || []).map(transformSchedule); } /** @@ -41,16 +54,20 @@ export async function getSchedules(year, month) { export async function getUpcomingSchedules(limit = 3) { const today = getTodayKST(); const data = await fetchApi(`/schedules?startDate=${today}&limit=${limit}`); - return flattenScheduleResponse(data); + return (data.schedules || []).map(transformSchedule); } /** * 스케줄 검색 (Meilisearch) */ export async function searchSchedules(query, { offset = 0, limit = 20 } = {}) { - return fetchApi( + const data = await fetchApi( `/schedules?search=${encodeURIComponent(query)}&offset=${offset}&limit=${limit}` ); + return { + ...data, + schedules: (data.schedules || []).map(transformSchedule), + }; } /**