11import { NextResponse , type NextRequest } from "next/server" ;
2- import { connectToDatabase } from "@/lib/mongoose" ;
2+ import { connectToDatabase } from "@/lib/database/ mongoose" ;
33import Paper from "@/db/papers" ;
44import { type IPaper } from "@/interface" ;
5+ import { escapeRegExp } from "@/lib/utils/regex" ;
6+ import { extractUniqueValues } from "@/lib/utils/paper-aggregation" ;
57
68export const dynamic = "force-dynamic" ;
79
@@ -10,10 +12,6 @@ export async function GET(req: NextRequest) {
1012 await connectToDatabase ( ) ;
1113 const url = req . nextUrl . searchParams ;
1214 const subject = url . get ( "subject" ) ;
13- const escapeRegExp = ( text : string ) => {
14- return text . replace ( / [ . * + ? ^ $ { } ( ) | [ \] \\ ] / g, "\\$&" ) ;
15- } ;
16- const escapedSubject = escapeRegExp ( subject ?? "" ) ;
1715
1816 if ( ! subject ) {
1917 return NextResponse . json (
@@ -22,42 +20,17 @@ export async function GET(req: NextRequest) {
2220 ) ;
2321 }
2422
23+ const escapedSubject = escapeRegExp ( subject ) ;
2524 const papers : IPaper [ ] = await Paper . find ( {
2625 subject : { $regex : new RegExp ( `${ escapedSubject } ` , "i" ) } ,
2726 } ) ;
2827
29- if ( papers . length === 0 ) {
30- return NextResponse . json (
31- {
32- papers,
33- unique_years : [ ] ,
34- unique_slots : [ ] ,
35- unique_exams : [ ] ,
36- unique_campuses : [ ] ,
37- unique_semesters : [ ] ,
38- } ,
39- { status : 200 } ,
40- ) ;
41- }
42-
43- const unique_years = Array . from ( new Set ( papers . map ( ( paper ) => paper . year ) ) ) ;
44- const unique_slots = Array . from ( new Set ( papers . map ( ( paper ) => paper . slot ) ) ) ;
45- const unique_exams = Array . from ( new Set ( papers . map ( ( paper ) => paper . exam ) ) ) ;
46- const unique_campuses = Array . from (
47- new Set ( papers . map ( ( paper ) => paper . campus ) ) ,
48- ) ;
49- const unique_semesters = Array . from (
50- new Set ( papers . map ( ( paper ) => paper . semester ) ) ,
51- ) ;
28+ const uniqueValues = extractUniqueValues ( papers ) ;
5229
5330 return NextResponse . json (
5431 {
5532 papers,
56- unique_years,
57- unique_slots,
58- unique_exams,
59- unique_campuses,
60- unique_semesters,
33+ ...uniqueValues ,
6134 } ,
6235 { status : 200 } ,
6336 ) ;
@@ -67,4 +40,4 @@ export async function GET(req: NextRequest) {
6740 { status : 500 } ,
6841 ) ;
6942 }
70- }
43+ }
0 commit comments