Skip to content

Commit 508c743

Browse files
Added additional tags
1 parent c2b9f40 commit 508c743

File tree

11 files changed

+195
-97
lines changed

11 files changed

+195
-97
lines changed

ongoing-papers.ts

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,51 @@
1-
import { type Paper } from "@/interface";
1+
import { type IPaper } from "@/interface";
22

3-
const papers: Paper[] = [
4-
{
5-
_id: "6708fd8002a75017a4f08759",
6-
finalUrl:
7-
"https://res.cloudinary.com/dtorpaj1c/image/upload/v1728642405/papers/orbppimhujcijj2ywhvm.pdf",
8-
thumbnailUrl:
9-
"https://res.cloudinary.com/dtorpaj1c/image/upload/w_400,h_400,c_fill/v1728642405/papers/orbppimhujcijj2ywhvm.jpg",
10-
subject: "Discrete Mathematics and Graph Theory [BMAT205L]",
11-
slot: "A2",
12-
year: "2023",
13-
exam: "CAT-2",
14-
},
15-
{
16-
_id: "670980523ec3fdad83b2d211",
17-
finalUrl:
18-
"https://res.cloudinary.com/dtorpaj1c/image/upload/v1728675912/papers/lvtypsfdtref5mjskley.pdf",
19-
thumbnailUrl:
20-
"https://res.cloudinary.com/dtorpaj1c/image/upload/w_400,h_400,c_fill/v1728675912/papers/lvtypsfdtref5mjskley.jpg",
21-
subject: "Compiler Design [BCSE307L]",
22-
slot: "A2",
23-
year: "2024",
24-
exam: "CAT-2",
25-
},
26-
{
27-
_id: "670a105e6272bcf9da4e2362",
3+
const papers: IPaper[] = [
4+
// {
5+
// _id: "6708fd8002a75017a4f08759",
6+
// finalUrl:
7+
// "https://res.cloudinary.com/dtorpaj1c/image/upload/v1728642405/papers/orbppimhujcijj2ywhvm.pdf",
8+
// thumbnailUrl:
9+
// "https://res.cloudinary.com/dtorpaj1c/image/upload/w_400,h_400,c_fill/v1728642405/papers/orbppimhujcijj2ywhvm.jpg",
10+
// subject: "Discrete Mathematics and Graph Theory [BMAT205L]",
11+
// slot: "A2",
12+
// year: "2023",
13+
// exam: "CAT-2",
14+
// },
15+
// {
16+
// _id: "670980523ec3fdad83b2d211",
17+
// finalUrl:
18+
// "https://res.cloudinary.com/dtorpaj1c/image/upload/v1728675912/papers/lvtypsfdtref5mjskley.pdf",
19+
// thumbnailUrl:
20+
// "https://res.cloudinary.com/dtorpaj1c/image/upload/w_400,h_400,c_fill/v1728675912/papers/lvtypsfdtref5mjskley.jpg",
21+
// subject: "Compiler Design [BCSE307L]",
22+
// slot: "A2",
23+
// year: "2024",
24+
// exam: "CAT-2",
25+
// },
26+
// {
27+
// _id: "670a105e6272bcf9da4e2362",
2828

29-
finalUrl:
30-
"https://res.cloudinary.com/dtorpaj1c/image/upload/v1728712773/papers/ifkrnjgwdudtev9rxpki.pdf",
31-
thumbnailUrl:
32-
"https://res.cloudinary.com/dtorpaj1c/image/upload/w_400,h_400,c_fill/v1728712773/papers/ifkrnjgwdudtev9rxpki.jpg",
33-
subject: "Complex Variables and Linear Algebra [BMAT201L]",
34-
slot: "A1",
35-
year: "2023",
36-
exam: "CAT-2",
37-
},
38-
{
39-
_id: "67097e7b3ec3fdad83b2d205",
40-
finalUrl:
41-
"https://res.cloudinary.com/dtorpaj1c/image/upload/v1728675439/papers/pyyqotz1mzuh2wmq1k9s.pdf",
42-
thumbnailUrl:
43-
"https://res.cloudinary.com/dtorpaj1c/image/upload/w_400,h_400,c_fill/v1728675439/papers/pyyqotz1mzuh2wmq1k9s.jpg",
44-
subject: "Computer Networks [BCSE308L]",
45-
slot: "C2",
46-
year: "2023",
47-
exam: "CAT-2",
48-
},
29+
// finalUrl:
30+
// "https://res.cloudinary.com/dtorpaj1c/image/upload/v1728712773/papers/ifkrnjgwdudtev9rxpki.pdf",
31+
// thumbnailUrl:
32+
// "https://res.cloudinary.com/dtorpaj1c/image/upload/w_400,h_400,c_fill/v1728712773/papers/ifkrnjgwdudtev9rxpki.jpg",
33+
// subject: "Complex Variables and Linear Algebra [BMAT201L]",
34+
// slot: "A1",
35+
// year: "2023",
36+
// exam: "CAT-2",
37+
// },
38+
// {
39+
// _id: "67097e7b3ec3fdad83b2d205",
40+
// finalUrl:
41+
// "https://res.cloudinary.com/dtorpaj1c/image/upload/v1728675439/papers/pyyqotz1mzuh2wmq1k9s.pdf",
42+
// thumbnailUrl:
43+
// "https://res.cloudinary.com/dtorpaj1c/image/upload/w_400,h_400,c_fill/v1728675439/papers/pyyqotz1mzuh2wmq1k9s.jpg",
44+
// subject: "Computer Networks [BCSE308L]",
45+
// slot: "C2",
46+
// year: "2023",
47+
// exam: "CAT-2",
48+
// },
4949
];
5050

5151
export default papers;

src/app/api/papers/route.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { NextResponse, NextRequest } from "next/server";
22
import { connectToDatabase } from "@/lib/mongoose";
33
import Paper from "@/db/papers";
4-
import { type IPaper } from "@/interface";
4+
import { IPaper, type IAdminPaper } from "@/interface";
55

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

@@ -21,11 +21,11 @@ export async function GET(req: NextRequest) {
2121
{ status: 400 },
2222
);
2323
}
24-
24+
console.log((await Paper.find()).map((paper)=>{paper.campus}))
2525
const papers: IPaper[] = await Paper.find({
2626
subject: { $regex: new RegExp(`${escapedSubject}`, "i") },
2727
});
28-
28+
console.log(papers[0]?.campus)
2929
if (papers.length === 0) {
3030
return NextResponse.json(
3131
{ message: "No papers found for the specified subject" },
@@ -36,9 +36,11 @@ export async function GET(req: NextRequest) {
3636
const uniqueYears = Array.from(new Set(papers.map((paper) => paper.year)));
3737
const uniqueSlots = Array.from(new Set(papers.map((paper) => paper.slot)));
3838
const uniqueExams = Array.from(new Set(papers.map((paper) => paper.exam)));
39+
const uniqueCampuses = Array.from(new Set(papers.map((paper) => paper.campus)));
40+
const uniqueSemesters = Array.from(new Set(papers.map((paper) => paper.semester)));
3941

4042
return NextResponse.json(
41-
{ papers, uniqueYears, uniqueSlots, uniqueExams },
43+
{ papers, uniqueYears, uniqueSlots, uniqueExams, uniqueCampuses, uniqueSemesters },
4244
{ status: 200 }
4345
);
4446
} catch (error) {

src/app/upload/page.tsx

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Button } from "@/components/ui/button";
88
import Navbar from "@/components/Navbar";
99
import Footer from "@/components/Footer";
1010
import { type PostPDFToCloudinary } from "@/interface";
11-
import { slots, years } from "@/components/select_options";
11+
import { slots, years, campuses } from "@/components/select_options";
1212
import SearchBar from "@/components/searchbarSubjectList";
1313
import Dropzone from "react-dropzone";
1414
import {
@@ -25,7 +25,10 @@ const Page = () => {
2525
const [slot, setSlot] = useState("");
2626
const [subject, setSubject] = useState("");
2727
const [exam, setExam] = useState("");
28-
const [year, setYear] = useState("");
28+
const [year, setYear] = useState("");
29+
const [campus, setCampus] = useState("");
30+
const [semester, setSemester] = useState("");
31+
2932
const [files, setFiles] = useState<File[]>([]);
3033
const [isUploading, setIsUploading] = useState(false);
3134
const [resetSearch, setResetSearch] = useState(false);
@@ -196,6 +199,44 @@ const Page = () => {
196199
</Select>
197200
</div>
198201

202+
{/* Year Selection */}
203+
<div>
204+
<label>Campus Selection:</label>
205+
<Select value={campus} onValueChange={setCampus}>
206+
<SelectTrigger className="m-2 rounded-md border p-2">
207+
<SelectValue placeholder="Select campus" />
208+
</SelectTrigger>
209+
<SelectContent>
210+
<SelectGroup>
211+
<SelectLabel>Years</SelectLabel>
212+
{campuses.map((campus) => (
213+
<SelectItem key={campus} value={String(campus)}>
214+
{campus}
215+
</SelectItem>
216+
))}
217+
</SelectGroup>
218+
</SelectContent>
219+
</Select>
220+
</div>
221+
<div>
222+
<label>Semester Selection:</label>
223+
<Select value={semester} onValueChange={setSemester}>
224+
<SelectTrigger className="m-2 rounded-md border p-2">
225+
<SelectValue placeholder="Select semester" />
226+
</SelectTrigger>
227+
<SelectContent>
228+
<SelectGroup>
229+
<SelectLabel>Years</SelectLabel>
230+
{campuses.map((campus) => (
231+
<SelectItem key={campus} value={String(campus)}>
232+
{campus}
233+
</SelectItem>
234+
))}
235+
</SelectGroup>
236+
</SelectContent>
237+
</Select>
238+
</div>
239+
199240
{/* File Dropzone */}
200241
<div>
201242
<Dropzone

src/components/Card.tsx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { useEffect, useState } from "react";
2-
import { type Paper } from "@/interface";
2+
import { type IPaper } from "@/interface";
33
import Image from "next/image";
44
import { Eye, Download } from "lucide-react";
55
import {
6+
capsuleGreen,
67
extractBracketContent,
78
extractWithoutBracketContent,
89
} from "@/util/utils";
@@ -16,8 +17,8 @@ const Card = ({
1617
onSelect,
1718
isSelected,
1819
}: {
19-
paper: Paper;
20-
onSelect: (paper: Paper, isSelected: boolean) => void;
20+
paper: IPaper;
21+
onSelect: (paper: IPaper, isSelected: boolean) => void;
2122
isSelected: boolean;
2223
}) => {
2324
const router = useRouter();
@@ -27,7 +28,7 @@ const Card = ({
2728
setChecked(isSelected);
2829
}, [isSelected]);
2930

30-
const handleDownload = async (paper: Paper) => {
31+
const handleDownload = async (paper: IPaper) => {
3132
const extension = paper.finalUrl.split(".").pop();
3233
const fileName = `${extractBracketContent(paper.subject)}-${paper.exam}-${paper.slot}-${paper.year}.${extension}`;
3334
await downloadFile(paper.finalUrl, fileName);
@@ -68,17 +69,21 @@ const Card = ({
6869
/>
6970
</Link>
7071

71-
<div className="justify-center space-y-2 h-28">
72+
<div className="justify-center space-y-2 h-30">
7273
<div className="text-sm font-sans font-medium">
7374
{extractBracketContent(paper.subject)}
7475
</div>
7576
<div className="text-base font-sans font-semibold">
7677
{extractWithoutBracketContent(paper.subject)}
7778
</div>
78-
<div className="flex gap-2 py-2">
79+
<div className="flex flex-wrap gap-2 py-2">
7980
{capsule(paper.exam)}
8081
{capsule(paper.slot)}
8182
{capsule(paper.year)}
83+
{capsule(paper.campus)}
84+
{capsule(paper.semester)}
85+
{paper.answerKeyIncluded && capsuleGreen("Answer key included")}
86+
{paper.modelPaper && capsuleGreen( "Model Paper")}
8287
</div>
8388
</div>
8489

src/components/CatalogueContent.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useSearchParams } from "next/navigation";
22
import { useEffect, useState } from "react";
33
import axios, { type AxiosError } from "axios";
44
import { Button } from "@/components/ui/button";
5-
import { type Paper, type Filters } from "@/interface";
5+
import { type IPaper, type Filters } from "@/interface";
66
import { FilterDialog } from "@/components/FilterDialog";
77
import Card from "./Card";
88
import { extractBracketContent } from "@/util/utils";
@@ -34,8 +34,8 @@ const CatalogueContent = () => {
3434
router.push(`/catalogue?subject=${encodeURIComponent(subject!)}`);
3535
};
3636

37-
const [papers, setPapers] = useState<Paper[]>([]);
38-
const [selectedPapers, setSelectedPapers] = useState<Paper[]>([]);
37+
const [papers, setPapers] = useState<IPaper[]>([]);
38+
const [selectedPapers, setSelectedPapers] = useState<IPaper[]>([]);
3939
const [error, setError] = useState<string | null>(null);
4040
const [loading, setLoading] = useState<boolean>(false);
4141
const [filterOptions, setFilterOptions] = useState<Filters>();
@@ -63,7 +63,7 @@ const CatalogueContent = () => {
6363
} catch (error) {}
6464
}
6565

66-
const handleSelectPaper = (paper: Paper, isSelected: boolean) => {
66+
const handleSelectPaper = (paper: IPaper, isSelected: boolean) => {
6767
if (isSelected) {
6868
setSelectedPapers((prev) => [...prev, paper]);
6969
} else {

src/components/PreviewCard.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { type Paper } from "@/interface";
1+
import { type IPaper } from "@/interface";
22
import Image from "next/image";
33
import {
44
extractBracketContent,
@@ -7,7 +7,7 @@ import {
77
import { capsule } from "@/util/utils";
88
import Link from "next/link";
99

10-
const PreviewCard = ({ paper }: { paper: Paper }) => {
10+
const PreviewCard = ({ paper }: { paper: IPaper }) => {
1111
if (paper.finalUrl.startsWith("http://")) {
1212
paper.finalUrl = paper.finalUrl.replace("http://", "https://");
1313
}

src/components/StoredPapers.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ import papers from "ongoing-papers";
33
import { useEffect, useState } from "react";
44
import axios from "axios";
55
import PreviewCard from "@/components/PreviewCard";
6-
import { type Paper } from "@/interface";
6+
import { type IPaper } from "@/interface";
77
import Loader from "./ui/loader";
88

99
function StoredPapers() {
10-
const [displayPapers, setDisplayPapers] = useState<Paper[]>([]);
10+
const [displayPapers, setDisplayPapers] = useState<IPaper[]>([]);
1111

1212
useEffect(() => {
1313
async function fetchPapers() {
1414
try {
1515
const response = await axios.get("/api/selected-papers");
16-
setDisplayPapers(response.data as Paper[]);
16+
setDisplayPapers(response.data as IPaper[]);
1717
} catch (error) {
1818
setDisplayPapers(papers);
1919
console.error("Failed to fetch papers:", error);
@@ -31,7 +31,7 @@ function StoredPapers() {
3131
<>
3232
<p className="mt-2 mb-6 text-center font-sans text-xl font-semibold">Most Viewed Papers</p>
3333
<div className="flex flex-wrap justify-center gap-4">
34-
{displayPapers.map((paper: Paper) => (
34+
{displayPapers.map((paper: IPaper) => (
3535
<PreviewCard key={paper._id} paper={paper} />
3636
))}
3737
</div>

src/components/select_options.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,12 @@ const slots: string[] = [
248248
"G2",
249249
];
250250
function getYears(startYear: number) {
251-
const currentYear = new Date().getFullYear(); // Get the current year
251+
const currentYear = new Date().getFullYear(); // Get the current year
252252
const years = [];
253253

254254
// Loop from startYear to currentYear and add each year to the array
255255
for (let year = startYear; year <= currentYear; year++) {
256-
years.push(String(year));
256+
years.push(String(year));
257257
}
258258

259259
return years;
@@ -262,5 +262,13 @@ function getYears(startYear: number) {
262262
// Example usage:
263263
const startYear = 2011;
264264
const years = getYears(startYear);
265-
266-
export { slots, courses, years };
265+
const campuses: string[] = [
266+
"Vellore",
267+
"Chennai",
268+
"Andhra Pradesh",
269+
"Bhopal",
270+
"Bangalore",
271+
"Mauritius",
272+
];
273+
const semesters: string[] = ["Fall", "Winter", "Summer", "Weekend"];
274+
export { slots, courses, years, campuses, semesters };

0 commit comments

Comments
 (0)