Skip to content

Commit fd853f5

Browse files
Connected year and semester ai results with backend
1 parent 545965e commit fd853f5

File tree

3 files changed

+44
-96
lines changed

3 files changed

+44
-96
lines changed

src/app/api/ai-upload/route.ts

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ import {
1111
import { connectToDatabase } from "@/lib/mongoose";
1212
import cloudinary from "cloudinary";
1313
import type {
14-
ICourses,
15-
CloudinaryUploadResult,
14+
ICourses,
15+
CloudinaryUploadResult,
1616
ExamDetail,
17+
Semester,
1718
} from "@/interface";
1819
import { PaperAdmin } from "@/db/papers";
1920
import axios from "axios";
@@ -50,16 +51,14 @@ export async function POST(req: Request) {
5051
}
5152
const tags = await processAndAnalyze({ imageURL });
5253
const finalTags = await setTagsFromCurrentLists(tags);
53-
console.log(finalTags)
54+
console.log("Final tags:", finalTags);
5455
const subject = finalTags["course-name"];
5556
const slot = finalTags.slot;
5657
const exam = finalTags["exam-type"];
57-
const year = formData.get("year") as string;
58-
const campus = formData.get("campus") as string;
59-
const semester =formData.get("semester") as string;
58+
const year = finalTags.year;
59+
const campus = formData.get("campus") as string
60+
const semester = finalTags.semester;
6061

61-
62-
console.log(subject , slot, exam)
6362
if (
6463
!(
6564
courses.includes(subject) &&
@@ -70,7 +69,10 @@ export async function POST(req: Request) {
7069
semesters.includes(semester)
7170
)
7271
) {
73-
return NextResponse.json({ message: "Bad request/AI couldn't set tags" }, { status: 400 });
72+
return NextResponse.json(
73+
{ message: "AI couldn't set tags" },
74+
{ status: 400 },
75+
);
7476
}
7577
await connectToDatabase();
7678
let finalUrl: string | undefined = "";
@@ -209,14 +211,17 @@ async function setTagsFromCurrentLists(
209211
`${process.env.SERVER_URL}/api/course-list`,
210212
);
211213
const courses = data.map((course: { name: string }) => course.name);
212-
if (!courses[0] || !slots[0] || !exams[0]) {
213-
throw "Cannot fetch default value for courses/slot/exam!";
214+
if (!courses[0] || !slots[0] || !exams[0] || !semesters[0] || !years[0]) {
215+
throw "Cannot fetch default value for courses/slot/exam/sem/year!";
214216
}
217+
215218
const newTags: ExamDetail = {
216219
"course-name": courses[0],
217220
slot: slots[0],
218221
"course-code": "notInUse",
219222
"exam-type": exams[0],
223+
semester: semesters[0] as Semester,
224+
year: years[0],
220225
};
221226
const coursesFuzy = new Fuse(courses);
222227
if (!tags) {
@@ -229,16 +234,27 @@ async function setTagsFromCurrentLists(
229234
if (subjectSearch) {
230235
newTags["course-name"] = subjectSearch.item;
231236
}
232-
const slotPattern = new RegExp(`[${tags.slot}]`, "i");
233-
const slotSearchResult = slots.find((s) => slotPattern.test(s));
234-
if(slotSearchResult)
235-
{
236-
newTags.slot = slotSearchResult
237+
const slotSearchResult = findMatch(slots, tags.slot);
238+
if (slotSearchResult) {
239+
newTags.slot = slotSearchResult;
237240
}
238241
if ("exam-type" in tags && tags["exam-type"] in examMap) {
239242
const examType = tags["exam-type"] as keyof typeof examMap;
240243
newTags["exam-type"] = examMap[examType];
241244
}
245+
const semesterSearchResult = findMatch(semesters, tags.semester);
246+
if (semesterSearchResult) {
247+
newTags.semester = semesterSearchResult as Semester;
248+
}
249+
const yearSearchResult = findMatch(years, tags.year);
250+
if (yearSearchResult) {
251+
newTags.year = yearSearchResult;
252+
}
242253
}
243254
return newTags;
244255
}
256+
function findMatch<T>(arr: T[], value: string | undefined): T | undefined {
257+
if (!value) return undefined; // Handle undefined case
258+
const pattern = new RegExp(`[${value}]`, "i");
259+
return arr.find((item) => pattern.test(String(item)));
260+
}

src/app/upload/page.tsx

Lines changed: 11 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,8 @@ import { Button } from "@/components/ui/button";
77
import Navbar from "@/components/Navbar";
88
import Footer from "@/components/Footer";
99
import { type PostPDFToCloudinary } from "@/interface";
10-
import { years, campuses, semesters } from "@/components/select_options";
1110
import Dropzone from "react-dropzone";
12-
import {
13-
Select,
14-
SelectContent,
15-
SelectGroup,
16-
SelectItem,
17-
SelectLabel,
18-
SelectTrigger,
19-
SelectValue,
20-
} from "@/components/ui/select";
11+
2112
import { createCanvas } from "canvas";
2213
import { getDocument, GlobalWorkerOptions } from "pdfjs-dist";
2314
import { PDFDocument } from "pdf-lib";
@@ -49,9 +40,7 @@ import { PDFDocument } from "pdf-lib";
4940
}
5041

5142
const Page = () => {
52-
const [year, setYear] = useState("");
5343
const [campus, setCampus] = useState("");
54-
const [semester, setSemester] = useState("");
5544

5645
const [files, setFiles] = useState<File[]>([]);
5746
const [isUploading, setIsUploading] = useState(false);
@@ -78,19 +67,19 @@ const Page = () => {
7867
// toast.error("Exam is required");
7968
// return;
8069
// }
81-
if (!year) {
82-
toast.error("Year is required");
83-
return;
84-
}
70+
// if (!year) {
71+
// toast.error("Year is required");
72+
// return;
73+
// }
8574
if (!campus) {
8675
setCampus("Vellore")
8776
// toast.error("Campus is required");
8877
// return;
8978
}
90-
if (!semester) {
91-
toast.error("Semester is required");
92-
return;
93-
}
79+
// if (!semester) {
80+
// toast.error("Semester is required");
81+
// return;
82+
// }
9483
if (!files || files.length === 0) {
9584
toast.error("No files selected");
9685
return;
@@ -132,9 +121,7 @@ const Page = () => {
132121
{
133122
formData.append("image", await pdfToImage(files[0]))
134123
}
135-
formData.append("year", year);
136124
// formData.append("exam", exam);
137-
formData.append("semester", semester);
138125
formData.append("campus", campus);
139126

140127
formData.append("isPdf", String(isPdf));
@@ -154,7 +141,7 @@ const Page = () => {
154141
// setSlot("");
155142
// setSubject("");
156143
// setExam("");
157-
setYear("");
144+
// setYear("");
158145
setFiles([]);
159146
setResetSearch(true);
160147
setTimeout(() => setResetSearch(false), 100);
@@ -172,65 +159,9 @@ const Page = () => {
172159
</div>
173160
<div className="2xl:my-15 flex flex-col items-center">
174161
<fieldset className="mb-4 w-[350px] rounded-lg border-2 border-gray-300 p-4 pr-8">
175-
<legend className="text-lg font-bold">Select paper parameters</legend>
162+
{/* <legend className="text-lg font-bold">Upload papers</legend> */}
176163

177164
<div className="flex w-full flex-col 2xl:gap-y-4">
178-
{/* Year Selection */}
179-
<div>
180-
<label>Year:</label>
181-
<Select value={year} onValueChange={setYear}>
182-
<SelectTrigger className="m-2 rounded-md border p-2">
183-
<SelectValue placeholder="Select year" />
184-
</SelectTrigger>
185-
<SelectContent>
186-
<SelectGroup>
187-
<SelectLabel>Year:</SelectLabel>
188-
{years.map((year) => (
189-
<SelectItem key={year} value={String(year)}>
190-
{year}
191-
</SelectItem>
192-
))}
193-
</SelectGroup>
194-
</SelectContent>
195-
</Select>
196-
</div>
197-
198-
<div>
199-
{/* <label>Campus:</label>
200-
<Select value={campus} onValueChange={setCampus}>
201-
<SelectTrigger className="m-2 rounded-md border p-2">
202-
<SelectValue placeholder="Select campus" />
203-
</SelectTrigger>
204-
<SelectContent>
205-
<SelectGroup>
206-
<SelectLabel>Years</SelectLabel>
207-
{campuses.map((campus) => (
208-
<SelectItem key={campus} value={String(campus)}>
209-
{campus}
210-
</SelectItem>
211-
))}
212-
</SelectGroup>
213-
</SelectContent>
214-
</Select> */}
215-
</div>
216-
<div>
217-
<label>Semester:</label>
218-
<Select value={semester} onValueChange={setSemester}>
219-
<SelectTrigger className="m-2 rounded-md border p-2">
220-
<SelectValue placeholder="Select semester" />
221-
</SelectTrigger>
222-
<SelectContent>
223-
<SelectGroup>
224-
<SelectLabel>Semester</SelectLabel>
225-
{semesters.map((semester) => (
226-
<SelectItem key={semester} value={String(semester)}>
227-
{semester}
228-
</SelectItem>
229-
))}
230-
</SelectGroup>
231-
</SelectContent>
232-
</Select>
233-
</div>
234165

235166
{/* File Dropzone */}
236167
<div>

src/interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ export interface DecryptedLoginResponse {
126126
id: string;
127127
};
128128
}
129+
export type Semester = "Fall" | "Winter" | "Summer" | "Weekend";
129130

130131
export interface IPaper {
131132
_id: string;

0 commit comments

Comments
 (0)