Files
zellyy-finance/src/utils/categoryBudgetUtils.ts
gpt-engineer-app[bot] af52ec897f Execute SQL queries
Run the provided SQL queries to create tables.
2025-03-15 16:34:20 +00:00

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;
}
};