Initial commit: LexMind - Plataforma Jurídica Inteligente

This commit is contained in:
bigtux
2026-02-10 15:46:26 -03:00
commit 08bd4f039d
108 changed files with 75782 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
import { NextRequest, NextResponse } from 'next/server'
import { getServerSession } from 'next-auth'
import { authOptions } from '@/lib/auth'
import { prisma } from '@/lib/prisma'
export async function GET(req: NextRequest) {
const session = await getServerSession(authOptions)
if (!session?.user?.id) {
return NextResponse.json({ error: 'Não autorizado' }, { status: 401 })
}
const { searchParams } = new URL(req.url)
const search = searchParams.get('search') || ''
const tribunal = searchParams.get('tribunal') || ''
const area = searchParams.get('area') || ''
const relator = searchParams.get('relator') || ''
const dateFrom = searchParams.get('dateFrom') || ''
const dateTo = searchParams.get('dateTo') || ''
const page = Math.max(1, Math.min(1000, parseInt(searchParams.get('page') || '1', 10) || 1))
const perPage = Math.max(1, Math.min(50, parseInt(searchParams.get('perPage') || '10', 10) || 10))
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const where: any = {}
if (search) {
where.OR = [
{ ementa: { contains: search, mode: 'insensitive' } },
{ numero: { contains: search, mode: 'insensitive' } },
{ relator: { contains: search, mode: 'insensitive' } },
]
}
if (tribunal) {
where.tribunal = tribunal
}
if (area) {
where.area = area
}
if (relator) {
where.relator = { contains: relator, mode: 'insensitive' }
}
if (dateFrom || dateTo) {
// data is stored as string "YYYY-MM-DD"
if (dateFrom) {
where.data = { ...(where.data || {}), gte: dateFrom }
}
if (dateTo) {
where.data = { ...(where.data || {}), lte: dateTo }
}
}
const [total, results] = await Promise.all([
prisma.jurisprudencia.count({ where }),
prisma.jurisprudencia.findMany({
where,
orderBy: { data: 'desc' },
skip: (page - 1) * perPage,
take: perPage,
}),
])
return NextResponse.json({
results,
total,
page,
perPage,
totalPages: Math.ceil(total / perPage),
})
}