Skip to content

Commit 9bd792f

Browse files
committed
refactor: 로딩 비용 줄이기 및 타입 변환 수정
1 parent e7ab340 commit 9bd792f

2 files changed

Lines changed: 21 additions & 13 deletions

File tree

app/(with-sidebar)/plans/page.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,15 @@ const Page = () => {
3939
});
4040

4141
// 카드 업데이트를 위한 stats 가져오기 메서드
42-
const fetchAndCalculate = async (uid: string) => {
42+
const fetchAndCalculate = async (
43+
uid: string,
44+
preload?: { plans: Plan[]; items: PlanItem[] }
45+
) => {
4346
try {
4447
// 1. 데이터 병렬 로드
45-
const [fetchedPlans, fetchedItems] = await Promise.all([
46-
fetchPlans(uid),
47-
fetchAllPlanItems(uid),
48-
]);
48+
const [fetchedPlans, fetchedItems] = preload
49+
? [preload.plans, preload.items]
50+
: await Promise.all([fetchPlans(uid), fetchAllPlanItems(uid)]);
4951

5052
setPlans(fetchedPlans); // 플랜 목록 업데이트
5153

@@ -57,7 +59,7 @@ const Page = () => {
5759
const myItems = fetchedItems.filter(
5860
(item: PlanItem) => item.planId === plan.id
5961
);
60-
// ⚠️ 하위 항목이 하나라도 있는 경우에만 상태를 판별합니다.
62+
// 하위 항목이 하나라도 있는 경우에만
6163
if (myItems.length > 0) {
6264
const isAllChecked = myItems.every(
6365
(item: PlanItem) => item.isChecked
@@ -97,7 +99,10 @@ const Page = () => {
9799
setPlans(fetchedPlans);
98100
setCurrentPage(1);
99101

100-
await fetchAndCalculate(currentUser.uid);
102+
await fetchAndCalculate(currentUser.uid, {
103+
plans: fetchedPlans,
104+
items: fetchedItems,
105+
});
101106
} catch (err) {
102107
console.error('플랜 목록 로딩 실패:', err);
103108
setPlans([]);

services/plans/planManageService.service.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -218,10 +218,13 @@ export const fetchAllPlanItems = async (uid: string): Promise<PlanItem[]> => {
218218
const q = query(allPlanItemsRef);
219219
const snapshot = await getDocs(q);
220220

221-
return snapshot.docs.map((doc) => ({
222-
id: doc.id,
223-
planId: doc.data().planId,
224-
isChecked: doc.data().isChecked,
225-
...doc.data(),
226-
})) as PlanItem[];
221+
return snapshot.docs.map((doc) => {
222+
const data = doc.data();
223+
return {
224+
id: doc.id,
225+
...data,
226+
createdAt: data.createdAt?.toDate(),
227+
deadline: data.deadline?.toDate() ?? null,
228+
};
229+
}) as PlanItem[];
227230
};

0 commit comments

Comments
 (0)