import { NextRequest, NextResponse } from "next/server"; import { headers } from "next/headers"; import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; // Read-only lookup for the admin command menu (Ctrl/⌘+K). const MIN_QUERY = 2; const MAX_QUERY = 100; export async function GET(request: NextRequest) { const session = await auth.api.getSession({ headers: await headers() }); if (!session || session.user.role !== "admin") { return NextResponse.json({ error: "Нет доступа" }, { status: 403 }); } const q = (request.nextUrl.searchParams.get("q") ?? "").trim().slice(0, MAX_QUERY); if (q.length < MIN_QUERY) { return NextResponse.json({ users: [], courses: [], lessons: [] }); } const contains = { contains: q, mode: "insensitive" as const }; const [users, courses, lessons] = await Promise.all([ prisma.user.findMany({ where: { OR: [{ name: contains }, { email: contains }] }, select: { id: true, name: true, email: true, role: true }, orderBy: { createdAt: "desc" }, take: 8, }), prisma.course.findMany({ where: { OR: [{ title: contains }, { slug: contains }] }, select: { id: true, title: true, slug: true, published: true }, orderBy: { order: "asc" }, take: 6, }), prisma.lesson.findMany({ where: { title: contains }, select: { id: true, title: true, published: true, module: { select: { id: true, courseId: true, course: { select: { title: true } } } }, }, orderBy: { updatedAt: "desc" }, take: 8, }), ]); return NextResponse.json({ users, courses, lessons: lessons.map((l) => ({ id: l.id, title: l.title, published: l.published, moduleId: l.module.id, courseId: l.module.courseId, courseTitle: l.module.course.title, })), }); }