-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpdfControllers.js
More file actions
112 lines (104 loc) Β· 4.22 KB
/
pdfControllers.js
File metadata and controls
112 lines (104 loc) Β· 4.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
const responseObjects = require("../helpers/response-objects");
const Pdf = require("../models/pdf");
const gfsFun = require("../config/gridfs");
const addPdfToDb = async (req, res) => {
try {
if (!req.file) {
return responseObjects.badRequest(res, null, 'No file found', 'No file found');
}
const isCaptionImageIsExist = await Pdf.findOne({ pdfCaption: req.body.caption });
if (isCaptionImageIsExist) {
return responseObjects.conflict(res, null, 'Image already exists', "Image already exists");
}
const newPdf = new Pdf({
pdfCaption: req.body.caption,
pdfFileName: req.file.filename,
pdfFileId: req.file.id,
});
await newPdf.save();
return responseObjects.created(res, newPdf, 'Pdf added successfully', 'Pdf added successfully');
} catch (error) {
return responseObjects.error(res, error, 'Internal server error', 'Internal server error');
}
}
const getAllPdfsFromDb = async (req, res) => {
try {
const pdfs = await Pdf.find({}).lean();
return responseObjects.success(res, pdfs, 'Pdfs fetched successfully', 'Pdfs fetched successfully');
} catch (error) {
return responseObjects.error(res, error, 'Internal server error', 'Internal server error');
}
}
const deletePdfFromDb = async (req, res) => {
try {
const isPdfExist = await Pdf.findOne({ _id: req.params.id });
if (!isPdfExist) {
return responseObjects.notFound(res, null, 'Pdf not found', 'Pdf not found');
}
const deletedPdf = await Pdf.deleteOne({ _id: req.params.id });
return responseObjects.success(res, deletedPdf, 'Pdf deleted successfully', 'Pdf deleted successfully');
} catch (error) {
return responseObjects.error(res, error, 'Internal server error', 'Internal server error');
}
}
const fetchMostRecentPdf = async (req, res) => {
try {
const pdf = await Pdf.findOne({}, {}, { sort: { '_id': -1 } });
return responseObjects.success(res, pdf, 'Pdf fetched successfully', 'Pdf fetched successfully');
} catch (error) {
return responseObjects.error(res, error, 'Internal server error', 'Internal server error');
}
}
const uploadMultipleFiles = async (req, res) => {
try {
const files = req?.files;
if (!files) {
return responseObjects.badRequest(res, null, 'No files found', 'No files found');
}
let pdfs = [];
files.map(async (file) => {
const newPdf = new Pdf({
pdfCaption: req.body.caption,
pdfFileName: file.filename,
pdfFileId: file.id,
});
pdfs.push(newPdf);
});
await Pdf.insertMany(pdfs);
return responseObjects.created(res, pdfs, 'Pdfs added successfully', 'Pdfs added successfully');
} catch (error) {
return responseObjects.error(res, error, 'Internal server error', 'Internal server error');
}
}
const renderPdf = async (req, res) => {
try {
const fileName = req.params.filename;
const pdf = await Pdf.findOne({ pdfFileName: fileName });
if (!pdf) {
return responseObjects.notFound(res, null, 'Pdf not found', 'Pdf not found');
}
const gfs = gfsFun.getGridFS();
const fileFind=await gfs.find({filename:pdf.pdfFileName}).toArray();
if(!fileFind[0]){
return responseObjects.notFound(res, null, 'File not found in GridFS', 'File not found in GridFS');
}
if (fileFind[0].contentType !== 'application/pdf') {
return responseObjects.badRequest(res, null, 'File is not a pdf', 'File is not a pdf');
}
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', `attachment; filename=${pdf.pdfFileName}`);
const downloadStream = gfs.openDownloadStreamByName(pdf.pdfFileName);
downloadStream.pipe(res);
}
catch (error) {
return responseObjects.error(res, error.message, 'Internal server error', 'Internal server error');
}
}
module.exports = {
addPdfToDb,
getAllPdfsFromDb,
deletePdfFromDb,
fetchMostRecentPdf,
uploadMultipleFiles,
renderPdf,
};