const { getDb } = require('../dbPool'); const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); exports.login = async (req, res) => { try { const { username, password } = req.body; const db = await getDb(); const [rows] = await db.query( 'SELECT * FROM Users WHERE username = ?', [username] ); if (rows.length === 0) { return res.status(401).json({ error: '존재하지 않는 사용자입니다.' }); } const user = rows[0]; const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) { return res.status(401).json({ error: '비밀번호가 일치하지 않습니다.' }); } // JWT 토큰 생성 const token = jwt.sign( { user_id: user.user_id, username: user.username, name: user.name, role: user.role, access_level: user.access_level, worker_id: user.worker_id }, process.env.JWT_SECRET, { expiresIn: '1d' } ); // 토큰 포함 응답 return res.status(200).json({ success: true, token, user_id: user.user_id, username: user.username, role: user.role }); } catch (err) { console.error('[로그인 오류]', err); return res.status(500).json({ error: '서버 내부 오류', detail: err.message || String(err) }); } }; // ✅ 사용자 등록 기능 추가 exports.register = async (req, res) => { try { const { username, password, name, access_level, worker_id } = req.body; const db = await getDb(); // 필수 필드 검증 if (!username || !password || !name || !access_level) { return res.status(400).json({ success: false, error: '필수 정보가 누락되었습니다.' }); } // 중복 아이디 확인 const [existing] = await db.query( 'SELECT user_id FROM Users WHERE username = ?', [username] ); if (existing.length > 0) { return res.status(409).json({ success: false, error: '이미 존재하는 아이디입니다.' }); } // 비밀번호 해시화 const hashedPassword = await bcrypt.hash(password, 10); // role 설정 (access_level에 따라) const roleMap = { 'admin': 'admin', 'system': 'admin', 'group_leader': 'leader', 'support_team': 'support', 'worker': 'user' }; const role = roleMap[access_level] || 'user'; // 사용자 등록 const [result] = await db.query( `INSERT INTO Users (username, password, name, role, access_level, worker_id) VALUES (?, ?, ?, ?, ?, ?)`, [username, hashedPassword, name, role, access_level, worker_id] ); console.log('[사용자 등록 성공]', username); return res.status(201).json({ success: true, message: '사용자 등록이 완료되었습니다.', user_id: result.insertId }); } catch (err) { console.error('[사용자 등록 오류]', err); return res.status(500).json({ success: false, error: '서버 오류가 발생했습니다.', detail: err.message }); } }; // ✅ 사용자 삭제 기능 추가 exports.deleteUser = async (req, res) => { try { const { id } = req.params; const db = await getDb(); // 사용자 존재 확인 const [user] = await db.query( 'SELECT user_id FROM Users WHERE user_id = ?', [id] ); if (user.length === 0) { return res.status(404).json({ success: false, error: '해당 사용자를 찾을 수 없습니다.' }); } // 사용자 삭제 await db.query('DELETE FROM Users WHERE user_id = ?', [id]); console.log('[사용자 삭제 성공] ID:', id); return res.status(200).json({ success: true, message: '사용자가 삭제되었습니다.' }); } catch (err) { console.error('[사용자 삭제 오류]', err); return res.status(500).json({ success: false, error: '서버 오류가 발생했습니다.', detail: err.message }); } }; // 모든 사용자 목록 조회 exports.getAllUsers = async (req, res) => { try { const db = await getDb(); // 비밀번호 제외하고 조회 const [rows] = await db.query( `SELECT user_id, username, name, role, access_level, worker_id, created_at FROM Users ORDER BY created_at DESC` ); res.status(200).json(rows); } catch (err) { console.error('[사용자 목록 조회 실패]', err); res.status(500).json({ error: '서버 오류' }); } };