// // 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'; import { sendToSession } from '../services/websocketManager.js'; export const renderHome = (req, res) => { const sessionId = generateId(); const data = getDefaultData(); renderView(res, { ...data, sessionId }); }; export const handleAction = async (req, res) => { const sessionId = req.body.sessionId || generateId(); const { action, prompt, model, size, imageIndex } = req.body; let data = getStorage(sessionId) || getDefaultData(); switch(action) { case 'delete': return handleDelete( sessionId, imageIndex, data, res ); case 'cancel': return handleCancel(sessionId, res); case 'generate': return handleGenerate( sessionId, prompt, model, size, data, res ); default: return res.json({ success: false, error: 'Invalid action' }); } }; const handleDelete = ( sessionId, imageIndex, data, res ) => { if (validateImageIndex( imageIndex, data.images.length )) { data.images.splice(parseInt(imageIndex), 1); setStorage(sessionId, data); sendToSession(sessionId, { type: 'imageDeleted', images: data.images }); } return res.json({ success: true, images: data.images }); }; const handleCancel = (sessionId, res) => { cancelGeneration(sessionId); sendToSession(sessionId, { type: 'generationCancelled' }); return res.json({ success: true }); }; const handleGenerate = async ( sessionId, prompt, model, size, data, res ) => { const trimmedPrompt = prompt?.trim() || ''; if (!validateGenerationParams( trimmedPrompt, model, size )) { return res.json({ success: false, error: 'Please fill in all required fields' }); } if (!validateApiConfig()) { return res.json({ success: false, error: 'API configuration missing' }); } data.isGenerating = true; data.progress = 0; data.error = null; setStorage(sessionId, data); sendToSession(sessionId, { type: 'generationStarted', progress: 0 }); res.json({ success: true, sessionId }); await generateImage( sessionId, trimmedPrompt, model, size ); };