добавление фаилов исполнителем

This commit is contained in:
2026-02-05 16:39:49 +05:00
parent 689000798e
commit 699bdf6961
2 changed files with 101 additions and 30 deletions

View File

@@ -1270,43 +1270,77 @@ app.get('/api/document-approval-tasks', requireAuth, (req, res) => {
});
});
app.post('/api/tasks/:taskId/files', requireAuth, upload.array('files', 15), (req, res) => {
const { taskId } = req.params;
const userId = req.session.user.id;
app.post('/api/tasks/:taskId/files', requireAuth, upload.array('files', 15), (req, res) => {
const { taskId } = req.params;
const userId = req.session.user.id;
if (!req.files || req.files.length === 0) {
return res.status(400).json({ error: 'Нет файлов для загрузки' });
if (!req.files || req.files.length === 0) {
return res.status(400).json({ error: 'Нет файлов для загрузки' });
}
// Проверяем доступ к задаче через checkTaskAccess
const { checkTaskAccess } = require('./database');
checkTaskAccess(userId, taskId, (err, hasAccess) => {
if (err || !hasAccess) {
return res.status(403).json({ error: 'Нет доступа к задаче' });
}
db.get("SELECT created_by, status, closed_at FROM tasks WHERE id = ?", [taskId], (err, task) => {
// Дополнительно проверяем, что задача активна
db.get("SELECT status, closed_at FROM tasks WHERE id = ?", [taskId], (err, task) => {
if (err || !task) {
return res.status(404).json({ error: 'Задача не найдена' });
}
// Проверяем права на загрузку файлов
if (!canUserEditTask(task, req.session.user)) {
return res.status(403).json({ error: 'У вас нет прав для загрузки файлов в эту задачу' });
if (task.closed_at) {
return res.status(400).json({ error: 'Задача уже закрыта' });
}
const userFolder = createUserTaskFolder(taskId, req.session.user.login);
req.files.forEach(file => {
const newPath = path.join(userFolder, path.basename(file.filename));
fs.renameSync(file.path, newPath);
const uploadPromises = req.files.map(file => {
return new Promise((resolve, reject) => {
const newPath = path.join(userFolder, path.basename(file.filename));
fs.renameSync(file.path, newPath);
const originalName = file.originalname;
const originalName = file.originalname;
db.run(
"INSERT INTO task_files (task_id, user_id, filename, original_name, file_path, file_size) VALUES (?, ?, ?, ?, ?, ?)",
[taskId, userId, path.basename(file.filename), originalName, newPath, file.size]
);
logActivity(taskId, userId, 'FILE_UPLOADED', `Загружен файл: ${originalName}`);
db.run(
"INSERT INTO task_files (task_id, user_id, filename, original_name, file_path, file_size) VALUES (?, ?, ?, ?, ?, ?)",
[taskId, userId, path.basename(file.filename), originalName, newPath, file.size],
function(err) {
if (err) {
reject(err);
return;
}
logActivity(taskId, userId, 'FILE_UPLOADED', `Загружен файл: ${originalName}`);
resolve({
id: this.lastID,
originalName,
size: file.size
});
}
);
});
});
res.json({ success: true, message: 'Файлы успешно загружены' });
Promise.all(uploadPromises)
.then((uploadedFiles) => {
res.json({
success: true,
message: 'Файлы успешно загружены',
files: uploadedFiles,
count: uploadedFiles.length
});
})
.catch((error) => {
console.error('Ошибка при загрузке файлов:', error);
res.status(500).json({ error: 'Ошибка при сохранении файлов в БД' });
});
});
});
});
// API для получения одной задачи
app.get('/api/tasks/:taskId', requireAuth, (req, res) => {