const { getDb } = require('../dbPool'); // ==================== 카테고리(공장) 관련 ==================== /** * 카테고리 생성 */ const createCategory = async (category, callback) => { try { const db = await getDb(); const { category_name, description = null, display_order = 0, is_active = true } = category; const [result] = await db.query( `INSERT INTO workplace_categories (category_name, description, display_order, is_active) VALUES (?, ?, ?, ?)`, [category_name, description, display_order, is_active] ); callback(null, result.insertId); } catch (err) { callback(err); } }; /** * 모든 카테고리 조회 */ const getAllCategories = async (callback) => { try { const db = await getDb(); const [rows] = await db.query( `SELECT category_id, category_name, description, display_order, is_active, created_at, updated_at FROM workplace_categories ORDER BY display_order ASC, category_id ASC` ); callback(null, rows); } catch (err) { callback(err); } }; /** * 활성 카테고리만 조회 */ const getActiveCategories = async (callback) => { try { const db = await getDb(); const [rows] = await db.query( `SELECT category_id, category_name, description, display_order, is_active, created_at, updated_at FROM workplace_categories WHERE is_active = TRUE ORDER BY display_order ASC, category_id ASC` ); callback(null, rows); } catch (err) { callback(err); } }; /** * ID로 카테고리 조회 */ const getCategoryById = async (categoryId, callback) => { try { const db = await getDb(); const [rows] = await db.query( `SELECT category_id, category_name, description, display_order, is_active, created_at, updated_at FROM workplace_categories WHERE category_id = ?`, [categoryId] ); callback(null, rows[0]); } catch (err) { callback(err); } }; /** * 카테고리 수정 */ const updateCategory = async (categoryId, category, callback) => { try { const db = await getDb(); const { category_name, description, display_order, is_active } = category; const [result] = await db.query( `UPDATE workplace_categories SET category_name = ?, description = ?, display_order = ?, is_active = ?, updated_at = NOW() WHERE category_id = ?`, [category_name, description, display_order, is_active, categoryId] ); callback(null, result); } catch (err) { callback(err); } }; /** * 카테고리 삭제 */ const deleteCategory = async (categoryId, callback) => { try { const db = await getDb(); const [result] = await db.query( `DELETE FROM workplace_categories WHERE category_id = ?`, [categoryId] ); callback(null, result); } catch (err) { callback(err); } }; // ==================== 작업장 관련 ==================== /** * 작업장 생성 */ const createWorkplace = async (workplace, callback) => { try { const db = await getDb(); const { category_id = null, workplace_name, description = null, is_active = true } = workplace; const [result] = await db.query( `INSERT INTO workplaces (category_id, workplace_name, description, is_active) VALUES (?, ?, ?, ?)`, [category_id, workplace_name, description, is_active] ); callback(null, result.insertId); } catch (err) { callback(err); } }; /** * 모든 작업장 조회 (카테고리 정보 포함) */ const getAllWorkplaces = async (callback) => { try { const db = await getDb(); const [rows] = await db.query( `SELECT w.workplace_id, w.category_id, w.workplace_name, w.description, w.is_active, w.created_at, w.updated_at, wc.category_name FROM workplaces w LEFT JOIN workplace_categories wc ON w.category_id = wc.category_id ORDER BY wc.display_order ASC, w.workplace_id DESC` ); callback(null, rows); } catch (err) { callback(err); } }; /** * 활성 작업장만 조회 */ const getActiveWorkplaces = async (callback) => { try { const db = await getDb(); const [rows] = await db.query( `SELECT w.workplace_id, w.category_id, w.workplace_name, w.description, w.is_active, w.created_at, w.updated_at, wc.category_name FROM workplaces w LEFT JOIN workplace_categories wc ON w.category_id = wc.category_id WHERE w.is_active = TRUE ORDER BY wc.display_order ASC, w.workplace_id DESC` ); callback(null, rows); } catch (err) { callback(err); } }; /** * 카테고리별 작업장 조회 */ const getWorkplacesByCategory = async (categoryId, callback) => { try { const db = await getDb(); const [rows] = await db.query( `SELECT w.workplace_id, w.category_id, w.workplace_name, w.description, w.is_active, w.created_at, w.updated_at, wc.category_name FROM workplaces w LEFT JOIN workplace_categories wc ON w.category_id = wc.category_id WHERE w.category_id = ? ORDER BY w.workplace_id DESC`, [categoryId] ); callback(null, rows); } catch (err) { callback(err); } }; /** * ID로 작업장 조회 */ const getWorkplaceById = async (workplaceId, callback) => { try { const db = await getDb(); const [rows] = await db.query( `SELECT w.workplace_id, w.category_id, w.workplace_name, w.description, w.is_active, w.created_at, w.updated_at, wc.category_name FROM workplaces w LEFT JOIN workplace_categories wc ON w.category_id = wc.category_id WHERE w.workplace_id = ?`, [workplaceId] ); callback(null, rows[0]); } catch (err) { callback(err); } }; /** * 작업장 수정 */ const updateWorkplace = async (workplaceId, workplace, callback) => { try { const db = await getDb(); const { category_id, workplace_name, description, is_active } = workplace; const [result] = await db.query( `UPDATE workplaces SET category_id = ?, workplace_name = ?, description = ?, is_active = ?, updated_at = NOW() WHERE workplace_id = ?`, [category_id, workplace_name, description, is_active, workplaceId] ); callback(null, result); } catch (err) { callback(err); } }; /** * 작업장 삭제 */ const deleteWorkplace = async (workplaceId, callback) => { try { const db = await getDb(); const [result] = await db.query( `DELETE FROM workplaces WHERE workplace_id = ?`, [workplaceId] ); callback(null, result); } catch (err) { callback(err); } }; module.exports = { // 카테고리 createCategory, getAllCategories, getActiveCategories, getCategoryById, updateCategory, deleteCategory, // 작업장 createWorkplace, getAllWorkplaces, getActiveWorkplaces, getWorkplacesByCategory, getWorkplaceById, updateWorkplace, deleteWorkplace };