import type { NextApiRequest, NextApiResponse } from 'next' import { prisma } from '@/lib/prisma' import { requireAuth } from '@/lib/auth' const STOPWORDS = new Set(['from', 'with', 'during', 'this', 'that', 'were', 'found', 'units', 'batch', 'final', 'client', 'reported']) export default async function handler(req: NextApiRequest, res: NextApiResponse) { const user = await requireAuth(req, res) if (!user) return if (req.method !== 'GET') return res.status(405).end() const { category, search, similarTo } = req.query // Similar-fix matching: given a description, find resolutions sharing keywords if (similarTo) { const words = (similarTo as string) .toLowerCase() .match(/\b\w{4,}\b/g)?.filter(w => !STOPWORDS.has(w)) || [] if (words.length === 0) return res.json({ data: [] }) const all = await prisma.resolution.findMany({ orderBy: { createdAt: 'desc' } }) const matches = all.filter(r => { const text = (r.title + ' ' + r.resolution).toLowerCase() return words.some(w => text.includes(w)) }) return res.json({ data: matches.slice(0, 3) }) } const where: any = {} if (category) where.category = category as string if (search) { where.OR = [ { title: { contains: search as string, mode: 'insensitive' } }, { resolution: { contains: search as string, mode: 'insensitive' } }, { category: { contains: search as string, mode: 'insensitive' } }, ] } const resolutions = await prisma.resolution.findMany({ where, orderBy: { createdAt: 'desc' } }) return res.json({ data: resolutions }) }