Skip to content

Commit efa28e2

Browse files
committed
refactor: refactored 3 api endpoints to seperate logic between controller and services
1 parent a461ee6 commit efa28e2

File tree

5 files changed

+53
-40
lines changed

5 files changed

+53
-40
lines changed

src/app/api/course-list/route.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
import { NextResponse } from "next/server";
2-
import { connectToDatabase } from "@/lib/database/mongoose";
3-
import { Course } from "@/db/course";
2+
import { getCourseList } from "@/lib/services/subject";
43

54
export const dynamic = "force-dynamic";
65

76
export async function GET() {
87
try {
9-
await connectToDatabase();
10-
const courses = await Course.find().lean();
11-
8+
const courses = await getCourseList();
129
return NextResponse.json(courses, { status: 200 });
1310
} catch (error) {
1411
console.error(error);

src/app/api/paper-by-id/[id]/route.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,16 @@
11
import { NextResponse } from "next/server";
2-
import { connectToDatabase } from "@/lib/database/mongoose";
3-
import Paper from "@/db/papers";
42
import { Types } from "mongoose";
3+
import { getPaperById } from "@/lib/services/paper";
54

65
export async function GET(req: Request, { params }: { params: { id: string } }) {
76
try {
8-
await connectToDatabase();
9-
107
const { id } = params;
11-
8+
129
if (!Types.ObjectId.isValid(id)) {
1310
return NextResponse.json({ message: "Invalid paper ID" }, { status: 400 });
1411
}
1512

16-
const paper = await Paper.findById(id);
17-
18-
if (!paper) {
19-
return NextResponse.json({ message: "Paper not found" }, { status: 404 });
20-
}
13+
const paper = await getPaperById(id);
2114

2215
return NextResponse.json(paper, { status: 200 });
2316
} catch (error) {

src/app/api/papers/count/route.ts

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,13 @@
11
import { NextResponse } from "next/server";
2-
import { connectToDatabase } from "@/lib/database/mongoose";
3-
import CourseCount from "@/db/course";
2+
import { getCourseCounts } from "@/lib/services/paper";
43

54
export const dynamic = "force-dynamic";
65

76
export async function GET(req: Request) {
87
try {
9-
await connectToDatabase();
8+
const courseCount = await getCourseCounts();
109

11-
const count = await CourseCount.find().lean();
12-
13-
const formatted = count.map((item) => ({
14-
name: item.name,
15-
count: item.count,
16-
}));
17-
18-
return NextResponse.json(formatted, { status: 200 });
10+
return NextResponse.json(courseCount, { status: 200 });
1911
} catch (error) {
2012
return NextResponse.json(
2113
{ message: "Failed to fetch course counts", error },

src/lib/services/paper.ts

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,48 @@ import { type IPaper } from "@/interface";
33
import { escapeRegExp } from "@/lib/utils/regex";
44
import { extractUniqueValues } from "@/lib/utils/paper-aggregation";
55
import { connectToDatabase } from "../database/mongoose";
6+
import CourseCount from "@/db/course";
67

78
export async function getPapersBySubject(subject: string) {
8-
if (!subject){
9-
throw new Error("Subject query parameter is required");
10-
}
9+
if (!subject){
10+
throw new Error("Subject query parameter is required");
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+
});
1118

12-
await connectToDatabase();
13-
14-
const escapedSubject = escapeRegExp(subject);
15-
const papers: IPaper[] = await Paper.find({
16-
subject: { $regex: new RegExp(`${escapedSubject}`, "i") },
17-
});
19+
const uniqueValues = extractUniqueValues(papers);
1820

19-
const uniqueValues = extractUniqueValues(papers);
21+
return {
22+
papers,
23+
...uniqueValues,
24+
}
2025

21-
return {
22-
papers,
23-
...uniqueValues,
24-
}
26+
}
2527

28+
export async function getPaperById(id: string) {
29+
await connectToDatabase();
30+
const paper = await Paper.findById(id);
31+
32+
if (!paper) {
33+
throw new Error("Paper not found"); // 404
34+
}
35+
36+
return paper;
37+
}
38+
39+
export async function getCourseCounts(){
40+
await connectToDatabase();
41+
42+
const count = await CourseCount.find().lean();
43+
44+
const formatted = count.map((item) => ({
45+
name: item.name,
46+
count: item.count,
47+
}));
48+
49+
return formatted;
2650
}

src/lib/services/subject.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { connectToDatabase } from "@/lib/database/mongoose";
2+
import { Course } from "@/db/course";
3+
4+
export async function getCourseList(){
5+
await connectToDatabase();
6+
return await Course.find().lean();
7+
}

0 commit comments

Comments
 (0)