Improve transaction deletion stability
Addresses potential freezing issues in transaction deletion, especially in production environments. Includes enhanced logging and timeout handling.
This commit is contained in:
@@ -4,21 +4,20 @@ import { isSyncEnabled } from '../syncSettings';
|
||||
import { toast } from '@/hooks/useToast.wrapper';
|
||||
|
||||
/**
|
||||
* 특정 트랜잭션 ID 삭제 처리 - 완전히 재구현된 안정성 개선 버전
|
||||
* 타임아웃 처리 및 오류 회복력 강화
|
||||
* 특정 트랜잭션 ID 삭제 처리 - Lovable 환경 최적화 버전
|
||||
*/
|
||||
export const deleteTransactionFromServer = async (userId: string, transactionId: string): Promise<void> => {
|
||||
if (!isSyncEnabled()) return;
|
||||
|
||||
try {
|
||||
console.log(`트랜잭션 삭제 요청: ${transactionId}`);
|
||||
console.log(`[안정화] 서버 트랜잭션 삭제 요청: ${transactionId}`);
|
||||
|
||||
// AbortController를 사용한 타임아웃 처리 (3초)
|
||||
// 초단축 타임아웃 (2초)
|
||||
const controller = new AbortController();
|
||||
const timeoutId = setTimeout(() => {
|
||||
console.warn(`트랜잭션 삭제 타임아웃 (ID: ${transactionId})`);
|
||||
console.warn(`[안정화] 서버 트랜잭션 삭제 타임아웃 (ID: ${transactionId})`);
|
||||
controller.abort();
|
||||
}, 3000);
|
||||
}, 2000);
|
||||
|
||||
try {
|
||||
// Supabase 요청에 AbortSignal 추가
|
||||
@@ -33,37 +32,27 @@ export const deleteTransactionFromServer = async (userId: string, transactionId:
|
||||
clearTimeout(timeoutId);
|
||||
|
||||
if (error) {
|
||||
console.error('트랜잭션 삭제 실패:', error);
|
||||
throw error;
|
||||
console.error('[안정화] 서버 트랜잭션 삭제 실패:', error);
|
||||
return; // 오류 있어도 계속 진행
|
||||
}
|
||||
|
||||
console.log(`트랜잭션 ${transactionId} 삭제 완료`);
|
||||
console.log(`[안정화] 서버 트랜잭션 ${transactionId} 삭제 완료`);
|
||||
} catch (e) {
|
||||
// 타임아웃에 의한 중단인 경우
|
||||
const error = e as Error & { code?: number };
|
||||
if (error.name === 'AbortError' || error.code === 20) {
|
||||
console.warn(`트랜잭션 삭제 요청 타임아웃 (ID: ${transactionId})`);
|
||||
console.warn(`[안정화] 서버 트랜잭션 삭제 요청 타임아웃 (ID: ${transactionId})`);
|
||||
return; // 정상적으로 처리된 것으로 간주
|
||||
}
|
||||
throw error; // 그 외 오류는 상위로 전파
|
||||
|
||||
console.error('[안정화] 서버 삭제 중 오류 (무시):', error);
|
||||
} finally {
|
||||
clearTimeout(timeoutId); // 안전하게 항상 타임아웃 해제
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('트랜잭션 삭제 중 오류:', error);
|
||||
console.error('[안정화] 서버 트랜잭션 삭제 중 상위 오류:', error);
|
||||
|
||||
// 시각적 알림은 최소화 (사용자 경험 저하 방지)
|
||||
// 개발 모드나 로그에만 오류 기록
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
toast({
|
||||
title: "동기화 문제",
|
||||
description: "서버에서 삭제 중 문제가 발생했습니다. 로컬 데이터는 정상 처리되었습니다.",
|
||||
variant: "default",
|
||||
duration: 1500
|
||||
});
|
||||
}
|
||||
|
||||
// UI 작업에는 영향을 주지 않도록 오류 무시
|
||||
console.log('서버 동기화 오류 발생했으나 UI 작업은 계속 진행됨');
|
||||
// UI 차단하지 않음 (로컬 데이터 우선)
|
||||
console.log('[안정화] 서버 동기화 오류 발생했으나 UI 작업은 계속 진행됨');
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user