Files
intelaide/intelaide-backend/controllers/assistantController.js
2026-01-20 04:54:10 +00:00

156 lines
5.1 KiB
JavaScript

// backend/controllers/assistantController.js
import pool from '../config/db.js';
export const createAssistant = async (req, res) => {
const { assistant_name } = req.body;
const user_id = req.userId; // Extracted from auth middleware
if (!assistant_name) {
return res.status(400).json({ message: 'Assistant name is required' });
}
try {
const [result] = await pool.execute(
'INSERT INTO ai_assistants (user_id, assistant_name) VALUES (?, ?)',
[user_id, assistant_name]
);
res.status(201).json({ id: result.insertId, message: 'Assistant created successfully' });
} catch (error) {
console.error('Database Error:', error);
res.status(500).json({ message: 'An unexpected error occurred. Please try again.' });
}
};
export const getAssistantById = async (req, res) => {
const { id } = req.params;
const user_id = req.userId; // comes from auth middleware
try {
const [rows] = await pool.execute(
'SELECT id, assistant_name, created_at FROM ai_assistants WHERE id = ? AND user_id = ?',
[id, user_id]
);
if (rows.length === 0) {
return res.status(404).json({ message: 'Assistant not found' });
}
res.json(rows[0]);
} catch (error) {
console.error('Error retrieving assistant:', error);
res.status(500).json({ message: 'Error retrieving assistant. Please try again later.' });
}
};
export const getAssistants = async (req, res) => {
const user_id = req.userId;
try {
const [assistants] = await pool.execute(
'SELECT id, assistant_name, created_at FROM ai_assistants WHERE user_id = ?',
[user_id]
);
res.json(assistants);
} catch (error) {
console.error('Database Error:', error);
res.status(500).json({ message: 'An unexpected error occurred. Please try again.' });
}
};
export const deleteAssistant = async (req, res) => {
const { id } = req.params;
const user_id = req.userId;
try {
const [result] = await pool.execute(
'DELETE FROM ai_assistants WHERE id = ? AND user_id = ?',
[id, user_id]
);
if (result.affectedRows === 0) {
return res.status(404).json({ message: 'Assistant not found or unauthorized' });
}
res.json({ message: 'Assistant deleted successfully' });
} catch (error) {
console.error('Database Error:', error);
res.status(500).json({ message: 'An unexpected error occurred. Please try again.' });
}
};
export const assignFileToAssistant = async (req, res) => {
const { assistantId, fileId } = req.params;
const user_id = req.userId;
try {
const [existingAssignment] = await pool.execute(
'SELECT * FROM assistant_files WHERE assistant_id = ? AND file_id = ?',
[assistantId, fileId]
);
if (existingAssignment.length > 0) {
return res.status(400).json({ message: 'File is already assigned to this assistant' });
}
await pool.execute(
'INSERT INTO assistant_files (assistant_id, file_id) VALUES (?, ?)',
[assistantId, fileId]
);
res.json({ message: 'File assigned to assistant successfully' });
} catch (error) {
console.error('Database Error:', error);
res.status(500).json({ message: 'An unexpected error occurred. Please try again.' });
}
};
export const getFilesByAssistant = async (req, res) => {
const { assistantId } = req.params;
const user_id = req.userId;
try {
const [files] = await pool.execute(
`SELECT f.id, f.file_name, f.file_path, f.file_type, f.status
FROM assistant_files af
JOIN files f ON af.file_id = f.id
WHERE af.assistant_id = ? AND f.user_id = ?`,
[assistantId, user_id]
);
if (files.length === 0) {
return res.json([]); // Return an empty array
}
res.json(files);
} catch (error) {
console.error('Database Error:', error);
res.status(500).json({ message: 'An unexpected error occurred. Please try again.' });
}
};
export const assignMultipleFilesToAssistant = async (req, res) => {
const { assistantId } = req.params;
const { fileIds } = req.body; // Expect an array of file IDs
if (!fileIds || !Array.isArray(fileIds) || fileIds.length === 0) {
return res.status(400).json({ message: 'No files selected' });
}
try {
for (let fileId of fileIds) {
await pool.execute(
'INSERT INTO assistant_files (assistant_id, file_id) VALUES (?, ?)',
[assistantId, fileId]
);
}
res.json({ message: 'Files assigned successfully' });
} catch (error) {
console.error('Error assigning files:', error);
res.status(500).json({ message: 'Database error. Please try again.' });
}
};
export const removeFileFromAssistant = async (req, res) => {
const { assistantId, fileId } = req.params;
try {
const [result] = await pool.execute(
'DELETE FROM assistant_files WHERE assistant_id = ? AND file_id = ?',
[assistantId, fileId]
);
if (result.affectedRows === 0) {
return res.status(404).json({ message: 'File not found in assistant or unauthorized' });
}
res.json({ message: 'File removed from assistant successfully' });
} catch (error) {
console.error('Database Error:', error);
res.status(500).json({ message: 'An unexpected error occurred. Please try again.' });
}
};