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