diff --git a/manager/services/database.js b/manager/services/database.js index b79049d..bcaecb4 100644 --- a/manager/services/database.js +++ b/manager/services/database.js @@ -72,25 +72,75 @@ export async function getSchoolData() { 'SELECT data FROM school_data WHERE id = 1' ); const data = rows[0]?.data || {}; + const legacyAiConfig = data.aiConfig || {}; try { const aiRes = await pool.query('SELECT * FROM configuracoes_ia WHERE id = 1'); if (aiRes.rows[0]) { const dbConfig = aiRes.rows[0]; + + const geminiKey = dbConfig.gemini_key || legacyAiConfig.geminiKey || ''; + const openaiKey = dbConfig.openai_key || legacyAiConfig.openaiKey || ''; + const claudeKey = dbConfig.claude_key || legacyAiConfig.claudeKey || ''; + const openrouterKey = dbConfig.openrouter_key || legacyAiConfig.openrouterKey || ''; + data.aiConfig = { - activeProvider: dbConfig.active_provider, - geminiKey: dbConfig.gemini_key || '', - openaiKey: dbConfig.openai_key || '', - claudeKey: dbConfig.claude_key || '', - openrouterKey: dbConfig.openrouter_key || '', - geminiModel: dbConfig.gemini_model || 'gemini-1.5-flash', - openaiModel: dbConfig.openai_model || 'gpt-4o-mini', - claudeModel: dbConfig.claude_model || 'claude-3-5-sonnet-20241022', - openrouterModel: dbConfig.openrouter_model || 'google/gemini-2.5-flash', - activeImageProvider: dbConfig.active_image_provider || 'gemini', - openaiImageModel: dbConfig.openai_image_model || 'dall-e-3', - geminiImageModel: dbConfig.gemini_image_model || 'imagen-3.0-generate-002' + activeProvider: dbConfig.active_provider || legacyAiConfig.activeProvider || 'gemini', + geminiKey, + openaiKey, + claudeKey, + openrouterKey, + geminiModel: dbConfig.gemini_model || legacyAiConfig.geminiModel || 'gemini-1.5-flash', + openaiModel: dbConfig.openai_model || legacyAiConfig.openaiModel || 'gpt-4o-mini', + claudeModel: dbConfig.claude_model || legacyAiConfig.claudeModel || 'claude-3-5-sonnet-20241022', + openrouterModel: dbConfig.openrouter_model || legacyAiConfig.openrouterModel || 'google/gemini-2.5-flash', + activeImageProvider: dbConfig.active_image_provider || legacyAiConfig.activeImageProvider || 'gemini', + openaiImageModel: dbConfig.openai_image_model || legacyAiConfig.openaiImageModel || 'dall-e-3', + geminiImageModel: dbConfig.gemini_image_model || legacyAiConfig.geminiImageModel || 'gemini-2.5-flash-image' }; + + const precisaMigrar = + (legacyAiConfig.geminiKey && !dbConfig.gemini_key) || + (legacyAiConfig.openaiKey && !dbConfig.openai_key) || + (legacyAiConfig.claudeKey && !dbConfig.claude_key) || + (legacyAiConfig.openrouterKey && !dbConfig.openrouter_key); + + if (precisaMigrar) { + console.log('[Database:Migration] Migrando chaves de IA do JSON legado para a nova tabela configuracoes_ia...'); + pool.query( + `UPDATE configuracoes_ia SET + active_provider = $1, + gemini_key = $2, + openai_key = $3, + claude_key = $4, + openrouter_key = $5, + gemini_model = $6, + openai_model = $7, + claude_model = $8, + openrouter_model = $9, + active_image_provider = $10, + openai_image_model = $11, + gemini_image_model = $12, + updated_at = NOW() + WHERE id = 1`, + [ + data.aiConfig.activeProvider, + data.aiConfig.geminiKey, + data.aiConfig.openaiKey, + data.aiConfig.claudeKey, + data.aiConfig.openrouterKey, + data.aiConfig.geminiModel, + data.aiConfig.openaiModel, + data.aiConfig.claudeModel, + data.aiConfig.openrouterModel, + data.aiConfig.activeImageProvider, + data.aiConfig.openaiImageModel, + data.aiConfig.geminiImageModel + ] + ).catch(err => { + console.error('[Database:Migration] Erro ao migrar chaves de IA:', err.message); + }); + } } } catch (err) { console.warn('[Database] Erro ao mesclar configuracoes_ia no school_data:', err.message);