Files
apex/server/routes/layout.js
T
2026-02-13 00:21:53 +01:00

83 lines
2.3 KiB
JavaScript

/**
* 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' });
}
}