1- import { NextRequest , NextResponse } from "next/server" ;
1+ import { NextResponse } from "next/server" ;
22import { PDFDocument } from "pdf-lib" ;
3- import { courses , slots , years } from "@/components/select_options"
3+ import { slots , years } from "@/components/select_options" ;
44import { connectToDatabase } from "@/lib/mongoose" ;
55import cloudinary from "cloudinary" ;
6- import {
7-
8- CloudinaryUploadResult ,
9- } from "@/interface" ;
10- import { PaperAdmin } from "@/db/papers" ;
6+ import { type ICourses , type CloudinaryUploadResult } from "@/interface" ;
7+ import { PaperAdmin } from "@/db/papers" ;
8+ import axios from "axios" ;
119// TODO: REMOVE THUMBNAIL FROM admin-buffer DB
1210cloudinary . v2 . config ( {
1311 cloud_name : process . env . NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME ,
@@ -29,14 +27,19 @@ export async function POST(req: Request) {
2927 const year = formData . get ( "year" ) as string ;
3028 const exam = formData . get ( "exam" ) as string ;
3129 const isPdf = formData . get ( "isPdf" ) === "true" ; // Convert string to boolean
32- if ( ! ( courses . includes ( subject ) && slots . includes ( slot ) && years . includes ( year ) ) )
33- {
34- return NextResponse . json (
35- { message : "Bad Request" } ,
36-
37- { status : 400 } ,
38- ) ;
30+
31+ const { data } = await axios . get < ICourses [ ] > ( `${ process . env . SERVER_URL } /api/course-list` ) ;
32+ const courses = data . map ( ( course : { name : string } ) => course . name ) ;
33+ if (
34+ ! (
35+ courses . includes ( subject ) &&
36+ slots . includes ( slot ) &&
37+ years . includes ( year )
38+ )
39+ ) {
40+ return NextResponse . json ( { message : "Bad Request" } , { status : 400 } ) ;
3941 }
42+
4043 await connectToDatabase ( ) ;
4144 let finalUrl : string | undefined = "" ;
4245 let public_id_cloudinary : string | undefined = "" ;
@@ -53,18 +56,25 @@ export async function POST(req: Request) {
5356 if ( ! process . env . NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET ) {
5457 return ;
5558 }
56-
59+
5760 const mergedPdfBytes = await CreatePDF ( files ) ;
58- [ public_id_cloudinary , finalUrl ] = await uploadPDFFile ( mergedPdfBytes , uploadPreset ) ;
61+ [ public_id_cloudinary , finalUrl ] = await uploadPDFFile (
62+ mergedPdfBytes ,
63+ uploadPreset ,
64+ ) ;
5965 } catch ( error ) {
6066 return NextResponse . json (
6167 { error : "Failed to process PDF" } ,
6268 { status : 500 } ,
6369 ) ;
6470 }
6571 } else {
66- [ public_id_cloudinary , finalUrl ] = await uploadPDFFile ( files [ 0 ] ! , uploadPreset ) ;
72+ [ public_id_cloudinary , finalUrl ] = await uploadPDFFile (
73+ files [ 0 ] ! ,
74+ uploadPreset ,
75+ ) ;
6776 }
77+
6878 const thumbnailResponse = cloudinary . v2 . image ( finalUrl ! , {
6979 format : "jpg" ,
7080 } ) ;
@@ -73,7 +83,6 @@ export async function POST(req: Request) {
7383 . replace ( "upload" , "upload/w_400,h_400,c_fill" )
7484 . replace ( / < i m g s r c = ' | ' \s * \/ > / g, "" ) ;
7585 const paper = new PaperAdmin ( {
76-
7786 public_id_cloudinary,
7887 finalUrl,
7988 thumbnailUrl,
@@ -91,35 +100,39 @@ export async function POST(req: Request) {
91100 console . error ( error ) ;
92101 return NextResponse . json (
93102 { message : "Failed to upload papers" , error } ,
94-
95103 { status : 500 } ,
96104 ) ;
97105 }
98106}
99107
100-
101108async function uploadPDFFile ( file : File | ArrayBuffer , uploadPreset : string ) {
102109 let bytes ;
103- if ( file instanceof File ) //for pdf
104- {
110+ if ( file instanceof File ) {
105111 bytes = await file . arrayBuffer ( ) ;
106- }
107- else // for images that are pdf
108- {
112+ } else {
109113 bytes = file ;
110114 }
111- return uploadFile ( bytes , uploadPreset , "application/pdf" )
115+ return uploadFile ( bytes , uploadPreset , "application/pdf" ) ;
112116}
113- async function uploadFile ( bytes : ArrayBuffer , uploadPreset : string , fileType : string ) {
117+
118+ async function uploadFile (
119+ bytes : ArrayBuffer ,
120+ uploadPreset : string ,
121+ fileType : string ,
122+ ) {
114123 try {
115124 const buffer = Buffer . from ( bytes ) ;
116125 const dataUrl = `data:${ fileType } ;base64,${ buffer . toString ( "base64" ) } ` ;
117- const uploadResult = await cloudinary . v2 . uploader . unsigned_upload ( dataUrl , uploadPreset ) as CloudinaryUploadResult ;
118- return [ uploadResult . public_id , uploadResult . secure_url ] ;
126+ const uploadResult = ( await cloudinary . v2 . uploader . unsigned_upload (
127+ dataUrl ,
128+ uploadPreset ,
129+ ) ) as CloudinaryUploadResult ;
130+ return [ uploadResult . public_id , uploadResult . secure_url ] ;
119131 } catch ( e ) {
120- throw ( e ) ;
132+ throw e ;
121133 }
122134}
135+
123136async function CreatePDF ( files : File [ ] ) {
124137 const pdfDoc = await PDFDocument . create ( ) ;
125138
0 commit comments