Skip to content

Commit 43a8d61

Browse files
Merge pull request #435 from Gslmao/feature/logic-sep
Logic seperation
2 parents ad392cb + 3f98f46 commit 43a8d61

2 files changed

Lines changed: 38 additions & 25 deletions

File tree

src/app/api/papers/route.ts

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,29 @@
11
import { NextResponse, type NextRequest } from "next/server";
2-
import { connectToDatabase } from "@/lib/database/mongoose";
3-
import Paper from "@/db/papers";
4-
import { type IPaper } from "@/interface";
5-
import { escapeRegExp } from "@/lib/utils/regex";
6-
import { extractUniqueValues } from "@/lib/utils/paper-aggregation";
2+
import { getPapersBySubject } from "@/lib/services/paper";
73

84
export const dynamic = "force-dynamic";
95

106
export async function GET(req: NextRequest) {
117
try {
12-
await connectToDatabase();
13-
const url = req.nextUrl.searchParams;
14-
const subject = url.get("subject");
15-
16-
if (!subject) {
17-
return NextResponse.json(
18-
{ message: "Subject query parameter is required" },
19-
{ status: 400 },
20-
);
21-
}
228

23-
const escapedSubject = escapeRegExp(subject);
24-
const papers: IPaper[] = await Paper.find({
25-
subject: { $regex: new RegExp(`${escapedSubject}`, "i") },
26-
});
9+
const url = req.nextUrl.searchParams;
10+
const sub = url.get("subject");
2711

28-
const uniqueValues = extractUniqueValues(papers);
12+
const paper = await getPapersBySubject(sub as string);
2913

3014
return NextResponse.json(
31-
{
32-
papers,
33-
...uniqueValues,
34-
},
15+
paper,
3516
{ status: 200 },
3617
);
3718
} catch (error) {
19+
if (error instanceof Error) {
20+
return NextResponse.json(
21+
{ message: "Failed to fetch papers", error: error.message },
22+
{ status: error.message === "Subject query parameter is required" ? 400 : 500 },
23+
);
24+
}
3825
return NextResponse.json(
39-
{ message: "Failed to fetch papers", error },
26+
{ message: "Failed to fetch papers", error},
4027
{ status: 500 },
4128
);
4229
}

src/lib/services/paper.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import Paper from "@/db/papers";
2+
import { type IPaper } from "@/interface";
3+
import { escapeRegExp } from "@/lib/utils/regex";
4+
import { extractUniqueValues } from "@/lib/utils/paper-aggregation";
5+
import { connectToDatabase } from "../database/mongoose";
6+
7+
export async function getPapersBySubject(subject: string) {
8+
if (!subject){
9+
throw new Error("Subject query parameter is required");
10+
}
11+
12+
await connectToDatabase();
13+
14+
const escapedSubject = escapeRegExp(subject);
15+
const papers: IPaper[] = await Paper.find({
16+
subject: { $regex: new RegExp(`${escapedSubject}`, "i") },
17+
});
18+
19+
const uniqueValues = extractUniqueValues(papers);
20+
21+
return {
22+
papers,
23+
...uniqueValues,
24+
}
25+
26+
}

0 commit comments

Comments
 (0)