pipedrive / src /app /api /search /route.ts
ppEmiliano's picture
Add full CRM application with HF Spaces Docker deployment
ea8dde3
Raw
History Blame Contribute Delete
1.97 kB
import { NextRequest, NextResponse } from "next/server";
import { db } from "@/lib/db";
import { deals, contacts, companies } from "@/lib/db/schema";
import { auth } from "@/lib/auth";
import { eq } from "drizzle-orm";
export async function GET(req: NextRequest) {
const session = await auth();
if (!session?.user?.id) return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
const q = (req.nextUrl.searchParams.get("q") || "").toLowerCase();
if (q.length < 2) return NextResponse.json([]);
const userId = parseInt(session.user.id);
const allDeals = db.select().from(deals).where(eq(deals.userId, userId)).all();
const allContacts = db.select().from(contacts).where(eq(contacts.userId, userId)).all();
const allCompanies = db.select().from(companies).where(eq(companies.userId, userId)).all();
const results: { id: number; type: string; title: string; subtitle: string }[] = [];
allDeals
.filter((d) => d.title.toLowerCase().includes(q))
.slice(0, 5)
.forEach((d) =>
results.push({
id: d.id,
type: "deal",
title: d.title,
subtitle: `$${d.value.toLocaleString()} - ${d.status}`,
})
);
allContacts
.filter(
(c) =>
c.firstName.toLowerCase().includes(q) ||
c.lastName.toLowerCase().includes(q) ||
(c.email && c.email.toLowerCase().includes(q))
)
.slice(0, 5)
.forEach((c) =>
results.push({
id: c.id,
type: "contact",
title: `${c.firstName} ${c.lastName}`,
subtitle: c.email || c.jobTitle || "",
})
);
allCompanies
.filter(
(c) =>
c.name.toLowerCase().includes(q) ||
(c.domain && c.domain.toLowerCase().includes(q))
)
.slice(0, 5)
.forEach((c) =>
results.push({
id: c.id,
type: "company",
title: c.name,
subtitle: c.domain || "",
})
);
return NextResponse.json(results.slice(0, 15));
}