Skip to content

Commit aff1450

Browse files
committed
Remove dynamic exports from API routes for static export compatibility
1 parent f4c8b49 commit aff1450

File tree

6 files changed

+199
-150
lines changed

6 files changed

+199
-150
lines changed
Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
1-
import { NextResponse } from 'next/server';
2-
import clientPromise from '../../../../../lib/mongodb';
1+
import { NextResponse } from "next/server";
2+
import clientPromise from "../../../../../lib/mongodb";
33

4-
export const dynamic = 'force-dynamic';
4+
// Removed dynamic = 'force-dynamic' for static export compatibility
55

66
export async function GET() {
77
try {
88
const client = await clientPromise;
9-
const db = client.db('acmData');
9+
const db = client.db("acmData");
1010

1111
// Retrieve all officer profiles from the "admins" collection
12-
const officers = await db.collection('admins').find({}).toArray();
12+
const officers = await db.collection("admins").find({}).toArray();
1313

1414
return NextResponse.json(officers, { status: 200 });
1515
} catch (error) {
16-
console.error('Error fetching officers:', error);
17-
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
16+
console.error("Error fetching officers:", error);
17+
return NextResponse.json(
18+
{ error: "Internal Server Error" },
19+
{ status: 500 }
20+
);
1821
}
1922
}

src/app/api/admin/profile/route.js

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,49 @@
1-
import { NextResponse } from 'next/server';
2-
import { getAdminByEmail, updateAdminProfile } from '../../../../../lib/admin';
3-
import { cookies } from 'next/headers';
4-
import jwt from 'jsonwebtoken';
1+
import { NextResponse } from "next/server";
2+
import { getAdminByEmail, updateAdminProfile } from "../../../../../lib/admin";
3+
import { cookies } from "next/headers";
4+
import jwt from "jsonwebtoken";
55

66
const SECRET_KEY = process.env.JWT_SECRET;
7-
export const dynamic = 'force-dynamic';
7+
// Removed dynamic = 'force-dynamic' for static export compatibility
88

99
export async function GET() {
10-
const tokenCookie = cookies().get('token');
10+
const tokenCookie = cookies().get("token");
1111
const token = tokenCookie?.value;
1212

1313
if (!token) {
14-
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
14+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
1515
}
1616

1717
try {
1818
const decoded = jwt.verify(token, SECRET_KEY);
1919
const email = decoded?.email;
2020

2121
if (!email) {
22-
return NextResponse.json({ error: 'Invalid token' }, { status: 401 });
22+
return NextResponse.json({ error: "Invalid token" }, { status: 401 });
2323
}
2424

2525
const adminProfile = await getAdminByEmail(email);
2626

2727
if (!adminProfile) {
28-
return NextResponse.json({ error: 'Admin not found' }, { status: 404 });
28+
return NextResponse.json({ error: "Admin not found" }, { status: 404 });
2929
}
3030

3131
return NextResponse.json(adminProfile, { status: 200 });
3232
} catch (error) {
33-
console.error('Error fetching admin profile:', error);
34-
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
33+
console.error("Error fetching admin profile:", error);
34+
return NextResponse.json(
35+
{ error: "Internal Server Error" },
36+
{ status: 500 }
37+
);
3538
}
3639
}
3740

3841
export async function PUT(req) {
39-
const tokenCookie = cookies().get('token');
42+
const tokenCookie = cookies().get("token");
4043
const token = tokenCookie?.value;
4144

4245
if (!token) {
43-
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
46+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
4447
}
4548

4649
try {
@@ -60,15 +63,24 @@ export async function PUT(req) {
6063
});
6164

6265
if (!updatedAdmin) {
63-
return NextResponse.json({ error: 'Failed to update profile' }, { status: 500 });
66+
return NextResponse.json(
67+
{ error: "Failed to update profile" },
68+
{ status: 500 }
69+
);
6470
}
6571

66-
return NextResponse.json({ message: 'Profile updated successfully'}, { status: 200 });
72+
return NextResponse.json(
73+
{ message: "Profile updated successfully" },
74+
{ status: 200 }
75+
);
6776
}
6877

