fromis_9/frontend/src/api/public/schedules.js
caadiq 55096c8e43 refactor(frontend): API 레이어에 데이터 변환 로직 통합
- schedules.js에 transformSchedule 함수 추가
  - datetime → date, time 분리
  - category 객체 → category_id, category_name, category_color 플랫화
  - members 배열 → member_names 문자열 변환
- PC Schedule.jsx의 검색 로직을 searchSchedules 함수 사용으로 변경
- 중복 변환 로직 제거로 코드 간소화

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 23:33:32 +09:00

73 lines
2 KiB
JavaScript

/**
* 일정 관련 공개 API
*/
import { fetchApi } from "../index";
import { getTodayKST } from "../../utils/date";
/**
* API 응답을 프론트엔드 형식으로 변환
* - datetime → date, time 분리
* - category 객체 → category_id, category_name, category_color 플랫화
* - members 배열 → member_names 문자열
*/
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;
}
// 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,
};
}
// 일정 목록 조회 (월별)
export async function getSchedules(year, month) {
const data = await fetchApi(`/api/schedules?year=${year}&month=${month}`);
return (data.schedules || []).map(transformSchedule);
}
// 다가오는 일정 조회 (오늘 이후)
export async function getUpcomingSchedules(limit = 3) {
const todayStr = getTodayKST();
const data = await fetchApi(`/api/schedules?startDate=${todayStr}&limit=${limit}`);
return (data.schedules || []).map(transformSchedule);
}
// 일정 검색 (Meilisearch)
export async function searchSchedules(query, { offset = 0, limit = 20 } = {}) {
const data = await fetchApi(
`/api/schedules?search=${encodeURIComponent(query)}&offset=${offset}&limit=${limit}`
);
return {
...data,
schedules: (data.schedules || []).map(transformSchedule),
};
}
// 일정 상세 조회
export async function getSchedule(id) {
return fetchApi(`/api/schedules/${id}`);
}
// X 프로필 정보 조회
export async function getXProfile(username) {
return fetchApi(`/api/schedules/x-profile/${encodeURIComponent(username)}`);
}