добавление фаилов исполнителем
This commit is contained in:
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user