/** * Layout optimization routes */ import { optimizeLayout, quickOptimize, suggestInitialLayout } from '../services/layoutOptimizer.js'; import pool from '../db/index.js'; /** * POST /api/layout/optimize * Optimize module layout using AI */ export async function optimizeLayoutRoute(req, res) { try { const { config, lockedModuleIds = [] } = req.body; if (!config) { return res.status(400).json({ error: 'Configuration requise' }); } // Fetch available modules from catalog const { rows: availableModules } = await pool.query( 'SELECT * FROM modules WHERE active = 1 ORDER BY category, width_mm' ); if (availableModules.length === 0) { return res.status(400).json({ error: 'Aucun module disponible dans le catalogue' }); } const result = await optimizeLayout(config, availableModules, lockedModuleIds); res.json(result); } catch (error) { console.error('Layout optimization error:', error); res.status(500).json({ error: error.message || 'Erreur d\'optimisation' }); } } /** * POST /api/layout/quick-optimize * Quick local optimization without AI */ export async function quickOptimizeRoute(req, res) { try { const { config, lockedModuleIds = [] } = req.body; if (!config) { return res.status(400).json({ error: 'Configuration requise' }); } const result = quickOptimize(config, lockedModuleIds); res.json(result); } catch (error) { console.error('Quick optimization error:', error); res.status(500).json({ error: error.message || 'Erreur d\'optimisation' }); } } /** * GET /api/layout/suggest?width=2400 * Suggest initial layout for given width */ export async function suggestLayoutRoute(req, res) { try { const totalWidth = parseInt(req.query.width) || 2400; // Fetch available modules const { rows: availableModules } = await pool.query( 'SELECT * FROM modules WHERE active = 1 ORDER BY category, width_mm' ); if (availableModules.length === 0) { return res.status(400).json({ error: 'Aucun module disponible' }); } const suggestions = suggestInitialLayout(totalWidth, availableModules); res.json({ success: true, modules: suggestions, totalWidth }); } catch (error) { console.error('Layout suggestion error:', error); res.status(500).json({ error: error.message || 'Erreur de suggestion' }); } }