import { MutableRefObject } from 'react'; import { Transaction } from '@/components/TransactionCard'; import { saveTransactionsToStorage } from '../../storageUtils'; import { deleteTransactionFromServer } from '@/utils/sync/transaction/deleteTransaction'; import { toast } from '@/hooks/useToast.wrapper'; /** * 스토리지 및 Supabase 삭제 처리 - 안정성 개선 버전 */ export const handleDeleteStorage = ( updatedTransactions: Transaction[], id: string, user: any, pendingDeletionRef: MutableRefObject> ): Promise => { return new Promise((resolve) => { try { // 즉시 로컬 저장소 업데이트 (가장 중요한 부분) try { saveTransactionsToStorage(updatedTransactions); console.log('로컬 스토리지에서 트랜잭션 삭제 완료 (ID: ' + id + ')'); } catch (storageError) { console.error('로컬 스토리지 저장 실패:', storageError); } // 삭제 완료 상태로 업데이트 (pending 제거) pendingDeletionRef.current.delete(id); // 로그인된 경우에만 서버 동기화 시도 if (user && user.id) { try { // 비동기 작업 실행 (결과 기다리지 않음) deleteTransactionFromServer(user.id, id) .then(() => { console.log('서버 삭제 완료:', id); }) .catch(serverError => { console.error('서버 삭제 실패 (무시됨):', serverError); }); } catch (syncError) { console.error('서버 동기화 요청 실패 (무시됨):', syncError); } } // 항상 성공으로 간주 (UI 응답성 우선) resolve(true); } catch (error) { console.error('트랜잭션 삭제 스토리지 전체 오류:', error); // 안전하게 pending 상태 제거 if (pendingDeletionRef.current.has(id)) { pendingDeletionRef.current.delete(id); } // 심각한 오류 발생해도 UI는 이미 업데이트되었으므로 성공 반환 resolve(true); } }); };