45 lines
1000 B
TypeScript
45 lines
1000 B
TypeScript
import { getAuthenticatedUserId } from '../../utils/auth';
|
|
import { Habit } from '@prisma/client';
|
|
|
|
// DTO to shape the output
|
|
interface HabitCompletionDto {
|
|
date: Date;
|
|
}
|
|
|
|
interface HabitDto {
|
|
id: number;
|
|
name: string;
|
|
daysOfWeek: number[];
|
|
createdAt: Date; // Add createdAt
|
|
completions: HabitCompletionDto[];
|
|
}
|
|
|
|
export default defineEventHandler(async (event): Promise<HabitDto[]> => {
|
|
const userId = getAuthenticatedUserId(event);
|
|
|
|
const habits = await prisma.habit.findMany({
|
|
where: {
|
|
userId: userId,
|
|
},
|
|
include: {
|
|
completions: {
|
|
orderBy: {
|
|
date: 'desc',
|
|
},
|
|
take: 30, // Limit completions to the last 30 for performance
|
|
},
|
|
},
|
|
});
|
|
|
|
// Map to DTOs
|
|
return habits.map((habit: any) => ({
|
|
id: habit.id,
|
|
name: habit.name,
|
|
daysOfWeek: habit.daysOfWeek,
|
|
createdAt: habit.createdAt, // Add createdAt
|
|
completions: habit.completions.map((comp: any) => ({
|
|
date: comp.date,
|
|
})),
|
|
}));
|
|
});
|