Investigate data reset issue
Investigate why data is not fully reset when sync is enabled.
This commit is contained in:
@@ -13,41 +13,80 @@ export const clearCloudData = async (userId: string): Promise<boolean> => {
|
||||
console.log('클라우드 데이터 초기화 시작');
|
||||
|
||||
try {
|
||||
// 모든 트랜잭션 삭제
|
||||
const { error: transactionsError } = await supabase
|
||||
.from('transactions')
|
||||
.delete()
|
||||
.eq('user_id', userId);
|
||||
|
||||
if (transactionsError) {
|
||||
console.error('트랜잭션 삭제 오류:', transactionsError);
|
||||
return false;
|
||||
}
|
||||
// 모든 테이블에서 사용자 데이터 삭제
|
||||
const tablesToClear = ['transactions', 'category_budgets', 'budgets'];
|
||||
const results = await Promise.allSettled(
|
||||
tablesToClear.map(async (table) => {
|
||||
// 먼저 데이터가 있는지 확인
|
||||
const { data: checkData } = await supabase
|
||||
.from(table)
|
||||
.select('id')
|
||||
.eq('user_id', userId)
|
||||
.limit(1);
|
||||
|
||||
// 데이터가 없으면 삭제를 건너뜀
|
||||
if (!checkData || checkData.length === 0) {
|
||||
console.log(`테이블 ${table}에 삭제할 데이터가 없습니다.`);
|
||||
return true;
|
||||
}
|
||||
|
||||
// 데이터 삭제
|
||||
console.log(`테이블 ${table}에서 사용자 데이터 삭제 시도`);
|
||||
const { error } = await supabase
|
||||
.from(table)
|
||||
.delete()
|
||||
.eq('user_id', userId);
|
||||
|
||||
if (error) {
|
||||
console.error(`테이블 ${table} 데이터 삭제 오류:`, error);
|
||||
return false;
|
||||
}
|
||||
|
||||
console.log(`테이블 ${table} 데이터 삭제 성공`);
|
||||
return true;
|
||||
})
|
||||
);
|
||||
|
||||
// 카테고리 예산 삭제
|
||||
const { error: categoryBudgetsError } = await supabase
|
||||
.from('category_budgets')
|
||||
.delete()
|
||||
.eq('user_id', userId);
|
||||
|
||||
if (categoryBudgetsError) {
|
||||
console.error('카테고리 예산 삭제 오류:', categoryBudgetsError);
|
||||
return false;
|
||||
}
|
||||
// 삭제 확인을 위해 다시 데이터 조회
|
||||
const verificationResults = await Promise.all(
|
||||
tablesToClear.map(async (table) => {
|
||||
const { data, error } = await supabase
|
||||
.from(table)
|
||||
.select('id')
|
||||
.eq('user_id', userId);
|
||||
|
||||
if (error) {
|
||||
console.error(`테이블 ${table} 검증 오류:`, error);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 남아있는 데이터가 있는지 확인
|
||||
const isEmpty = !data || data.length === 0;
|
||||
console.log(`테이블 ${table} 검증 결과: ${isEmpty ? '비어있음' : `${data.length}개 항목 남아있음`}`);
|
||||
|
||||
if (!isEmpty) {
|
||||
// 한 번 더 삭제 시도
|
||||
console.log(`테이블 ${table}에 데이터가 남아있어 다시 삭제 시도`);
|
||||
const { error: retryError } = await supabase
|
||||
.from(table)
|
||||
.delete()
|
||||
.eq('user_id', userId);
|
||||
|
||||
if (retryError) {
|
||||
console.error(`테이블 ${table} 재삭제 오류:`, retryError);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return isEmpty;
|
||||
})
|
||||
);
|
||||
|
||||
// 예산 삭제
|
||||
const { error: budgetsError } = await supabase
|
||||
.from('budgets')
|
||||
.delete()
|
||||
.eq('user_id', userId);
|
||||
|
||||
if (budgetsError) {
|
||||
console.error('예산 삭제 오류:', budgetsError);
|
||||
return false;
|
||||
}
|
||||
// 모든 테이블이 성공적으로 삭제되었는지 확인
|
||||
const allTablesCleared = verificationResults.every(result => result === true);
|
||||
|
||||
console.log('클라우드 데이터 초기화 완료');
|
||||
return true;
|
||||
console.log('클라우드 데이터 초기화 완료, 결과:', allTablesCleared ? '성공' : '일부 실패');
|
||||
return allTablesCleared;
|
||||
} catch (error) {
|
||||
console.error('클라우드 데이터 초기화 중 오류 발생:', error);
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user