This commit is contained in:
@@ -5,13 +5,13 @@ import { dbConnect } from '../../../../utils/db';
|
|||||||
|
|
||||||
export const GET: RequestHandler = async ({ url, locals }) => {
|
export const GET: RequestHandler = async ({ url, locals }) => {
|
||||||
const session = await locals.auth();
|
const session = await locals.auth();
|
||||||
|
|
||||||
if (!session || !session.user?.nickname) {
|
if (!session || !session.user?.nickname) {
|
||||||
return json({ error: 'Unauthorized' }, { status: 401 });
|
return json({ error: 'Unauthorized' }, { status: 401 });
|
||||||
}
|
}
|
||||||
|
|
||||||
await dbConnect();
|
await dbConnect();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
// Get query parameters for date range (default to last 12 months)
|
// Get query parameters for date range (default to last 12 months)
|
||||||
@@ -20,10 +20,6 @@ export const GET: RequestHandler = async ({ url, locals }) => {
|
|||||||
const startDate = new Date();
|
const startDate = new Date();
|
||||||
startDate.setMonth(startDate.getMonth() - monthsBack);
|
startDate.setMonth(startDate.getMonth() - monthsBack);
|
||||||
|
|
||||||
// First, let's get all payments and see what we have
|
|
||||||
console.log('Searching for payments for user:', session.user.nickname);
|
|
||||||
console.log('Date range:', startDate.toISOString(), 'to', endDate.toISOString());
|
|
||||||
|
|
||||||
const totalPayments = await Payment.countDocuments();
|
const totalPayments = await Payment.countDocuments();
|
||||||
const paymentsInRange = await Payment.countDocuments({
|
const paymentsInRange = await Payment.countDocuments({
|
||||||
date: {
|
date: {
|
||||||
@@ -36,14 +32,9 @@ export const GET: RequestHandler = async ({ url, locals }) => {
|
|||||||
$gte: startDate,
|
$gte: startDate,
|
||||||
$lte: endDate
|
$lte: endDate
|
||||||
},
|
},
|
||||||
category: { $ne: 'settlement' },
|
category: { $ne: 'settlement' }
|
||||||
$or: [
|
|
||||||
{ paidBy: session.user.nickname },
|
|
||||||
{ createdBy: session.user.nickname }
|
|
||||||
]
|
|
||||||
});
|
});
|
||||||
console.log('Total payments:', totalPayments, 'In date range:', paymentsInRange, 'User expenses:', expensePayments);
|
|
||||||
|
|
||||||
// Aggregate payments by month and category
|
// Aggregate payments by month and category
|
||||||
const pipeline = [
|
const pipeline = [
|
||||||
{
|
{
|
||||||
@@ -54,11 +45,6 @@ export const GET: RequestHandler = async ({ url, locals }) => {
|
|||||||
},
|
},
|
||||||
// Exclude settlements - only show actual expenses
|
// Exclude settlements - only show actual expenses
|
||||||
category: { $ne: 'settlement' },
|
category: { $ne: 'settlement' },
|
||||||
// Only include payments where current user is involved
|
|
||||||
$or: [
|
|
||||||
{ paidBy: session.user.nickname },
|
|
||||||
{ createdBy: session.user.nickname }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -109,20 +95,20 @@ export const GET: RequestHandler = async ({ url, locals }) => {
|
|||||||
results.forEach((result: any) => {
|
results.forEach((result: any) => {
|
||||||
const { yearMonth, category } = result._id;
|
const { yearMonth, category } = result._id;
|
||||||
const amount = result.totalAmount;
|
const amount = result.totalAmount;
|
||||||
|
|
||||||
categories.add(category);
|
categories.add(category);
|
||||||
|
|
||||||
if (!monthsMap.has(yearMonth)) {
|
if (!monthsMap.has(yearMonth)) {
|
||||||
monthsMap.set(yearMonth, {});
|
monthsMap.set(yearMonth, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
monthsMap.get(yearMonth)[category] = amount;
|
monthsMap.get(yearMonth)[category] = amount;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Convert to arrays for Chart.js
|
// Convert to arrays for Chart.js
|
||||||
const months = Array.from(monthsMap.keys()).sort();
|
const months = Array.from(monthsMap.keys()).sort();
|
||||||
const categoryList = Array.from(categories).sort();
|
const categoryList = Array.from(categories).sort();
|
||||||
|
|
||||||
const datasets = categoryList.map((category: string) => ({
|
const datasets = categoryList.map((category: string) => ({
|
||||||
label: category,
|
label: category,
|
||||||
data: months.map(month => monthsMap.get(month)[category] || 0)
|
data: months.map(month => monthsMap.get(month)[category] || 0)
|
||||||
@@ -142,4 +128,4 @@ export const GET: RequestHandler = async ({ url, locals }) => {
|
|||||||
console.error('Error fetching monthly expenses:', error);
|
console.error('Error fetching monthly expenses:', error);
|
||||||
return json({ error: 'Failed to fetch monthly expenses' }, { status: 500 });
|
return json({ error: 'Failed to fetch monthly expenses' }, { status: 500 });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -66,13 +66,11 @@
|
|||||||
async function fetchMonthlyExpenses() {
|
async function fetchMonthlyExpenses() {
|
||||||
try {
|
try {
|
||||||
expensesLoading = true;
|
expensesLoading = true;
|
||||||
console.log('Fetching monthly expenses...');
|
|
||||||
const response = await fetch('/api/cospend/monthly-expenses');
|
const response = await fetch('/api/cospend/monthly-expenses');
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error('Failed to fetch monthly expenses');
|
throw new Error('Failed to fetch monthly expenses');
|
||||||
}
|
}
|
||||||
monthlyExpensesData = await response.json();
|
monthlyExpensesData = await response.json();
|
||||||
console.log('Monthly expenses data:', monthlyExpensesData);
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Error fetching monthly expenses:', err);
|
console.error('Error fetching monthly expenses:', err);
|
||||||
// Don't show this error in the main error state
|
// Don't show this error in the main error state
|
||||||
@@ -170,15 +168,15 @@
|
|||||||
{#if expensesLoading}
|
{#if expensesLoading}
|
||||||
<div class="loading">Loading monthly expenses chart...</div>
|
<div class="loading">Loading monthly expenses chart...</div>
|
||||||
{:else if monthlyExpensesData.datasets && monthlyExpensesData.datasets.length > 0}
|
{:else if monthlyExpensesData.datasets && monthlyExpensesData.datasets.length > 0}
|
||||||
<BarChart
|
<BarChart
|
||||||
data={monthlyExpensesData}
|
data={monthlyExpensesData}
|
||||||
title="Monthly Expenses by Category"
|
title="Monthly Expenses by Category"
|
||||||
height="400px"
|
height="400px"
|
||||||
/>
|
/>
|
||||||
{:else}
|
{:else}
|
||||||
<div class="loading">
|
<div class="loading">
|
||||||
Debug: expensesLoading={expensesLoading},
|
Debug: expensesLoading={expensesLoading},
|
||||||
datasets={monthlyExpensesData.datasets?.length || 0},
|
datasets={monthlyExpensesData.datasets?.length || 0},
|
||||||
data={JSON.stringify(monthlyExpensesData)}
|
data={JSON.stringify(monthlyExpensesData)}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
Reference in New Issue
Block a user