Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,4 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
package-lock.json
7 changes: 5 additions & 2 deletions components/NewExpense.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,9 @@ const formSchema = z.object({
expenseName: z
.string()
.min(2, { message: "Expense name must be at least 2 characters long" }),
amount: z.coerce.number({ message: "Amount must be a number" }),
amount: z.coerce
.number({ message: "Amount must be a number" })
.positive({ message: "Amount must be greater than 0" }),
paymentMethod: z.string(),
})
),
Expand Down Expand Up @@ -117,9 +119,10 @@ function NewExpense({ type, expense }: props) {
name: data.expenses[0].expenseName,
amount: data.expenses[0].amount,
paymentMethod: data.expenses[0].paymentMethod,
createdAt: data.date,
createdAt: adjustedDate,
path,
});
router.refresh();
} catch (error) {
console.error("⚠️Error updating expense: ", error);
}
Expand Down
27 changes: 15 additions & 12 deletions lib/actions/expense.action.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"use server";

import Expense from "@/database/expense.model";
import { startOfDay, subDays } from "date-fns";
import { revalidatePath } from "next/cache";
import { connectToDatabase } from "../mongoose";
import {
Expand All @@ -24,7 +25,8 @@ export async function createExpense(params: CreateExpenseParams) {
await Expense.insertMany(expenseDocs);
revalidatePath(path);
} catch (error) {
console.log("⚠️Error creating expense");
console.error("⚠️Error creating expense:", error);
throw error;
}
}

Expand All @@ -36,11 +38,12 @@ export async function updateExpense(params: UpdateExpenseParams) {
name,
amount,
paymentMethod,
createdAt, // Assuming you want to update the createdAt to now
createdAt,
});
revalidatePath(path);
} catch (error) {
console.log("⚠️Error updating expense");
console.error("⚠️Error updating expense:", error);
throw error;
}
}

Expand All @@ -51,7 +54,8 @@ export async function deleteExpense(params: DeleteExpenseParams) {
await Expense.findByIdAndDelete(expenseId);
revalidatePath(path);
} catch (error) {
console.log("⚠️Error deleting expense");
console.error("⚠️Error deleting expense:", error);
throw error;
}
}

Expand All @@ -77,33 +81,32 @@ export async function getExpenses(params: GetExpensesParams) {
]);
return JSON.parse(JSON.stringify(expenses));
} catch (error) {
console.log("⚠️Error getting expenses");
console.error("⚠️Error getting expenses:", error);
throw error;
}
}

export async function getLast7DaysExpenses(user: string) {
try {
await connectToDatabase();
const today = new Date();
const sevenDaysAgo = startOfDay(subDays(today, 6));
const expenses = await Expense.aggregate([
{
$match: {
user: user,
createdAt: {
$gte: new Date(
today.getFullYear(),
today.getMonth(),
today.getDate() - 6
),
$gte: sevenDaysAgo,
},
},
},
{
$sort: { _id: 1 },
$sort: { createdAt: 1 },
},
]);
return JSON.parse(JSON.stringify(expenses));
} catch (error) {
console.log("⚠️Error getting last 7 days expenses");
console.error("⚠️Error getting last 7 days expenses:", error);
throw error;
}
}
20 changes: 11 additions & 9 deletions lib/actions/user.action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,52 +11,54 @@ import {

export async function createUser(userData: CreateUserParams) {
try {
connectToDatabase();
await connectToDatabase();
const newUser = await User.create(userData);
return JSON.parse(JSON.stringify(newUser));
} catch (error) {
console.error("Error creating user: ", error);
throw error;
}
}

export async function updateUser(userData: UpdateUserParams) {
try {
connectToDatabase();
await connectToDatabase();
const { clerkId, updateData} = userData;
await User.findOneAndUpdate({ clerkId }, updateData, { new: true });
} catch (error) {
console.error("Error updating user: ", error);
throw error;
}
}

export async function deleteUser(params: DeleteUserParams) {
try {
connectToDatabase();
await connectToDatabase();
const { clerkId } = params;

await Expense.deleteMany({ user: clerkId });

const user = await User.findOneAndDelete({ clerkId });

if (!user) {
throw new Error("User not found");
}

await Expense.deleteMany({ user: user._id });

await User.findByIdAndDelete(user._id);

return user;
} catch (error) {
console.error("Error deleting user: ", error);
throw error;
}
}

export async function getUserById(params: any) {
export async function getUserById(params: { userId: string }) {
try {
connectToDatabase();
await connectToDatabase();
const { userId } = params;
const user = await User.findOne({ clerkId: userId });
return JSON.parse(JSON.stringify(user));
} catch (error) {
console.error("⚠️Error getting user by ID: ", error);
throw error;
}
}
2 changes: 1 addition & 1 deletion lib/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export async function generateLast7DaysData(

const chartData = [];

for (let i = 30; i >= 0; i--) {
for (let i = 6; i >= 0; i--) {
const targetDate = subDays(today, i);
const dateKey = format(targetDate, "MMM dd");
const lookupKey = format(targetDate, "yyyy-MM-dd");
Expand Down
Loading