From ba185c0cf5d4bc333617c12893812b502ac5d538 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 15 Jul 2025 15:17:35 +0530 Subject: [PATCH] views --- src/controllers/documentsController.js | 35 ++++++++++++++++++++++++++ src/middlewares/security.js | 7 ++++++ src/routes/documents.js | 6 ++++- 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/controllers/documentsController.js b/src/controllers/documentsController.js index ecce4e2..c3b02a3 100644 --- a/src/controllers/documentsController.js +++ b/src/controllers/documentsController.js @@ -462,4 +462,39 @@ exports.deleteDocument = async (req, res) => { console.error('Error deleting document:', error.message); res.status(500).json({ error: 'Internal server error' }); } +}; + +// Update document views (always increment by 1, public) +exports.updateDocumentViews = async (req, res) => { + try { + const { id } = req.params; + + if (!id) { + return res.status(400).json({ error: 'Document ID is required' }); + } + + // Fetch the document + const documentQuery = 'SELECT * FROM documents WHERE id = ?'; + const documentResult = await db.query(documentQuery, [id]); + + + + if (documentResult.length === 0) { + return res.status(404).json({ error: 'Document not found' }); + } + + // Always increment views by 1 + const updateQuery = 'UPDATE documents SET views = views + 1 WHERE id = ?'; + const updateParams = [id]; + const result = await db.query(updateQuery, updateParams); + + if (result.affectedRows === 0) { + return res.status(404).json({ message: 'Document not found or no changes made' }); + } + + res.status(200).json({ message: 'Document views updated successfully!' }); + } catch (error) { + console.error('Error updating document views:', error.message); + res.status(500).json({ error: 'Internal server error' }); + } }; \ No newline at end of file diff --git a/src/middlewares/security.js b/src/middlewares/security.js index 46fef74..88c4bda 100644 --- a/src/middlewares/security.js +++ b/src/middlewares/security.js @@ -55,6 +55,13 @@ const securityHeaders = helmet({ // Request validation middleware const validateRequest = (req, res, next) => { + // Bypass Content-Type check for public update-views endpoint + if ( + req.method === 'PUT' && + req.path.startsWith('/documents/update-views') + ) { + return next(); + } if (['POST', 'PUT'].includes(req.method) && !req.is('application/json') && !req.is('multipart/form-data')) { return res.status(415).json({ status: 'error', diff --git a/src/routes/documents.js b/src/routes/documents.js index 55ee1e4..e56733d 100644 --- a/src/routes/documents.js +++ b/src/routes/documents.js @@ -64,6 +64,11 @@ router.put( documentController.updateDocumentStatus ); +router.put( + '/update-views/:id', + documentController.updateDocumentViews +); + router.delete( '/delete/:id', authMiddleware.authenticateToken, @@ -72,5 +77,4 @@ router.delete( ); - module.exports = router;