const fs = require('fs'); const path = require('path'); const db = require('../database'); async function checkInstallation() { const installedFile = fs.existsSync(path.join(__dirname, '..', 'data', '.installed')); let currentVersion = '1.0.0'; let databaseExists = false; let userExists = false; let needsInstall = true; try { // Ler versão const versionPath = path.join(__dirname, '..', 'version.txt'); if (fs.existsSync(versionPath)) { currentVersion = fs.readFileSync(versionPath, 'utf8').trim(); } // Verificar se arquivo .installed existe if (installedFile) { // Verificar se .env existe e tem configurações de banco const envPath = path.join(__dirname, '..', '.env'); const hasEnvConfig = fs.existsSync(envPath); if (hasEnvConfig) { try { // Tentar verificar conexão com banco (sem inicializar se não existir) // Apenas verificar se pool existe e se consegue conectar if (db.db) { // Pool já existe, tentar query simples try { await db.get('SELECT 1 as test'); databaseExists = true; // Verificar se existe pelo menos um usuário const users = await db.all('SELECT COUNT(*) as count FROM users'); userExists = users && users[0] && users[0].count > 0; } catch (error) { // Banco não conectado ou erro databaseExists = false; userExists = false; } } else { // Tentar inicializar se .env tem configurações const envContent = fs.readFileSync(envPath, 'utf8'); if (envContent.includes('DB_HOST') && envContent.includes('DB_NAME')) { // Recarregar .env require('dotenv').config({ path: envPath }); // Tentar conectar try { await db.initDatabase(); databaseExists = true; // Verificar se existe pelo menos um usuário const users = await db.all('SELECT COUNT(*) as count FROM users'); userExists = users && users[0] && users[0].count > 0; } catch (error) { databaseExists = false; userExists = false; } } } } catch (error) { // Erro ao verificar banco databaseExists = false; userExists = false; } } // Se tem arquivo .installed E banco E usuário, está instalado needsInstall = !(installedFile && databaseExists && userExists); } } catch (error) { // Em caso de erro, precisa instalar needsInstall = true; databaseExists = false; userExists = false; } const pkg = require('../package.json'); return { installed: !needsInstall, needsInstall, currentVersion, databaseExists, userExists, newVersion: pkg.version || '2.0.0', hasEnvFile: fs.existsSync(path.join(__dirname, '..', '.env')) }; } module.exports = { checkInstallation };