v1.0
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* 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' });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user