add new back

This commit is contained in:
2025-10-27 18:58:38 +03:00
parent a6065dd95c
commit 6c190b80fb
16 changed files with 996 additions and 147 deletions

View File

@@ -0,0 +1,171 @@
const express = require('express');
const router = express.Router();
const { verifyToken } = require('../middleware/auth');
const Request = require('../models/Request');
// Функция для логирования с проверкой DEV переменной
const log = (message, data = '') => {
if (process.env.DEV === 'true') {
if (data) {
console.log(message, data);
} else {
console.log(message);
}
}
};
// GET /requests/sent - получить отправленные запросы
router.get('/sent', verifyToken, async (req, res) => {
try {
const companyId = req.user.companyId;
const requests = await Request.find({ senderCompanyId: companyId })
.sort({ createdAt: -1 })
.exec();
log('[Requests] Returned', requests.length, 'sent requests for company', companyId);
res.json(requests);
} catch (error) {
console.error('[Requests] Error fetching sent requests:', error.message);
res.status(500).json({ error: error.message });
}
});
// GET /requests/received - получить полученные запросы
router.get('/received', verifyToken, async (req, res) => {
try {
const companyId = req.user.companyId;
const requests = await Request.find({ recipientCompanyId: companyId })
.sort({ createdAt: -1 })
.exec();
log('[Requests] Returned', requests.length, 'received requests for company', companyId);
res.json(requests);
} catch (error) {
console.error('[Requests] Error fetching received requests:', error.message);
res.status(500).json({ error: error.message });
}
});
// POST /requests - создать запрос
router.post('/', verifyToken, async (req, res) => {
try {
const { text, recipientCompanyIds, productId, files } = req.body;
const senderCompanyId = req.user.companyId;
if (!text || !recipientCompanyIds || !Array.isArray(recipientCompanyIds) || recipientCompanyIds.length === 0) {
return res.status(400).json({ error: 'text and recipientCompanyIds array required' });
}
// Отправить запрос каждой компании
const results = [];
for (const recipientCompanyId of recipientCompanyIds) {
try {
const request = new Request({
senderCompanyId,
recipientCompanyId,
text,
productId,
files: files || [],
status: 'pending'
});
await request.save();
results.push({
companyId: recipientCompanyId,
success: true,
message: 'Request sent successfully'
});
log('[Requests] Request sent to company:', recipientCompanyId);
} catch (err) {
results.push({
companyId: recipientCompanyId,
success: false,
message: err.message
});
}
}
// Сохранить отчет
const report = {
text,
result: results,
createdAt: new Date()
};
res.status(201).json({
id: 'bulk-' + Date.now(),
...report,
files: files || []
});
} catch (error) {
console.error('[Requests] Error creating request:', error.message);
res.status(500).json({ error: error.message });
}
});
// PUT /requests/:id - ответить на запрос
router.put('/:id', verifyToken, async (req, res) => {
try {
const { id } = req.params;
const { response, status } = req.body;
const request = await Request.findById(id);
if (!request) {
return res.status(404).json({ error: 'Request not found' });
}
// Только получатель может ответить на запрос
if (request.recipientCompanyId !== req.user.companyId) {
return res.status(403).json({ error: 'Not authorized' });
}
request.response = response;
request.status = status || 'accepted';
request.respondedAt = new Date();
request.updatedAt = new Date();
await request.save();
log('[Requests] Request responded:', id);
res.json(request);
} catch (error) {
console.error('[Requests] Error responding to request:', error.message);
res.status(500).json({ error: error.message });
}
});
// DELETE /requests/:id - удалить запрос
router.delete('/:id', verifyToken, async (req, res) => {
try {
const { id } = req.params;
const request = await Request.findById(id);
if (!request) {
return res.status(404).json({ error: 'Request not found' });
}
// Может удалить отправитель или получатель
if (request.senderCompanyId !== req.user.companyId && request.recipientCompanyId !== req.user.companyId) {
return res.status(403).json({ error: 'Not authorized' });
}
await Request.findByIdAndDelete(id);
log('[Requests] Request deleted:', id);
res.json({ message: 'Request deleted successfully' });
} catch (error) {
console.error('[Requests] Error deleting request:', error.message);
res.status(500).json({ error: error.message });
}
});
module.exports = router;