Update last sync time
Ensure the last sync time is updated after adding a budget.
This commit is contained in:
@@ -46,7 +46,9 @@ export const useManualSync = (user: any) => {
|
|||||||
|
|
||||||
// 동기화 시간 업데이트
|
// 동기화 시간 업데이트
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
setLastSyncTime(new Date().toISOString());
|
const currentTime = new Date().toISOString();
|
||||||
|
console.log('수동 동기화 성공, 시간 업데이트:', currentTime);
|
||||||
|
setLastSyncTime(currentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -54,17 +54,35 @@ export const useSyncStatus = () => {
|
|||||||
|
|
||||||
// 동기화 시간이 변경될 때 상태 업데이트
|
// 동기화 시간이 변경될 때 상태 업데이트
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const updateLastSyncTime = () => {
|
console.log('useSyncStatus 훅 초기화, 현재 마지막 동기화 시간:', lastSync);
|
||||||
setLastSync(getLastSyncTime());
|
|
||||||
|
const updateLastSyncTime = (event?: Event | CustomEvent) => {
|
||||||
|
const newTime = getLastSyncTime();
|
||||||
|
console.log('마지막 동기화 시간 업데이트됨:', newTime, event instanceof CustomEvent ? `(이벤트 상세: ${JSON.stringify(event.detail)})` : '');
|
||||||
|
setLastSync(newTime);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 이벤트 리스너 등록
|
// 이벤트 리스너 등록 - 커스텀 이벤트 사용
|
||||||
window.addEventListener('syncTimeUpdated', updateLastSyncTime);
|
window.addEventListener('syncTimeUpdated', updateLastSyncTime);
|
||||||
|
|
||||||
|
// 스토리지 이벤트도 모니터링
|
||||||
|
const handleStorageChange = (event: StorageEvent) => {
|
||||||
|
if (event.key === 'lastSync' || event.key === null) {
|
||||||
|
console.log('스토리지 변경 감지 (lastSync):', event.newValue);
|
||||||
|
updateLastSyncTime();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.addEventListener('storage', handleStorageChange);
|
||||||
|
|
||||||
|
// 초기 상태 업데이트
|
||||||
|
updateLastSyncTime();
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
window.removeEventListener('syncTimeUpdated', updateLastSyncTime);
|
window.removeEventListener('syncTimeUpdated', updateLastSyncTime);
|
||||||
|
window.removeEventListener('storage', handleStorageChange);
|
||||||
};
|
};
|
||||||
}, []);
|
}, [lastSync]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
lastSync,
|
lastSync,
|
||||||
|
|||||||
@@ -14,6 +14,15 @@ export const useSyncSettings = () => {
|
|||||||
const { syncing, handleManualSync } = useManualSync(user);
|
const { syncing, handleManualSync } = useManualSync(user);
|
||||||
const { lastSync, formatLastSyncTime } = useSyncStatus();
|
const { lastSync, formatLastSyncTime } = useSyncStatus();
|
||||||
|
|
||||||
|
// 콘솔에 상태 기록
|
||||||
|
useEffect(() => {
|
||||||
|
console.log(`[동기화설정] 상태 변경:
|
||||||
|
- 활성화: ${enabled ? '예' : '아니오'}
|
||||||
|
- 진행중: ${syncing ? '예' : '아니오'}
|
||||||
|
- 마지막동기화: ${lastSync || '없음'}
|
||||||
|
- 사용자: ${user ? '로그인됨' : '로그인안됨'}`);
|
||||||
|
}, [enabled, syncing, lastSync, user]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
enabled,
|
enabled,
|
||||||
syncing,
|
syncing,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
* 데이터 동기화 메인 모듈
|
* 데이터 동기화 메인 모듈
|
||||||
*/
|
*/
|
||||||
import { isSyncEnabled } from './config';
|
import { isSyncEnabled } from './config';
|
||||||
import { setLastSyncTime } from './time';
|
import { setLastSyncTime } from '../syncUtils';
|
||||||
import {
|
import {
|
||||||
BackupData,
|
BackupData,
|
||||||
SyncResult,
|
SyncResult,
|
||||||
@@ -107,15 +107,20 @@ export const syncAllData = async (userId: string): Promise<SyncResult> => {
|
|||||||
// 전체 성공 여부 설정
|
// 전체 성공 여부 설정
|
||||||
result.success = result.uploadSuccess || result.downloadSuccess;
|
result.success = result.uploadSuccess || result.downloadSuccess;
|
||||||
|
|
||||||
// 동기화 시간 기록
|
// 동기화 시간 기록 - 추가 디버깅 로그 및 중요 부분
|
||||||
if (result.success) {
|
if (result.success) {
|
||||||
setLastSyncTime(new Date().toISOString());
|
const currentTime = new Date().toISOString();
|
||||||
|
console.log('동기화 성공, 시간 업데이트:', currentTime);
|
||||||
|
setLastSyncTime(currentTime);
|
||||||
|
} else {
|
||||||
|
console.log('동기화 실패, 시간 업데이트 안함');
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('데이터 동기화 결과:', result);
|
console.log('데이터 동기화 결과:', result);
|
||||||
return result;
|
return result;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// 오류 발생 시 백업 데이터 복원
|
// 오류 발생 시 백업 데이터 복원
|
||||||
|
console.error('동기화 중 오류 발생:', error);
|
||||||
recoverFromSyncError(backup, error);
|
recoverFromSyncError(backup, error);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -1,41 +1,74 @@
|
|||||||
|
|
||||||
// 편의를 위한 인덱스 파일
|
// 동기화 관련 설정 관리
|
||||||
|
|
||||||
// sync 디렉토리의 함수들 내보내기
|
/**
|
||||||
export * from './sync/data';
|
* 동기화 활성화 여부 확인
|
||||||
export * from './sync/time';
|
*/
|
||||||
export * from './sync/transaction';
|
export const isSyncEnabled = (): boolean => {
|
||||||
export * from './sync/budget';
|
|
||||||
export * from './sync/clearCloudData';
|
|
||||||
|
|
||||||
// 설정 관련 함수들 내보내기 - 이름 충돌 방지를 위해 명시적으로 내보내기
|
|
||||||
export {
|
|
||||||
isSyncEnabled,
|
|
||||||
setSyncEnabled,
|
|
||||||
initSyncSettings
|
|
||||||
} from './sync/config';
|
|
||||||
|
|
||||||
// 동기화 상태 초기화 함수 추가
|
|
||||||
export const initSyncState = async (): Promise<void> => {
|
|
||||||
try {
|
try {
|
||||||
// 동기화 설정 초기화
|
const value = localStorage.getItem('syncEnabled');
|
||||||
const { initSyncSettings } = await import('./sync/config');
|
return value === 'true';
|
||||||
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('네트워크 모니터링 시작됨');
|
|
||||||
} catch (error) {
|
} 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';
|
||||||
|
|||||||
Reference in New Issue
Block a user