const bcrypt = require('bcrypt'); const MariaDBHelper = require('../database/mariadb-helper'); async function initializeMariaDB() { console.log('๐Ÿ—„๏ธ MariaDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™” ์‹œ์ž‘...'); const dbHelper = new MariaDBHelper(); try { // ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ await dbHelper.connect(); console.log('โœ… MariaDB ์—ฐ๊ฒฐ ์„ฑ๊ณต'); // ๊ธฐ๋ณธ ๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑ const adminEmail = 'admin@jaryo.com'; const adminPassword = 'Hee150603!'; const existingUser = await dbHelper.getUserByEmail(adminEmail); if (!existingUser) { const saltRounds = 10; const hashedPassword = await bcrypt.hash(adminPassword, saltRounds); const adminData = { email: adminEmail, password_hash: hashedPassword, name: '๊ด€๋ฆฌ์ž', role: 'admin' }; await dbHelper.createUser(adminData); console.log('๐Ÿ‘ค ๊ธฐ๋ณธ ๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑ๋จ'); console.log('๐Ÿ“ง ์ด๋ฉ”์ผ:', adminEmail); console.log('๐Ÿ”‘ ๋น„๋ฐ€๋ฒˆํ˜ธ:', adminPassword); } else { console.log('๐Ÿ‘ค ๊ด€๋ฆฌ์ž ๊ณ„์ •์ด ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.'); } // ๊ธฐ๋ณธ ์นดํ…Œ๊ณ ๋ฆฌ ํ™•์ธ ๋ฐ ์ƒ์„ฑ const categories = await dbHelper.getCategories(); const defaultCategories = ['๋ฌธ์„œ', '์ด๋ฏธ์ง€', '๋™์˜์ƒ', 'ํ”„๋ ˆ์  ํ…Œ์ด์…˜', '๊ธฐํƒ€']; for (const categoryName of defaultCategories) { const existingCategory = categories.find(cat => cat.name === categoryName); if (!existingCategory) { try { await dbHelper.addCategory(categoryName); console.log(`๐Ÿ“‚ ์นดํ…Œ๊ณ ๋ฆฌ ์ƒ์„ฑ๋จ: ${categoryName}`); } catch (error) { if (error.code === 'ER_DUP_ENTRY') { console.log(`๐Ÿ“‚ ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ฏธ ์กด์žฌ: ${categoryName}`); } else { console.error(`์นดํ…Œ๊ณ ๋ฆฌ ์ƒ์„ฑ ์˜ค๋ฅ˜ (${categoryName}):`, error.message); } } } else { console.log(`๐Ÿ“‚ ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ฏธ ์กด์žฌ: ${categoryName}`); } } console.log('๐ŸŽ‰ MariaDB ์ดˆ๊ธฐํ™” ์™„๋ฃŒ!'); } catch (error) { console.error('โŒ MariaDB ์ดˆ๊ธฐํ™” ์‹คํŒจ:', error); // ์—ฐ๊ฒฐ ์˜ค๋ฅ˜์ธ ๊ฒฝ์šฐ ์ƒ์„ธํ•œ ๋„์›€๋ง ์ œ๊ณต if (error.code === 'ECONNREFUSED' || error.code === 'ENOENT') { console.log('\n๐Ÿ“‹ MariaDB ์—ฐ๊ฒฐ ํ™•์ธ์‚ฌํ•ญ:'); if (process.platform === 'win32') { console.log('๐ŸชŸ Windows ๊ฐœ๋ฐœ ํ™˜๊ฒฝ:'); console.log('1. MariaDB ๋˜๋Š” MySQL์ด ์„ค์น˜๋˜๊ณ  ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ'); console.log('2. ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋˜๋Š” .env ํŒŒ์ผ์— DB ์—ฐ๊ฒฐ ์ •๋ณด ์„ค์ •'); console.log(' - DB_HOST=localhost'); console.log(' - DB_PORT=3306'); console.log(' - DB_USER=root'); console.log(' - DB_PASSWORD=your_password'); console.log(' - DB_NAME=jaryo'); console.log('\n๐Ÿ”ง Windows MySQL/MariaDB ์„ค์ •:'); console.log('CREATE DATABASE jaryo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); console.log('USE jaryo;'); console.log('-- ๊ทธ ๋‹ค์Œ database/mariadb-schema.sql ํŒŒ์ผ ์‹คํ–‰'); } else { console.log('๐Ÿง Linux/NAS ํ™˜๊ฒฝ:'); console.log('1. MariaDB๊ฐ€ ์„ค์น˜๋˜๊ณ  ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ'); console.log('2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค "jaryo"๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ'); console.log('3. ์‚ฌ์šฉ์ž "jaryo_user"๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ'); console.log('4. Unix ์†Œ์ผ“ ๊ฒฝ๋กœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธ: /run/mysqld/mysqld10.sock'); console.log('\n๐Ÿ”ง NAS MariaDB ์„ค์ • ๋ช…๋ น์–ด:'); console.log('CREATE DATABASE jaryo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); console.log('CREATE USER \'jaryo_user\'@\'localhost\' IDENTIFIED BY \'JaryoPass2024!@#\';'); console.log('GRANT ALL PRIVILEGES ON jaryo.* TO \'jaryo_user\'@\'localhost\';'); console.log('FLUSH PRIVILEGES;'); } } process.exit(1); } finally { await dbHelper.close(); } } // ์Šคํฌ๋ฆฝํŠธ ์ง์ ‘ ์‹คํ–‰ ์‹œ์—๋งŒ ์ดˆ๊ธฐํ™” ์‹คํ–‰ if (require.main === module) { initializeMariaDB().catch(console.error); } module.exports = initializeMariaDB;