/** * Department Model * * departments 테이블 CRUD (MariaDB) */ const { getPool } = require('./userModel'); async function getAll() { const db = getPool(); const [rows] = await db.query( `SELECT d.*, p.department_name AS parent_name FROM departments d LEFT JOIN departments p ON d.parent_id = p.department_id ORDER BY d.display_order ASC, d.department_id ASC` ); return rows; } async function getById(id) { const db = getPool(); const [rows] = await db.query( `SELECT d.*, p.department_name AS parent_name FROM departments d LEFT JOIN departments p ON d.parent_id = p.department_id WHERE d.department_id = ?`, [id] ); return rows[0] || null; } async function create({ department_name, parent_id, description, display_order }) { const db = getPool(); const [result] = await db.query( `INSERT INTO departments (department_name, parent_id, description, display_order) VALUES (?, ?, ?, ?)`, [department_name, parent_id || null, description || null, display_order || 0] ); return getById(result.insertId); } async function update(id, data) { const db = getPool(); const fields = []; const values = []; if (data.department_name !== undefined) { fields.push('department_name = ?'); values.push(data.department_name); } if (data.parent_id !== undefined) { fields.push('parent_id = ?'); values.push(data.parent_id || null); } if (data.description !== undefined) { fields.push('description = ?'); values.push(data.description || null); } if (data.is_active !== undefined) { fields.push('is_active = ?'); values.push(data.is_active); } if (data.display_order !== undefined) { fields.push('display_order = ?'); values.push(data.display_order); } if (fields.length === 0) return getById(id); values.push(id); await db.query( `UPDATE departments SET ${fields.join(', ')} WHERE department_id = ?`, values ); return getById(id); } async function deactivate(id) { const db = getPool(); await db.query( 'UPDATE departments SET is_active = FALSE WHERE department_id = ?', [id] ); } module.exports = { getAll, getById, create, update, deactivate };