import express from 'express';
import path from 'path';
import fs from 'fs';
import WorkflowManagerTool from './WorkflowManagerTool.js';
import multer, { diskStorage, Multer } from 'multer';
export class WorkflowManagerToolInterface {
private tool: WorkflowManagerTool;
private outputBaseDir: string;
constructor() {
// Définir le répertoire de sortie pour les fichiers de workflow
this.outputBaseDir = process.env.WORKFLOW_OUTPUT_DIR || path.join(process.cwd(), 'output', 'workflows');
// Créer le répertoire s'il n'existe pas
if (!fs.existsSync(this.outputBaseDir)) {
fs.mkdirSync(this.outputBaseDir, { recursive: true });
}
// Créer une instance de WorkflowManagerTool
this.tool = new WorkflowManagerTool();
}
registerRoutes(app: express.Application) {
// Configuration de multer pour l'upload de fichiers
const storage = diskStorage({
destination: (req: express.Request, file: Express.Multer.File, cb: (error: Error | null, destination: string) => void) => {
cb(null, this.outputBaseDir);
},
filename: (req: express.Request, file: Express.Multer.File, cb: (error: Error | null, filename: string) => void) => {
cb(null, `${Date.now()}-${file.originalname}`);
}
});
const upload = multer({ storage }) as Multer;
// Route pour lister les workflows
app.get('/api/workflow-manager/list', async (req: express.Request, res: express.Response) => {
try {
const tags = req.query.tags ? String(req.query.tags).split(',') : undefined;
const result = await this.tool.execute({
action: "list",
tags
});
return res.json(result);
} catch (error: unknown) {
console.error('Erreur lors du listage des workflows:', error);
const errorMessage = error instanceof Error ? error.message : String(error);
return res.status(500).json({
success: false,
message: `Erreur: ${errorMessage}`
});
}
});
// Route pour récupérer un workflow
app.get('/api/workflow-manager/get/:id', async (req: express.Request, res: express.Response) => {
try {
const { id } = req.params;
const result = await this.tool.execute({
action: "get",
workflowId: id
});
return res.json(result);
} catch (error: unknown) {
console.error('Erreur lors de la récupération du workflow:', error);
const errorMessage = error instanceof Error ? error.message : String(error);
return res.status(500).json({
success: false,
message: `Erreur: ${errorMessage}`
});
}
});
// Route pour créer un workflow
app.post('/api/workflow-manager/create', async (req: express.Request, res: express.Response) => {
try {
const workflowData = req.body;
const result = await this.tool.execute({
action: "create",
workflowData
});
return res.json(result);
} catch (error: unknown) {
console.error('Erreur lors de la création du workflow:', error);
const errorMessage = error instanceof Error ? error.message : String(error);
return res.status(500).json({
success: false,
message: `Erreur: ${errorMessage}`
});
}
});
// Route pour mettre à jour un workflow
app.put('/api/workflow-manager/update/:id', async (req: express.Request, res: express.Response) => {
try {
const { id } = req.params;
const workflowData = req.body;
const result = await this.tool.execute({
action: "update",
workflowId: id,
workflowData
});
return res.json(result);
} catch (error: unknown) {
console.error('Erreur lors de la mise à jour du workflow:', error);
const errorMessage = error instanceof Error ? error.message : String(error);
return res.status(500).json({
success: false,
message: `Erreur: ${errorMessage}`
});
}
});
// Route pour supprimer un workflow
app.delete('/api/workflow-manager/delete/:id', async (req: express.Request, res: express.Response) => {
try {
const { id } = req.params;
const result = await this.tool.execute({
action: "delete",
workflowId: id
});
return res.json(result);
} catch (error: unknown) {
console.error('Erreur lors de la suppression du workflow:', error);
const errorMessage = error instanceof Error ? error.message : String(error);
return res.status(500).json({
success: false,
message: `Erreur: ${errorMessage}`
});
}
});
// Route pour exporter un workflow
app.get('/api/workflow-manager/export/:id', async (req: express.Request, res: express.Response) => {
try {
const { id } = req.params;
const workflowPath = path.join(this.outputBaseDir, `workflow-${id}.json`);
const result = await this.tool.execute({
action: "export",
workflowId: id,
workflowPath
});
if (result.success) {
return res.download(workflowPath, `workflow-${id}.json`);
} else {
return res.status(500).json(result);
}
} catch (error: unknown) {
console.error('Erreur lors de l\'exportation du workflow:', error);
const errorMessage = error instanceof Error ? error.message : String(error);
return res.status(500).json({
success: false,
message: `Erreur: ${errorMessage}`
});
}
});
// Route pour importer un workflow
app.post('/api/workflow-manager/import', upload.single('workflow'), async (req: express.Request & { file?: Express.Multer.File }, res: express.Response) => {
try {
if (!req.file) {
return res.status(400).json({
success: false,
message: "Aucun fichier n'a été téléchargé"
});
}
const workflowPath = req.file.path;
const result = await this.tool.execute({
action: "import",
workflowPath
});
return res.json(result);
} catch (error: unknown) {
console.error('Erreur lors de l\'importation du workflow:', error);
const errorMessage = error instanceof Error ? error.message : String(error);
return res.status(500).json({
success: false,
message: `Erreur: ${errorMessage}`
});
}
});
}
}