From 66e04d675ec8fe1f2c70aeb9911755c3bbaa98ad Mon Sep 17 00:00:00 2001 From: Noscope999 Date: Fri, 1 Aug 2025 18:37:24 +0530 Subject: [PATCH] feat:added back-end mongodb route for paper requests --- src/app/api/request/route.ts | 31 ++++++++++++ src/components/screens/PapersPage.tsx | 72 ++++++++++++++++++++------- src/db/paperRequest.ts | 23 +++++++++ 3 files changed, 109 insertions(+), 17 deletions(-) create mode 100644 src/app/api/request/route.ts create mode 100644 src/db/paperRequest.ts diff --git a/src/app/api/request/route.ts b/src/app/api/request/route.ts new file mode 100644 index 0000000..e998744 --- /dev/null +++ b/src/app/api/request/route.ts @@ -0,0 +1,31 @@ +import { NextResponse } from "next/server"; +import { connectToDatabase } from "@/lib/mongoose"; +import PaperRequest from "@/db/paperRequest"; + +export async function POST(req: Request) { + try { + await connectToDatabase(); + const body = await req.json(); + + const { subject, exam, slot, year } = body; + + if (!subject || !exam || !slot || !year) { + return NextResponse.json( + { error: "All fields are required." }, + { status: 400 } + ); + } + + const newRequest = await PaperRequest.create({ subject, exam, slot, year }); + return NextResponse.json( + { message: "Paper request submitted successfully!", request: newRequest }, + { status: 201 } + ); + } catch (error) { + console.error("Error creating paper request:", error); + return NextResponse.json( + { error: "Failed to submit request." }, + { status: 500 } + ); + } +} diff --git a/src/components/screens/PapersPage.tsx b/src/components/screens/PapersPage.tsx index 813934c..1bda0e8 100644 --- a/src/components/screens/PapersPage.tsx +++ b/src/components/screens/PapersPage.tsx @@ -50,7 +50,6 @@ export default function PapersPage() { setSuggestions(results.map(r => r.item).slice(0, 10)) }, [searchText, fuse, selectedSubject]) - const handleSelectSubject = (subject: string) => { setSelectedSubject(subject) setSearchText(subject) @@ -70,19 +69,40 @@ export default function PapersPage() { return () => document.removeEventListener("mousedown", handleClickOutside) }, []) - const handleSubmit = () => { + const handleSubmit = async () => { if (!selectedSubject || !selectedExam || !selectedSlot || !selectedYear) { - alert("Please fill all fields before submitting") + alert("⚠️ Please fill all fields before submitting.") return } - console.log({ subject: selectedSubject, exam: selectedExam, slot: selectedSlot, year: selectedYear }) + + try { + await axios.post("/api/request", { + subject: selectedSubject, + exam: selectedExam, + slot: selectedSlot, + year: selectedYear, + }) + + alert("✅ Your paper request was submitted successfully 🎉") + + setSearchText("") + setSelectedSubject(null) + setSelectedExam(null) + setSelectedSlot(null) + setSelectedYear(null) + } catch (error) { + console.error("Error submitting request:", error) + alert("❌ Failed to submit your request. Please try again later.") + } } return (
-

Specific Paper Request

+

+ Specific Paper Request +

{suggestions.length > 0 && ( -
    +
      {suggestions.map((s, idx) => ( -
    • handleSelectSubject(s)} className="cursor-pointer truncate p-2 hover:bg-gray-100 dark:hover:bg-gray-800"> +
    • handleSelectSubject(s)} + className="cursor-pointer truncate p-2 hover:bg-gray-100 dark:hover:bg-gray-800"> {s}
    • ))} @@ -112,41 +137,54 @@ export default function PapersPage() {
- - {exams.map((exam) => {exam})} + + {exams.map((exam) => ( + {exam} + ))} + - - {slots.map((slot) => {slot})} + + {slots.map((slot) => ( + {slot} + ))} + - {[...years].sort((a, b) => Number(b) - Number(a)).map((year) => ( {year} ))} -
- +
- { }

Explore More

-
-
{[1, 2, 3, 4].map((index) => (
diff --git a/src/db/paperRequest.ts b/src/db/paperRequest.ts new file mode 100644 index 0000000..501f457 --- /dev/null +++ b/src/db/paperRequest.ts @@ -0,0 +1,23 @@ +import mongoose, { Schema, type Document, type Model } from "mongoose"; + +export interface IPaperRequest extends Document { + subject: string; + exam: string; + slot: string; + year: string; + createdAt: Date; +} + +const paperRequestSchema = new Schema({ + subject: { type: String, required: true }, + exam: { type: String, required: true }, + slot: { type: String, required: true }, + year: { type: String, required: true }, + createdAt: { type: Date, default: Date.now } +}); + +const PaperRequest: Model = + mongoose.models.PaperRequest ?? + mongoose.model("PaperRequest", paperRequestSchema); + +export default PaperRequest;