const { fetchPagedRows } = require('./utils'); async function fetchCanvasSizesData(pool) { const [canvasSizes] = await pool.query('SELECT id, name, width, height, created_at, modified_at, created_by, modified_by FROM canvas_sizes ORDER BY width ASC, height ASC, name ASC'); return { canvasSizes }; } async function fetchCanvasSizesPage(pool, page, pageSize, searchTerm, sortKey, sortDirection) { const paged = await fetchPagedRows(pool, { selectSql: 'SELECT id, name, width, height, created_at, modified_at, created_by, modified_by FROM canvas_sizes ORDER BY width ASC, height ASC, name ASC', countSql: 'SELECT COUNT(*) AS count FROM canvas_sizes', searchColumns: ['name', 'width', 'height'], searchTerm: searchTerm, sortColumns: { name: 'name', dimensions: ['width', 'height', 'name'], created: 'created_at', modified: 'modified_at' }, sortKey: sortKey, sortDirection: sortDirection, page: page, pageSize: pageSize }); return Object.assign({ canvasSizes: paged.rows }, paged); } async function fetchCanvasSizeById(pool, id) { const [rows] = await pool.query('SELECT id, name, width, height, created_at, modified_at, created_by, modified_by FROM canvas_sizes WHERE id = ?', [id]); return rows[0] || null; } function buildCanvasSizePayload(req, existingCanvasSize) { const name = String(req.body.name || '').trim(); const width = Math.max(1, Number(req.body.width || (existingCanvasSize && existingCanvasSize.width) || 0)); const height = Math.max(1, Number(req.body.height || (existingCanvasSize && existingCanvasSize.height) || 0)); if (!name) { const error = new Error('Canvas size name is required.'); error.statusCode = 400; throw error; } return { name, width, height }; } module.exports = { fetchCanvasSizesData, fetchCanvasSizesPage, fetchCanvasSizeById, buildCanvasSizePayload };