Review and refine sync logic

This commit reviews and refines the synchronization logic to ensure proper functionality and data integrity.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-21 11:24:40 +00:00
parent e55dfac3a9
commit 8e6eb9d8aa
15 changed files with 567 additions and 357 deletions

View File

@@ -1,8 +1,5 @@
import { uploadBudgets } from './uploadBudget';
import { downloadBudgets } from './downloadBudget';
export {
uploadBudgets,
downloadBudgets
};
// 예산 동기화 관련 모듈
export * from './uploadBudget';
export * from './downloadBudget';
export * from './modifiedBudgetsTracker';

View File

@@ -1,138 +1,45 @@
/**
* 수정된 예산 데이터를 추적하는 유틸리티
* 로컬 스토리지에 수정된 예산 정보를 저장하고 관리합니다.
*/
const MODIFIED_BUDGETS_KEY = 'modified_budgets';
const MODIFIED_CATEGORY_BUDGETS_KEY = 'modified_category_budgets';
interface ModifiedBudget {
timestamp: number; // 수정 시간 (밀리초)
monthlyAmount: number; // 월간 예산액
}
interface ModifiedCategoryBudgets {
timestamp: number; // 수정 시간 (밀리초)
categories: Record<string, number>; // 카테고리별 예산액
}
/**
* 수정된 예산 정보를 로컬 스토리지에 저장
* 수정된 예산 추적 유틸리티
*/
export const markBudgetAsModified = (monthlyAmount: number): void => {
try {
const modifiedBudget: ModifiedBudget = {
timestamp: Date.now(),
monthlyAmount
};
localStorage.setItem(MODIFIED_BUDGETS_KEY, JSON.stringify(modifiedBudget));
console.log(`[예산 추적] 수정된 예산 정보 저장 완료: ${monthlyAmount}`);
} catch (error) {
console.error('[예산 추적] 수정된 예산 정보 저장 실패:', error);
}
// 예산 수정 여부 확인
export const isModifiedBudget = (): boolean => {
return localStorage.getItem('modifiedBudget') === 'true';
};
/**
* 수정된 카테고리 예산 정보를 로컬 스토리지에 저장
*/
export const markCategoryBudgetsAsModified = (categories: Record<string, number>): void => {
try {
const modifiedCategoryBudgets: ModifiedCategoryBudgets = {
timestamp: Date.now(),
categories
};
localStorage.setItem(MODIFIED_CATEGORY_BUDGETS_KEY, JSON.stringify(modifiedCategoryBudgets));
console.log(`[예산 추적] 수정된 카테고리 예산 정보 저장 완료: ${Object.keys(categories).length}개 카테고리`);
} catch (error) {
console.error('[예산 추적] 수정된 카테고리 예산 정보 저장 실패:', error);
}
// 카테고리 예산 수정 여부 확인
export const isModifiedCategoryBudgets = (): boolean => {
return localStorage.getItem('modifiedCategoryBudgets') === 'true';
};
/**
* 단일 카테고리 예산 정보를 수정된 것으로 표시
*/
export const markSingleCategoryBudgetAsModified = (category: string, amount: number): void => {
try {
// 기존 수정 정보 가져오기
const existing = getModifiedCategoryBudgets();
const categories = existing?.categories || {};
// 새 카테고리 예산 정보 추가
categories[category] = amount;
// 수정된 정보 저장
const modifiedCategoryBudgets: ModifiedCategoryBudgets = {
timestamp: Date.now(),
categories
};
localStorage.setItem(MODIFIED_CATEGORY_BUDGETS_KEY, JSON.stringify(modifiedCategoryBudgets));
console.log(`[예산 추적] 카테고리 '${category}' 예산 정보 저장 완료: ${amount}`);
} catch (error) {
console.error(`[예산 추적] 카테고리 '${category}' 예산 정보 저장 실패:`, error);
}
// 예산 수정 여부 설정
export const setModifiedBudget = (modified: boolean = true): void => {
localStorage.setItem('modifiedBudget', modified ? 'true' : 'false');
};
/**
* 수정된 예산 정보 가져오기
*/
export const getModifiedBudget = (): ModifiedBudget | null => {
try {
const data = localStorage.getItem(MODIFIED_BUDGETS_KEY);
if (!data) return null;
return JSON.parse(data) as ModifiedBudget;
} catch (error) {
console.error('[예산 추적] 수정된 예산 정보 조회 실패:', error);
return null;
}
// 카테고리 예산 수정 여부 설정
export const setModifiedCategoryBudgets = (modified: boolean = true): void => {
localStorage.setItem('modifiedCategoryBudgets', modified ? 'true' : 'false');
};
/**
* 수정된 카테고리 예산 정보 가져오기
*/
export const getModifiedCategoryBudgets = (): ModifiedCategoryBudgets | null => {
try {
const data = localStorage.getItem(MODIFIED_CATEGORY_BUDGETS_KEY);
if (!data) return null;
return JSON.parse(data) as ModifiedCategoryBudgets;
} catch (error) {
console.error('[예산 추적] 수정된 카테고리 예산 정보 조회 실패:', error);
return null;
}
};
/**
* 예산 수정 정보 초기화
*/
// 예산 수정 여부 초기화
export const clearModifiedBudget = (): void => {
try {
localStorage.removeItem(MODIFIED_BUDGETS_KEY);
console.log('[예산 추적] 수정된 예산 정보 초기화 완료');
} catch (error) {
console.error('[예산 추적] 수정된 예산 정보 초기화 실패:', error);
}
localStorage.setItem('modifiedBudget', 'false');
};
/**
* 카테고리 예산 수정 정보 초기화
*/
// 카테고리 예산 수정 여부 초기화
export const clearModifiedCategoryBudgets = (): void => {
try {
localStorage.removeItem(MODIFIED_CATEGORY_BUDGETS_KEY);
console.log('[예산 추적] 수정된 카테고리 예산 정보 초기화 완료');
} catch (error) {
console.error('[예산 추적] 수정된 카테고리 예산 정보 초기화 실패:', error);
}
localStorage.setItem('modifiedCategoryBudgets', 'false');
};
/**
* 모든 수정 정보 초기화
*/
export const clearAllModifiedBudgets = (): void => {
// 예산 또는 카테고리 예산이 수정되었는지 확인
export const isAnyBudgetModified = (): boolean => {
return isModifiedBudget() || isModifiedCategoryBudgets();
};
// 모든 예산 수정 여부 초기화
export const clearAllModifiedFlags = (): void => {
clearModifiedBudget();
clearModifiedCategoryBudgets();
};