Update last sync time

Ensure the last sync time is updated after adding a budget.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-22 06:18:55 +00:00
parent 0d49c4b8ae
commit eb25423b27
5 changed files with 110 additions and 43 deletions

View File

@@ -3,7 +3,7 @@
* 데이터 동기화 메인 모듈
*/
import { isSyncEnabled } from './config';
import { setLastSyncTime } from './time';
import { setLastSyncTime } from '../syncUtils';
import {
BackupData,
SyncResult,
@@ -107,15 +107,20 @@ export const syncAllData = async (userId: string): Promise<SyncResult> => {
// 전체 성공 여부 설정
result.success = result.uploadSuccess || result.downloadSuccess;
// 동기화 시간 기록
// 동기화 시간 기록 - 추가 디버깅 로그 및 중요 부분
if (result.success) {
setLastSyncTime(new Date().toISOString());
const currentTime = new Date().toISOString();
console.log('동기화 성공, 시간 업데이트:', currentTime);
setLastSyncTime(currentTime);
} else {
console.log('동기화 실패, 시간 업데이트 안함');
}
console.log('데이터 동기화 결과:', result);
return result;
} catch (error) {
// 오류 발생 시 백업 데이터 복원
console.error('동기화 중 오류 발생:', error);
recoverFromSyncError(backup, error);
return result;

View File

@@ -1,41 +1,74 @@
// 편의를 위한 인덱스 파일
// 동기화 관련 설정 관리
// sync 디렉토리의 함수들 내보내기
export * from './sync/data';
export * from './sync/time';
export * from './sync/transaction';
export * from './sync/budget';
export * from './sync/clearCloudData';
// 설정 관련 함수들 내보내기 - 이름 충돌 방지를 위해 명시적으로 내보내기
export {
isSyncEnabled,
setSyncEnabled,
initSyncSettings
} from './sync/config';
// 동기화 상태 초기화 함수 추가
export const initSyncState = async (): Promise<void> => {
/**
* 동기화 활성화 여부 확인
*/
export const isSyncEnabled = (): boolean => {
try {
// 동기화 설정 초기화
const { initSyncSettings } = await import('./sync/config');
initSyncSettings();
console.log('동기화 설정 초기화 완료');
// 네트워크 상태 모니터링 시작
window.addEventListener('online', () => {
console.log('네트워크 연결됨');
window.dispatchEvent(new Event('networkStatusChanged'));
});
window.addEventListener('offline', () => {
console.log('네트워크 연결 끊김');
window.dispatchEvent(new Event('networkStatusChanged'));
});
console.log('네트워크 모니터링 시작됨');
const value = localStorage.getItem('syncEnabled');
return value === 'true';
} catch (error) {
console.error('동기화 상태 초기화 오류:', error);
console.error('동기화 설정 조회 오류:', error);
return false;
}
};
/**
* 동기화 설정 변경
*/
export const setSyncEnabled = (enabled: boolean): void => {
try {
localStorage.setItem('syncEnabled', enabled ? 'true' : 'false');
// 상태 변경 이벤트 발생
window.dispatchEvent(new Event('syncSettingChanged'));
window.dispatchEvent(new StorageEvent('storage', {
key: 'syncEnabled',
newValue: enabled ? 'true' : 'false'
}));
console.log('동기화 설정이 변경되었습니다:', enabled ? '활성화' : '비활성화');
} catch (error) {
console.error('동기화 설정 변경 오류:', error);
}
};
/**
* 동기화 설정 초기화
*/
export const initSyncSettings = (): void => {
// 이미 설정이 있으면 초기화하지 않음
if (localStorage.getItem('syncEnabled') === null) {
setSyncEnabled(false); // 기본값: 비활성화
}
console.log('동기화 설정 초기화 완료, 현재 상태:', isSyncEnabled() ? '활성화' : '비활성화');
};
/**
* 마지막 동기화 시간 가져오기
*/
export const getLastSyncTime = (): string | null => {
return localStorage.getItem('lastSync');
};
/**
* 마지막 동기화 시간 설정
*/
export const setLastSyncTime = (timestamp: string): void => {
console.log('마지막 동기화 시간 업데이트:', timestamp);
localStorage.setItem('lastSync', timestamp);
// 이벤트 발생 - 커스텀 이벤트로 변경하여 디버깅 용이하게
try {
const event = new CustomEvent('syncTimeUpdated', {
detail: { time: timestamp }
});
window.dispatchEvent(event);
console.log('syncTimeUpdated 이벤트 발생 완료');
} catch (error) {
console.error('동기화 시간 이벤트 발생 오류:', error);
}
};
// syncUtils.ts에서 사용하던 함수들도 여기로 통합
export { trySyncAllData } from './sync/data';
export type { SyncResult } from './sync/data';