Skip to content

Commit 2739f5f

Browse files
Merge pull request #42 from CodeChefVIT/staging
admin changes
2 parents a683ffd + 8ab2a6e commit 2739f5f

File tree

7 files changed

+70
-12
lines changed

7 files changed

+70
-12
lines changed

src/app/adminupload/page.tsx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@ function Upload() {
232232

233233
const handleSubmitMerged = async (e: React.FormEvent) => {
234234
e.preventDefault();
235+
const token = localStorage.getItem("token");
236+
const headers = {
237+
Authorization: `Bearer ${token}`,
238+
};
235239
if (files.length === 0) {
236240
alert("Please upload at least one file");
237241
return;
@@ -247,6 +251,7 @@ function Upload() {
247251
const response = await axios.post<PostPDF>(
248252
"/api/admin/imgtopdf",
249253
formData,
254+
{ headers },
250255
);
251256
setPdfUrl(response.data.url);
252257
} catch (error: unknown) {
@@ -305,16 +310,17 @@ function Upload() {
305310

306311
const handleDeleteMerged = async () => {
307312
if (!pdfUrl) return;
313+
const token = localStorage.getItem("token");
314+
const headers = {
315+
Authorization: `Bearer ${token}`,
316+
};
308317
void toast.promise(
309318
(async () => {
310319
try {
311-
const response = await axios.delete<DeletePDF>(
312-
"/api/admin/imgtopdf",
313-
{
314-
data: { filePath: pdfUrl },
315-
},
316-
);
317-
// alert(response.data.message);
320+
const response = await axios.delete<DeletePDF>("/api/admin/imgtopdf", {
321+
data: { filePath: pdfUrl },
322+
headers,
323+
});
318324
setPdfUrl(null);
319325
} catch (error: unknown) {
320326
throw handleAPIError(error);

src/app/api/selected-papers/route.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { NextResponse } from "next/server";
2+
import { connectToDatabase } from "@/lib/mongoose";
3+
import Paper from "@/db/papers";
4+
5+
export async function GET() {
6+
try {
7+
await connectToDatabase();
8+
9+
const selectedPapers = await Paper.find({ isSelected: true }).limit(4);
10+
11+
console.log("Selected papers:", selectedPapers);
12+
if (selectedPapers.length === 0) {
13+
return NextResponse.json(
14+
{
15+
message: "No selected papers found.",
16+
},
17+
{ status: 404 },
18+
);
19+
}
20+
return NextResponse.json(selectedPapers, { status: 200 });
21+
} catch (error) {
22+
console.error("Error fetching papers:", error);
23+
return NextResponse.json(
24+
{
25+
error: "Failed to fetch papers.",
26+
},
27+
{ status: 500 },
28+
);
29+
}
30+
}

src/app/upload/select_options.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ const courses = [
220220
"Digital Signal Processing [BECE301L]",
221221
"Signals and Systems [BECE202L]",
222222
"Engineering Electromagnetics [BECE205L]",
223+
"Digital Electronics [BEEE206L]"
223224
];
224225

225226
const slots: string[] = [

src/components/StoredPapers.tsx

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,37 @@
1+
"use client";
2+
import papers from "ongoing-papers";
3+
import { useEffect, useState } from "react";
4+
import axios from "axios";
15
import PreviewCard from "@/components/PreviewCard";
26
import { type Paper } from "@/interface";
3-
import papers from "ongoing-papers";
7+
import Loader from "./ui/loader";
48

59
function StoredPapers() {
10+
const [displayPapers, setDisplayPapers] = useState<Paper[]>([]);
11+
12+
useEffect(() => {
13+
async function fetchPapers() {
14+
try {
15+
const response = await axios.get("/api/selected-papers");
16+
setDisplayPapers(response.data);
17+
} catch (error) {
18+
setDisplayPapers(papers);
19+
console.error("Failed to fetch papers:", error);
20+
}
21+
}
22+
23+
void fetchPapers();
24+
}, []);
625

7-
if (papers.length === 0) {
8-
return null;
26+
if (displayPapers.length === 0) {
27+
return <Loader prop="m-10" />;
928
}
1029

1130
return (
1231
<>
1332
<p className="mb-4 text-center font-semibold">Most Viewed Papers</p>
1433
<div className="flex flex-wrap justify-center gap-4">
15-
{papers.map((paper: Paper) => (
34+
{displayPapers.map((paper: Paper) => (
1635
<PreviewCard key={paper._id} paper={paper} />
1736
))}
1837
</div>

src/db/papers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const paperSchema = new Schema<IPaper>({
88
slot: { type: String, required: true },
99
year: { type: String, required: true },
1010
exam: { type: String, enum: ["CAT-1", "CAT-2", "FAT"], required: true },
11+
isSelected: { type: Boolean, default: false },
1112
});
1213

1314
paperSchema.index({ subject: 1 });

src/interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export interface IPaper{
4141
slot: string;
4242
year: string;
4343
exam: "CAT-1" | "CAT-2" | "FAT";
44+
isSelected: boolean;
4445
}
4546
export interface IAdminUpload{
4647
urls: Array<string>;

src/middleware.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ export async function middleware(request: Request) {
1515
}
1616

1717
export const config = {
18-
matcher: ["/api/admin", "/api/admin/watermark", "/api/admin/dashboard"],
18+
matcher: ["/api/admin/:path*"],
1919
};

0 commit comments

Comments
 (0)