69-
return NextResponse.json({ error: 'Invalid data' }, { status: 400 });
78+
return NextResponse.json({ error: "Invalid data" }, { status: 400 });
7079
} catch (error) {
71-
console.error('Error updating admin profile:', error);
72-
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
80+
console.error("Error updating admin profile:", error);
81+
return NextResponse.json(
82+
{ error: "Internal Server Error" },
83+
{ status: 500 }
84+
);
7385
}
7486
}

src/app/api/blog/[id]/route.js

Lines changed: 52 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { NextResponse } from 'next/server';
2-
import { getBlogById, updateBlog } from '../../../../../lib/blog';
3-
import { getAdminByEmail } from '../../../../../lib/admin';
4-
import jwt from 'jsonwebtoken';
5-
import { cookies } from 'next/headers';
1+
import { NextResponse } from "next/server";
2+
import { getBlogById, updateBlog } from "../../../../../lib/blog";
3+
import { getAdminByEmail } from "../../../../../lib/admin";
4+
import jwt from "jsonwebtoken";
5+
import { cookies } from "next/headers";
66

7-
export const dynamic = 'force-dynamic';
7+
// Removed dynamic = 'force-dynamic' for static export compatibility
88

99
const SECRET_KEY = process.env.JWT_SECRET;
1010

@@ -13,50 +13,59 @@ export async function GET(req, { params }) {
1313

1414
try {
1515
const blog = await getBlogById(id);
16-
if (!blog) return NextResponse.json({ error: 'Blog not found' }, { status: 404 });
16+
if (!blog)
17+
return NextResponse.json({ error: "Blog not found" }, { status: 404 });
1718

1819
return NextResponse.json(blog);
1920
} catch (error) {
20-
console.error('Error fetching blog:', error);
21-
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
21+
console.error("Error fetching blog:", error);
22+
return NextResponse.json(
23+
{ error: "Internal Server Error" },
24+
{ status: 500 }
25+
);
2226
}
2327
}
2428

