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