The category budget setting is now based on the monthly budget amount, which is then divided into daily and weekly budgets.
176 lines
5.4 KiB
TypeScript
176 lines
5.4 KiB
TypeScript
|
|
import { Transaction } from '@/components/TransactionCard';
|
|
|
|
// 트랜잭션 데이터 불러오기
|
|
export const loadTransactionsFromStorage = (): Transaction[] => {
|
|
try {
|
|
const localData = localStorage.getItem('transactions');
|
|
if (localData) {
|
|
return JSON.parse(localData) as Transaction[];
|
|
}
|
|
|
|
// 백업에서 복구 시도
|
|
const backupData = localStorage.getItem('transactions_backup');
|
|
if (backupData) {
|
|
console.log('트랜잭션 데이터 백업에서 복구');
|
|
localStorage.setItem('transactions', backupData); // 메인 스토리지 복원
|
|
return JSON.parse(backupData) as Transaction[];
|
|
}
|
|
} catch (error) {
|
|
console.error('트랜잭션 데이터 로드 중 오류:', error);
|
|
}
|
|
|
|
// 데이터가 없을 경우 빈 배열 반환 (샘플 데이터 생성하지 않음)
|
|
return [];
|
|
};
|
|
|
|
// 트랜잭션 데이터 저장하기
|
|
export const saveTransactionsToStorage = (transactions: Transaction[]): void => {
|
|
try {
|
|
const dataString = JSON.stringify(transactions);
|
|
localStorage.setItem('transactions', dataString);
|
|
|
|
// 백업 저장 (데이터 손실 방지)
|
|
localStorage.setItem('transactions_backup', dataString);
|
|
|
|
// 이벤트 발생
|
|
window.dispatchEvent(new Event('transactionUpdated'));
|
|
} catch (error) {
|
|
console.error('트랜잭션 저장 중 오류:', error);
|
|
}
|
|
};
|
|
|
|
// 예산 불러오기 (이전 버전과의 호환성 유지)
|
|
export const loadBudgetFromStorage = (): number => {
|
|
try {
|
|
// 새 구조의 budgetData 확인
|
|
const budgetData = localStorage.getItem('budgetData');
|
|
if (budgetData) {
|
|
const parsedBudgetData = JSON.parse(budgetData);
|
|
if (parsedBudgetData.monthly && typeof parsedBudgetData.monthly.targetAmount === 'number') {
|
|
return parsedBudgetData.monthly.targetAmount;
|
|
}
|
|
}
|
|
|
|
// 기존 구조 확인
|
|
const budget = localStorage.getItem('budget');
|
|
if (budget) {
|
|
const parsedBudget = JSON.parse(budget);
|
|
return parsedBudget.total || 0;
|
|
}
|
|
} catch (error) {
|
|
console.error('예산 데이터 로드 중 오류:', error);
|
|
}
|
|
|
|
return 0;
|
|
};
|
|
|
|
// 모든 데이터 완전히 초기화 - 성능 최적화
|
|
export const resetAllStorageData = (): void => {
|
|
console.log('완전 초기화 시작 - resetAllStorageData');
|
|
|
|
try {
|
|
// 중요: 사용자 설정 값 백업
|
|
const dontShowWelcomeValue = localStorage.getItem('dontShowWelcome');
|
|
const hasVisitedBefore = localStorage.getItem('hasVisitedBefore');
|
|
// 로그인 상태 관련 데이터 백업
|
|
const authSession = localStorage.getItem('authSession');
|
|
const sbAuth = localStorage.getItem('sb-auth-token');
|
|
const supabase = localStorage.getItem('supabase.auth.token');
|
|
|
|
// 모든 Storage 키 목록 (로그인 관련 항목 제외)
|
|
const keysToRemove = [
|
|
'transactions',
|
|
'budget',
|
|
'monthlyExpenses',
|
|
'budgetData',
|
|
'categoryBudgets',
|
|
'analyticData',
|
|
'expenseData',
|
|
'chartData',
|
|
'monthlyData',
|
|
'spendingData',
|
|
'categorySpending',
|
|
'monthlyBudget',
|
|
'dailyBudget',
|
|
'weeklyBudget',
|
|
'monthlyTotals',
|
|
'analytics',
|
|
'expenseHistory',
|
|
'budgetHistory',
|
|
'transactionHistory',
|
|
'lastSync',
|
|
'syncEnabled'
|
|
];
|
|
|
|
// 키 동시에 삭제 (성능 최적화)
|
|
keysToRemove.forEach(key => {
|
|
console.log(`삭제 중: ${key}`);
|
|
localStorage.removeItem(key);
|
|
localStorage.removeItem(`${key}_backup`); // 백업 키도 함께 삭제
|
|
});
|
|
|
|
// 기본값으로 초기화 - 한번에 처리
|
|
const defaultData = {
|
|
transactions: JSON.stringify([]),
|
|
budgetData: JSON.stringify({
|
|
daily: {targetAmount: 0, spentAmount: 0, remainingAmount: 0},
|
|
weekly: {targetAmount: 0, spentAmount: 0, remainingAmount: 0},
|
|
monthly: {targetAmount: 0, spentAmount: 0, remainingAmount: 0}
|
|
}),
|
|
categoryBudgets: JSON.stringify({
|
|
식비: 0,
|
|
교통비: 0,
|
|
생활비: 0
|
|
})
|
|
};
|
|
|
|
// 모든 기본값 한번에 설정
|
|
Object.entries(defaultData).forEach(([key, value]) => {
|
|
localStorage.setItem(key, value);
|
|
localStorage.setItem(`${key}_backup`, value);
|
|
});
|
|
|
|
// 사용자 설정 값 복원
|
|
if (dontShowWelcomeValue) {
|
|
localStorage.setItem('dontShowWelcome', dontShowWelcomeValue);
|
|
}
|
|
|
|
if (hasVisitedBefore) {
|
|
localStorage.setItem('hasVisitedBefore', hasVisitedBefore);
|
|
}
|
|
|
|
// 로그인 상태 복원
|
|
if (authSession) {
|
|
localStorage.setItem('authSession', authSession);
|
|
}
|
|
|
|
if (sbAuth) {
|
|
localStorage.setItem('sb-auth-token', sbAuth);
|
|
}
|
|
|
|
if (supabase) {
|
|
localStorage.setItem('supabase.auth.token', supabase);
|
|
}
|
|
|
|
// 동기화 설정은 무조건 OFF로 설정
|
|
localStorage.setItem('syncEnabled', 'false');
|
|
console.log('동기화 설정이 OFF로 변경되었습니다');
|
|
|
|
// 모든 이벤트 한 번에 발생 (성능 최적화)
|
|
const events = [
|
|
new Event('transactionUpdated'),
|
|
new Event('budgetDataUpdated'),
|
|
new Event('categoryBudgetsUpdated'),
|
|
new StorageEvent('storage'),
|
|
new Event('auth-state-changed')
|
|
];
|
|
|
|
events.forEach(event => window.dispatchEvent(event));
|
|
|
|
console.log('모든 저장소 데이터가 완전히 초기화되었습니다. (동기화 설정이 OFF로 변경됨)');
|
|
} catch (error) {
|
|
console.error('데이터 초기화 중 오류:', error);
|
|
}
|
|
};
|