2529
export async function PUT(req, { params }) {
26-
const { id } = params;
27-
const tokenCookie = cookies().get('token');
28-
const token = tokenCookie?.value;
29-
30-
if (!token) {
31-
console.error('No token provided');
32-
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
30+
const { id } = params;
31+
const tokenCookie = cookies().get("token");
32+
const token = tokenCookie?.value;
33+
34+
if (!token) {
35+
console.error("No token provided");
36+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
37+
}
38+
39+
try {
40+
const decoded = jwt.verify(token, SECRET_KEY);
41+
const email = decoded.email;
42+
43+
// Assuming the admin's name is stored in the token payload or fetched via `email`
44+
const adminName = decoded.name || (await getAdminByEmail(email))?.name;
45+
46+
if (!adminName) {
47+
console.error("Admin name not found");
48+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
3349
}
34-
35-
try {
36-
const decoded = jwt.verify(token, SECRET_KEY);
37-
const email = decoded.email;
38-
39-
// Assuming the admin's name is stored in the token payload or fetched via `email`
40-
const adminName = decoded.name || (await getAdminByEmail(email))?.name;
41-
42-
if (!adminName) {
43-
console.error("Admin name not found");
44-
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
45-
}
46-
47-
const blog = await getBlogById(id);
48-
if (!blog) {
49-
console.error('Blog not found');
50-
return NextResponse.json({ error: 'Blog not found' }, { status: 404 });
51-
}
52-
53-
const updates = await req.json();
54-
const updatedBlog = await updateBlog(id, updates);
55-
56-
return NextResponse.json({ message: 'Blog updated', blog: updatedBlog.value });
57-
} catch (error) {
58-
console.error('Error updating blog:', error);
59-
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
50+
51+
const blog = await getBlogById(id);
52+
if (!blog) {
53+
console.error("Blog not found");
54+
return NextResponse.json({ error: "Blog not found" }, { status: 404 });
6055
}
56+
57+
const updates = await req.json();
58+
const updatedBlog = await updateBlog(id, updates);
59+
60+
return NextResponse.json({
61+
message: "Blog updated",
62+
blog: updatedBlog.value,
63+
});
64+
} catch (error) {
65+
console.error("Error updating blog:", error);
66+
return NextResponse.json(
67+
{ error: "Internal Server Error" },
68+
{ status: 500 }
69+
);
6170
}
62-
71+
}

src/app/api/blog/route.js

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,36 @@
1-
import { NextResponse } from 'next/server';
2-
import { createBlog, getAllBlogs, deleteBlogs } from '../../../../lib/blog';
1+
import { NextResponse } from "next/server";
2+
import { createBlog, getAllBlogs, deleteBlogs } from "../../../../lib/blog";
33
import { getAdminByEmail } from "../../../../lib/admin";
4-
import jwt from 'jsonwebtoken';
5-
import { cookies } from 'next/headers';
4+
import jwt from "jsonwebtoken";
5+
import { cookies } from "next/headers";
66

77
const SECRET_KEY = process.env.JWT_SECRET;
8-
export const dynamic = 'force-dynamic';
9-
8+
// Removed dynamic = 'force-dynamic' for static export compatibility
109

1110
export async function GET(req) {
1211
try {
1312
const { searchParams } = new URL(req.url);
14-
const page = parseInt(searchParams.get('page')) || 1;
15-
const sort = searchParams.get('sort') || 'recent';
13+
const page = parseInt(searchParams.get("page")) || 1;
14+
const sort = searchParams.get("sort") || "recent";
1615

1716
const { blogs, totalPages } = await getAllBlogs({ page, sort });
1817
return NextResponse.json({ blogs, totalPages });
1918
} catch (error) {
20-
console.error('Error fetching blogs:', error);
21-
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
19+
console.error("Error fetching blogs:", error);
20+
return NextResponse.json(
21+
{ error: "Internal Server Error" },
22+
{ status: 500 }
23+
);
2224
}
2325
}
2426

2527
export async function POST(req) {
26-
const tokenCookie = cookies().get('token');
28+
const tokenCookie = cookies().get("token");
2729
const token = tokenCookie?.value;
2830

2931
if (!token) {
30-
console.error('No token provided');
31-
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
32+
console.error("No token provided");
33+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
3234
}
3335

3436
try {
@@ -51,20 +53,26 @@ export async function POST(req) {
5153
blogData.upVoters = [];
5254

5355
const result = await createBlog(blogData);
54-
return NextResponse.json({ message: 'Blog created', blogId: result.insertedId }, { status: 201 });
56+
return NextResponse.json(
57+
{ message: "Blog created", blogId: result.insertedId },
58+
{ status: 201 }
59+
);
5560
} catch (error) {
56-
console.error('Error creating blog:', error);
57-
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
61+
console.error("Error creating blog:", error);
62+
return NextResponse.json(
63+
{ error: "Internal Server Error" },
64+
{ status: 500 }
65+
);
5866
}
5967
}
6068

6169
export async function DELETE(req) {
62-
const tokenCookie = cookies().get('token');
70+
const tokenCookie = cookies().get("token");
6371
const token = tokenCookie?.value;
6472

6573
if (!token) {
66-
console.error('No token provided');
67-
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
74+
console.error("No token provided");
75+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
6876
}
6977

7078
try {
@@ -74,8 +82,8 @@ export async function DELETE(req) {
7482
// Retrieve admin's name from the database
7583
const admin = await getAdminByEmail(email);
7684
if (!admin) {
77-
console.error('Admin not found');
78-
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
85+
console.error("Admin not found");
86+
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
7987
}
8088

8189
const authorName = admin.name; // Use the admin's name
@@ -84,12 +92,18 @@ export async function DELETE(req) {
8492
const deleteResult = await deleteBlogs(ids);
8593

8694
if (deleteResult.deletedCount === 0) {
87-
return NextResponse.json({ error: 'No matching blogs found' }, { status: 404 });
95+
return NextResponse.json(
96+
{ error: "No matching blogs found" },
97+
{ status: 404 }
98+
);
8899
}
89100

90-
return NextResponse.json({ message: 'Blogs deleted successfully' });
101+
return NextResponse.json({ message: "Blogs deleted successfully" });
91102
} catch (error) {
92-
console.error('Error deleting blogs:', error);
93-
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
103+
console.error("Error deleting blogs:", error);
104+
return NextResponse.json(
105+
{ error: "Internal Server Error" },
106+
{ status: 500 }
107+
);
94108
}
95109
}

0 commit comments

Comments
 (0)