import { and, eq } from "drizzle-orm"; import { type Anotacao, anotacoes } from "@/db/schema"; import { db } from "@/lib/db"; export type Task = { id: string; text: string; completed: boolean; }; export type NoteData = { id: string; title: string; description: string; type: "nota" | "tarefa"; tasks?: Task[]; arquivada: boolean; createdAt: string; }; export async function fetchNotesForUser(userId: string): Promise { const noteRows = await db.query.anotacoes.findMany({ where: and(eq(anotacoes.userId, userId), eq(anotacoes.arquivada, false)), orderBy: ( note: typeof anotacoes.$inferSelect, { desc }: { desc: (field: unknown) => unknown }, ) => [desc(note.createdAt)], }); return noteRows.map((note: Anotacao) => { let tasks: Task[] | undefined; // Parse tasks if they exist if (note.tasks) { try { tasks = JSON.parse(note.tasks); } catch (error) { console.error("Failed to parse tasks for note", note.id, error); tasks = undefined; } } return { id: note.id, title: (note.title ?? "").trim(), description: (note.description ?? "").trim(), type: (note.type ?? "nota") as "nota" | "tarefa", tasks, arquivada: note.arquivada, createdAt: note.createdAt.toISOString(), }; }); } export async function fetchAllNotesForUser( userId: string, ): Promise<{ activeNotes: NoteData[]; archivedNotes: NoteData[] }> { const [activeNotes, archivedNotes] = await Promise.all([ fetchNotesForUser(userId), fetchArquivadasForUser(userId), ]); return { activeNotes, archivedNotes }; } export async function fetchArquivadasForUser( userId: string, ): Promise { const noteRows = await db.query.anotacoes.findMany({ where: and(eq(anotacoes.userId, userId), eq(anotacoes.arquivada, true)), orderBy: ( note: typeof anotacoes.$inferSelect, { desc }: { desc: (field: unknown) => unknown }, ) => [desc(note.createdAt)], }); return noteRows.map((note: Anotacao) => { let tasks: Task[] | undefined; // Parse tasks if they exist if (note.tasks) { try { tasks = JSON.parse(note.tasks); } catch (error) { console.error("Failed to parse tasks for note", note.id, error); tasks = undefined; } } return { id: note.id, title: (note.title ?? "").trim(), description: (note.description ?? "").trim(), type: (note.type ?? "nota") as "nota" | "tarefa", tasks, arquivada: note.arquivada, createdAt: note.createdAt.toISOString(), }; }); }