forked from rohit/spurrin-backend
views per user
This commit is contained in:
parent
7531702923
commit
fb257a22c3
@ -526,34 +526,83 @@ exports.logDocumentView = async (req, res) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// GET /documents/:id/views
|
// GET /documents/:id/views
|
||||||
exports.getDocumentViewCount = async (req, res) => {
|
// GET /documents/views
|
||||||
const documentId = parseInt(req.params.id);
|
exports.getDocumentsViewDetailsByHospital = async (req, res) => {
|
||||||
|
|
||||||
if (!documentId) {
|
|
||||||
return res.status(400).json({ error: 'Document ID is required' });
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const query = `
|
const userId = req.user.id;
|
||||||
SELECT
|
const hospitalCode = req.user.hospital_code;
|
||||||
document_id,
|
|
||||||
user_id AS viewed_by,
|
|
||||||
user_role,
|
|
||||||
viewed_at
|
|
||||||
FROM document_views
|
|
||||||
WHERE document_id = ?
|
|
||||||
ORDER BY viewed_at DESC
|
|
||||||
`;
|
|
||||||
|
|
||||||
const [views] = await db.query(query, [documentId]);
|
if (!userId || !hospitalCode) {
|
||||||
|
return res.status(400).json({ error: 'User ID and hospital code are required' });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get hospital_id from hospital_users using hospital_code
|
||||||
|
const hospitalUsers = await db.query(
|
||||||
|
`SELECT hospital_id FROM hospital_users WHERE hospital_code = ?`,
|
||||||
|
[hospitalCode]
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!hospitalUsers.length) {
|
||||||
|
return res.status(404).json({ error: 'Hospital not found for user' });
|
||||||
|
}
|
||||||
|
|
||||||
|
const hospitalId = hospitalUsers[0].hospital_id;
|
||||||
|
|
||||||
|
// Get all documents for this hospital
|
||||||
|
const documents = await db.query(
|
||||||
|
`SELECT id, file_name, file_url, processed_status, uploaded_by, uploaded_at FROM documents WHERE hospital_id = ?`,
|
||||||
|
[hospitalId]
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!documents.length) {
|
||||||
|
return res.status(200).json({ total: 0, documents: [] });
|
||||||
|
}
|
||||||
|
|
||||||
|
const documentIds = documents.map(doc => doc.id);
|
||||||
|
const placeholders = documentIds.map(() => '?').join(',');
|
||||||
|
|
||||||
|
// Get all views for these documents
|
||||||
|
const views = await db.query(
|
||||||
|
`SELECT document_id, user_id AS viewed_by, user_role, viewed_at
|
||||||
|
FROM document_views
|
||||||
|
WHERE document_id IN (${placeholders})
|
||||||
|
ORDER BY viewed_at DESC`,
|
||||||
|
documentIds
|
||||||
|
);
|
||||||
|
|
||||||
|
// Group views by document_id
|
||||||
|
const viewsByDocument = {};
|
||||||
|
views.forEach(view => {
|
||||||
|
if (!viewsByDocument[view.document_id]) {
|
||||||
|
viewsByDocument[view.document_id] = [];
|
||||||
|
}
|
||||||
|
viewsByDocument[view.document_id].push({
|
||||||
|
viewed_by: view.viewed_by,
|
||||||
|
user_role: view.user_role,
|
||||||
|
viewed_at: view.viewed_at,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Combine documents with their views, totalViews, and whether current user has viewed
|
||||||
|
const result = documents.map(doc => {
|
||||||
|
const docViews = viewsByDocument[doc.id] || [];
|
||||||
|
const userViewed = docViews.some(v => v.viewed_by === userId);
|
||||||
|
|
||||||
|
return {
|
||||||
|
...doc,
|
||||||
|
totalViews: docViews.length,
|
||||||
|
views: docViews,
|
||||||
|
viewed: userViewed,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
documentId,
|
total: result.length,
|
||||||
totalViews: views.length,
|
documents: result,
|
||||||
views,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching view details:', error.message);
|
console.error('Error fetching documents with view details:', error.message);
|
||||||
res.status(500).json({ message: 'Error fetching view details' });
|
res.status(500).json({ message: 'Internal server error' });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -77,7 +77,7 @@ router.delete(
|
|||||||
);
|
);
|
||||||
|
|
||||||
router.post('/:id/view', authMiddleware.authenticateToken, documentController.logDocumentView);
|
router.post('/:id/view', authMiddleware.authenticateToken, documentController.logDocumentView);
|
||||||
router.get('/:id/views',authMiddleware.authenticateToken, documentController.getDocumentViewCount);
|
router.get('/user/status',authMiddleware.authenticateToken, documentController.getDocumentsViewDetailsByHospital);
|
||||||
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
Loading…
Reference in New Issue
Block a user