Skip to content

Commit c3c72e2

Browse files
authored
Merge pull request #512 from Gslmao-s-Org/Gslmao/backendResp
Consistent Returning of backend responses
2 parents 8fafe23 + 6938b21 commit c3c72e2

28 files changed

Lines changed: 188 additions & 226 deletions

File tree

src/app/actions/get-papers-by-id.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
1-
import { type PaperResponse } from "@/interface";
1+
import type { PaperResponse, ApiResponse } from "@/interface";
22
import axios, { type AxiosResponse } from "axios";
33

44
export const fetchPaperID = async (id: string): Promise<PaperResponse> => {
55
const serverUrl = process.env.SERVER_URL ?? "https://papers.codechefvit.com";
66

77
try {
8-
const response: AxiosResponse<PaperResponse> = await axios.get(
8+
const response: AxiosResponse<ApiResponse<PaperResponse>> = await axios.get(
99
`${serverUrl}/api/paper-by-id/${id}`,
1010
);
11-
return response.data;
11+
12+
if (!response.data.data) {
13+
throw new Error("Paper not found");
14+
}
15+
return response.data.data;
1216
} catch (err: unknown) {
13-
if (axios.isAxiosError(err)) {
14-
console.error("Axios error:", err.response?.data ?? err.message);
15-
const errorMessage =
16-
(err.response?.data as { message?: string })?.message ??
17-
"Failed to fetch paper";
17+
if (axios.isAxiosError<ApiResponse<unknown>>(err)) {
18+
const errorMessage = err.response?.data?.message ?? err.message;
19+
console.error("Axios error:", errorMessage);
1820
throw new Error(errorMessage);
1921
} else {
2022
console.error("Unexpected error:", err);

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
1-
import { NextResponse } from "next/server";
21
import { getCourseList } from "@/lib/services/subject";
2+
import { success, failure } from "@/lib/utils/response";
33

44
export const dynamic = "force-dynamic";
55

66
export async function GET() {
77
try {
88
const courses = await getCourseList();
9-
return NextResponse.json(courses, { status: 200 });
9+
return success(courses);
1010
} catch (error) {
1111
console.error(error);
12-
return NextResponse.json(
13-
{ message: "Failed to fetch courses", error },
14-
{ status: 500 },
15-
);
12+
return failure("Failed to fetch courses", 500);
1613
}
1714
}
Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
1-
import { NextResponse } from "next/server";
21
import { Types } from "mongoose";
32
import { getPaperById } from "@/lib/services/paper";
3+
import { success, failure } from "@/lib/utils/response"
44

55
export async function GET(req: Request, { params }: { params: { id: string } }) {
66
try {
77
const { id } = params;
88

99
if (!Types.ObjectId.isValid(id)) {
10-
return NextResponse.json({ message: "Invalid paper ID" }, { status: 400 });
10+
return failure("Invalid paper ID");
1111
}
12-
1312
const paper = await getPaperById(id);
14-
15-
return NextResponse.json(paper, { status: 200 });
13+
14+
return success(paper);
1615
} catch (error) {
1716
console.error(error);
18-
return NextResponse.json(
19-
{ message: "Failed to fetch paper", error },
20-
{ status: 500 },
21-
);
17+
return failure("Failed to fetch paper", 500);
2218
}
2319
}

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
1-
import { NextResponse } from "next/server";
21
import { getCourseCounts } from "@/lib/services/paper";
2+
import { success, failure } from "@/lib/utils/response";
33

44
export const dynamic = "force-dynamic";
55

66
export async function GET(req: Request) {
77
try {
88
const courseCount = await getCourseCounts();
99

10-
return NextResponse.json(courseCount, { status: 200 });
10+
return success(courseCount);
1111
} catch (error) {
12-
return NextResponse.json(
13-
{ message: "Failed to fetch course counts", error },
14-
{ status: 500 },
15-
);
12+
console.error(error);
13+
return failure("Failed to fetch course counts", 500);
1614
}
1715
}

src/app/api/papers/route.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { NextResponse, type NextRequest } from "next/server";
1+
import { type NextRequest } from "next/server";
22
import { getPapersBySubject } from "@/lib/services/paper";
3+
import { success, failure } from "@/lib/utils/response";
34

45
export const dynamic = "force-dynamic";
56

@@ -8,18 +9,13 @@ export async function GET(req: NextRequest) {
89
const url = req.nextUrl.searchParams;
910
const sub = url.get("subject");
1011
if (!sub) {
11-
return NextResponse.json(
12-
{ message: "Subject query parameter is required" },
13-
{ status: 400 },
14-
);
12+
return failure("Subject query parameter is required");
1513
}
1614
const paper = await getPapersBySubject(sub);
1715

18-
return NextResponse.json(paper, { status: 200 });
16+
return success(paper);
1917
} catch (error) {
20-
return NextResponse.json(
21-
{ message: "Failed to fetch papers", error },
22-
{ status: 500 },
23-
);
18+
console.error(error);
19+
return failure("Failed to fetch papers", 500);
2420
}
2521
}
Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { getRelatedSubjects } from "@/lib/services/subject";
2-
import { NextResponse, type NextRequest } from "next/server";
2+
import { type NextRequest } from "next/server";
3+
import { success, failure } from "@/lib/utils/response";
34

45
export const dynamic = "force-dynamic";
56

@@ -9,21 +10,13 @@ export async function GET(req: NextRequest) {
910
const subject = url.get("subject");
1011

1112
if (!subject) {
12-
return NextResponse.json(
13-
{ message: "Subject query parameter is required" },
14-
{ status: 400 },
15-
);
13+
return failure("Subject query parameter is required", 400);
1614
}
1715
const relatedSubjects = await getRelatedSubjects(subject);
1816

19-
return NextResponse.json(
20-
{related_subjects: relatedSubjects},
21-
{ status: 200 },
22-
);
17+
return success({ related_subjects: relatedSubjects });
2318
} catch (error) {
24-
return NextResponse.json(
25-
{ message: "Failed to fetch related subject", error },
26-
{ status: 500 },
27-
);
19+
console.error(error);
20+
return failure("Failed to fetch related subject", 500);
2821
}
2922
}

src/app/api/report-tag/route.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { NextResponse } from "next/server";
21
import { reportTag, ReportTagBody } from "@/lib/services/report";
32
import { rateLimitCheck } from "@/lib/utils/rate-limiter";
3+
import { success, failure } from "@/lib/utils/response";
44
import { customErrorHandler } from "@/lib/utils/error";
55

66
export async function POST(req: Request & { ip?: string }) {
@@ -9,18 +9,12 @@ export async function POST(req: Request & { ip?: string }) {
99
const paperId = typeof body.paperId === "string" ? body.paperId : undefined;
1010

1111
if (!paperId) {
12-
return NextResponse.json(
13-
{ error: "paperId is required" },
14-
{ status: 400 }
15-
);
12+
return failure("paperId is required", 400);
1613
}
1714
await rateLimitCheck(req, paperId);
1815
const newReport = await reportTag(paperId, body);
1916

20-
return NextResponse.json(
21-
{ message: "Report submitted.", report: newReport },
22-
{ status: 201 }
23-
);
17+
return success({ message: "Report submitted.", report: newReport }, "Created", 201);
2418
} catch (err) {
2519
console.error(err);
2620
return customErrorHandler(err, "Failed to submit tag report.");

src/app/api/request/route.ts

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { NextResponse } from "next/server";
21
import { connectToDatabase } from "@/lib/database/mongoose";
32
import PaperRequest from "@/db/paperRequest";
3+
import { success, failure } from "@/lib/utils/response";
44

55
export async function POST(req: Request) {
66
try {
@@ -15,22 +15,13 @@ export async function POST(req: Request) {
1515
const { subject, exam, slot, year } = body;
1616

1717
if (!subject || !exam || !slot || !year) {
18-
return NextResponse.json(
19-
{ error: "All fields are required." },
20-
{ status: 400 },
21-
);
18+
return failure("All fields are required.", 400);
2219
}
2320

2421
const newRequest = await PaperRequest.create({ subject, exam, slot, year });
25-
return NextResponse.json(
26-
{ message: "Paper request submitted successfully!", request: newRequest },
27-
{ status: 201 },
28-
);
22+
return success({ message: "Paper request submitted successfully!", request: newRequest }, "Created", 201);
2923
} catch (error) {
3024
console.error("Error creating paper request:", error);
31-
return NextResponse.json(
32-
{ error: "Failed to submit request." },
33-
{ status: 500 },
34-
);
25+
return failure("Failed to submit request.", 500);
3526
}
3627
}
Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { NextResponse } from "next/server";
21
import { connectToDatabase } from "@/lib/database/mongoose";
32
import Paper from "@/db/papers";
3+
import { success, failure } from "@/lib/utils/response";
44

55
export const dynamic = "force-dynamic";
66

@@ -11,23 +11,11 @@ export async function GET() {
1111
const selectedPapers = await Paper.find({ isSelected: true }).limit(8);
1212

1313
if (selectedPapers.length === 0) {
14-
return NextResponse.json(
15-
{
16-
message: "No selected papers found.",
17-
},
18-
{ status: 404 },
19-
);
14+
return failure("No selected papers found.", 404);
2015
}
21-
return NextResponse.json(selectedPapers, {
22-
status: 200,
23-
});
16+
return success(selectedPapers);
2417
} catch (error) {
2518
console.error("Error fetching papers:", error);
26-
return NextResponse.json(
27-
{
28-
error: "Failed to fetch papers.",
29-
},
30-
{ status: 500 },
31-
);
19+
return failure("Failed to fetch papers.", 500);
3220
}
3321
}

src/app/api/subscribe/route.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
import { NextResponse } from "next/server";
2-
import { customErrorHandler } from "@/lib/utils/error";
31
import { subscribeEmail } from "@/lib/services/subscribe";
2+
import { success, failure } from "@/lib/utils/response";
3+
import { customErrorHandler } from "@/lib/utils/error";
44

55
export async function POST(req: Request) {
66
try {
77
const { email } = (await req.json()) as { email: string };
88

99
if (!email) {
10-
return NextResponse.json({ error: "Email is required" }, { status: 400 });
10+
return failure("Email is required", 400);
1111
}
1212
await subscribeEmail(email);
1313

14-
return NextResponse.json({ message: "Email added successfully" });
14+
return success({ message: "Email added successfully" });
1515
} catch (error) {
1616
console.error("Error adding email:", error);
1717
return customErrorHandler(error, "Failed to add email");
1818
}
19-
}
19+
}

0 commit comments

Comments
 (0)