import Link from "next/link"; import { and, desc, eq, isNull, sql, count } from "drizzle-orm"; import { auth } from "@/auth"; import { db } from "@/lib/db/client"; import { memories, projects } from "@/lib/db/schema"; import { Container, PageHeader } from "@/app/_components/ui/container"; import { Card, CardBody, CardHeader } from "@/app/_components/ui/card"; import { Badge } from "@/app/_components/ui/badge"; import { Button } from "@/app/_components/ui/button"; import { EmptyState } from "@/app/_components/ui/empty-state"; export const dynamic = "force-dynamic"; export default async function DashboardPage() { const session = await auth(); const userId = session!.user.id; const [counts, recent, topProjects] = await Promise.all([ db .select({ total: count(memories.id), }) .from(memories) .where(and(eq(memories.userId, userId), isNull(memories.deletedAt))), db .select({ id: memories.id, content: memories.content, scope: memories.scope, tags: memories.tags, createdAt: memories.createdAt, projectKey: projects.key, }) .from(memories) .leftJoin(projects, eq(memories.projectId, projects.id)) .where(and(eq(memories.userId, userId), isNull(memories.deletedAt))) .orderBy(desc(memories.createdAt)) .limit(5), db .select({ id: projects.id, key: projects.key, displayName: projects.displayName, memoryCount: sql`count(${memories.id})::int`, }) .from(projects) .leftJoin( memories, and(eq(memories.projectId, projects.id), isNull(memories.deletedAt)), ) .where(eq(projects.userId, userId)) .groupBy(projects.id) .orderBy(desc(sql`count(${memories.id})`)) .limit(4), ]); const memoryTotal = counts[0]?.total ?? 0; return ( } />

Recent

{recent.length === 0 ? ( } /> ) : ( recent.map((m) => (
{m.scope} {m.projectKey ? · {m.projectKey} : null} {new Date(m.createdAt).toLocaleDateString()}

{m.content}

{m.tags.length ? (
{m.tags.slice(0, 6).map((t) => ( {t} ))}
) : null}
)) )}

Projects

{topProjects.length === 0 ? (

No projects yet.

) : ( {topProjects.map((p, i) => ( 0 ? "border-t border-border" : ""}`} >
{p.key} {p.memoryCount}
{p.displayName && p.displayName !== p.key ? ( {p.displayName} ) : null} ))} All projects →
)}
); }