83 lines
2.1 KiB
TypeScript
83 lines
2.1 KiB
TypeScript
|
|
import { supabase } from '@/lib/supabase';
|
|
import { isSyncEnabled } from '@/utils/syncUtils';
|
|
|
|
/**
|
|
* 카테고리 예산을 Supabase에서 가져오기
|
|
*/
|
|
export const loadCategoryBudgetsFromSupabase = async (userId: string): Promise<Record<string, number> | null> => {
|
|
if (!userId || !isSyncEnabled()) return null;
|
|
|
|
try {
|
|
const { data, error } = await supabase
|
|
.from('category_budgets')
|
|
.select('*')
|
|
.eq('user_id', userId);
|
|
|
|
if (error) {
|
|
console.error('카테고리 예산 조회 오류:', error);
|
|
return null;
|
|
}
|
|
|
|
if (data && data.length > 0) {
|
|
// 데이터를 카테고리->금액 형식의 객체로 변환
|
|
const categoryBudgets: Record<string, number> = {};
|
|
data.forEach(item => {
|
|
categoryBudgets[item.category] = item.amount;
|
|
});
|
|
return categoryBudgets;
|
|
}
|
|
|
|
return null;
|
|
} catch (error) {
|
|
console.error('카테고리 예산 로드 오류:', error);
|
|
return null;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* 카테고리 예산을 Supabase에 저장
|
|
*/
|
|
export const saveCategoryBudgetsToSupabase = async (
|
|
userId: string,
|
|
categoryBudgets: Record<string, number>
|
|
): Promise<boolean> => {
|
|
if (!userId || !isSyncEnabled()) return false;
|
|
|
|
try {
|
|
// 기존 데이터 삭제 (다시 추가하기 위해)
|
|
const { error: deleteError } = await supabase
|
|
.from('category_budgets')
|
|
.delete()
|
|
.eq('user_id', userId);
|
|
|
|
if (deleteError) {
|
|
console.error('카테고리 예산 삭제 오류:', deleteError);
|
|
return false;
|
|
}
|
|
|
|
// 새 데이터 추가
|
|
const budgetEntries = Object.entries(categoryBudgets).map(([category, amount]) => ({
|
|
user_id: userId,
|
|
category,
|
|
amount
|
|
}));
|
|
|
|
if (budgetEntries.length === 0) return true;
|
|
|
|
const { error } = await supabase
|
|
.from('category_budgets')
|
|
.insert(budgetEntries);
|
|
|
|
if (error) {
|
|
console.error('카테고리 예산 추가 오류:', error);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
} catch (error) {
|
|
console.error('카테고리 예산 저장 오류:', error);
|
|
return false;
|
|
}
|
|
};
|