// // SPDX-FileCopyrightText: Hadad // SPDX-License-Identifier: Apache-2.0 // import config from '../../config.js'; import { generateId } from '../utils/idGenerator.js'; import { validateGenerationParams, validateApiConfig, validateImageIndex } from '../utils/validators.js'; import { getStorage, setStorage, getDefaultData } from '../services/storageManager.js'; import { generateImage, cancelGeneration } from '../services/imageGenerator.js'; import { renderView } from '../utils/viewRenderer.js'; export const renderHome = (req, res) => { const requestId = req.query.rid || generateId(); const data = getStorage(requestId) || getDefaultData(); renderView(res, { ...data, requestId }); }; export const handleAction = async (req, res) => { const requestId = req.body.requestId || generateId(); const { action, prompt, model, size, imageIndex } = req.body; let data = getStorage(requestId) || getDefaultData(); switch(action) { case 'delete': return handleDelete( requestId, imageIndex, data, res ); case 'cancel': return handleCancel(requestId, res); case 'generate': return handleGenerate( requestId, prompt, model, size, data, res ); default: return res.redirect(`/?rid=${requestId}`); } }; const handleDelete = ( requestId, imageIndex, data, res ) => { if (validateImageIndex( imageIndex, data.images.length )) { data.images.splice(parseInt(imageIndex), 1); setStorage(requestId, data); } return res.redirect(`/?rid=${requestId}`); }; const handleCancel = (requestId, res) => { cancelGeneration(requestId); return res.redirect(`/?rid=${requestId}`); }; const handleGenerate = async ( requestId, prompt, model, size, data, res ) => { const trimmedPrompt = prompt?.trim() || ''; if (!validateGenerationParams( trimmedPrompt, model, size )) { data.error = 'Please fill in all required fields'; setStorage(requestId, data); return renderView(res, { ...data, requestId }); } if (!validateApiConfig()) { data.error = 'The server is currently busy. ' + 'Please try again later.'; setStorage(requestId, data); return renderView(res, { ...data, requestId }); } data.isGenerating = true; data.progress = 50; data.error = null; setStorage(requestId, data); res.redirect(`/?rid=${requestId}`); await generateImage( requestId, trimmedPrompt, model, size ); };