53 lines
2.2 KiB
JavaScript
53 lines
2.2 KiB
JavaScript
const db = require('./db');
|
||
const crypto = require('crypto');
|
||
|
||
async function init() {
|
||
try {
|
||
console.log('Initializing Users Table...');
|
||
|
||
const createTableSQL = `
|
||
CREATE TABLE IF NOT EXISTS users (
|
||
id VARCHAR(50) PRIMARY KEY COMMENT '아이디',
|
||
password VARCHAR(255) NOT NULL COMMENT '비밀번호 (Hash)',
|
||
name VARCHAR(100) NOT NULL COMMENT '이름',
|
||
department VARCHAR(100) COMMENT '부서',
|
||
position VARCHAR(100) COMMENT '직위',
|
||
phone VARCHAR(255) COMMENT '핸드폰 (Encrypted)',
|
||
role ENUM('admin', 'user') DEFAULT 'user' COMMENT '권한',
|
||
last_login TIMESTAMP NULL COMMENT '마지막 로그인',
|
||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='사용자 관리';
|
||
`;
|
||
|
||
await db.query(createTableSQL);
|
||
console.log('✅ Users Table Created/Verified.');
|
||
|
||
const [rows] = await db.query('SELECT * FROM users WHERE id = ?', ['admin']);
|
||
if (rows.length === 0) {
|
||
// Create default admin
|
||
const password = 'admin123';
|
||
// Simple hash for MVP: SHA-256. In production, use bcrypt or scrypt with salt.
|
||
const hashedPassword = crypto.createHash('sha256').update(password).digest('hex');
|
||
|
||
// Placeholder for encrypted phone
|
||
const encryptedPhone = 'pending_encryption';
|
||
|
||
await db.query(
|
||
'INSERT INTO users (id, password, name, role, department, position, phone) VALUES (?, ?, ?, ?, ?, ?, ?)',
|
||
['admin', hashedPassword, '시스템 관리자', 'admin', 'IT팀', '관리자', encryptedPhone]
|
||
);
|
||
console.log('✅ Default Admin Account Created (admin / admin123)');
|
||
} else {
|
||
console.log('ℹ️ Admin account already exists.');
|
||
}
|
||
|
||
process.exit(0);
|
||
} catch (err) {
|
||
console.error('❌ Initialization Failed:', err);
|
||
process.exit(1);
|
||
}
|
||
}
|
||
|
||
init();
|