import { query } from '../../../utils/db' import { requireAdmin } from '../../../utils/session' /** * 사용자 목록 조회 (권한 정보 + 최근 로그인 포함) * GET /api/admin/user/list */ export default defineEventHandler(async (event) => { await requireAdmin(event) const queryParams = getQuery(event) const company = queryParams.company as string || '' const name = queryParams.name as string || '' const email = queryParams.email as string || '' const phone = queryParams.phone as string || '' const status = queryParams.status as string || 'active' // 기본값: 활성 // 1. 사용자 목록 조회 (최근 로그인 포함) let userQuery = ` SELECT e.employee_id, e.employee_name, e.employee_email, e.employee_phone, e.employee_position, e.company, e.join_date, e.is_active, e.created_at, ( SELECT MAX(login_at) FROM wr_login_history WHERE employee_id = e.employee_id ) as last_login_at FROM wr_employee_info e WHERE 1=1 ` const params: any[] = [] // 소속사 검색 if (company) { params.push(`%${company}%`) userQuery += ` AND e.company ILIKE $${params.length}` } // 이름 검색 if (name) { params.push(`%${name}%`) userQuery += ` AND e.employee_name ILIKE $${params.length}` } // 이메일 검색 if (email) { params.push(`%${email}%`) userQuery += ` AND e.employee_email ILIKE $${params.length}` } // 전화번호 검색 if (phone) { params.push(`%${phone}%`) userQuery += ` AND e.employee_phone ILIKE $${params.length}` } // 상태 검색 if (status === 'active') { userQuery += ` AND e.is_active = true` } else if (status === 'inactive') { userQuery += ` AND e.is_active = false` } // status === 'all' 이면 조건 없음 userQuery += ` ORDER BY e.company, e.employee_position, e.employee_name` const users = await query(userQuery, params) // 2. 모든 권한 목록 조회 const roles = await query(` SELECT role_id, role_code, role_name, sort_order FROM wr_role WHERE is_active = true ORDER BY sort_order `) // 3. 사용자별 권한 매핑 조회 const userRoles = await query(` SELECT employee_id, role_id FROM wr_employee_role `) // 4. 사용자별 권한 배열 생성 const userRoleMap = new Map() for (const ur of userRoles) { if (!userRoleMap.has(ur.employee_id)) { userRoleMap.set(ur.employee_id, []) } userRoleMap.get(ur.employee_id)!.push(ur.role_id) } // 5. 사용자 데이터에 권한 정보 추가 const usersWithRoles = users.map(u => ({ ...u, roleIds: userRoleMap.get(u.employee_id) || [] })) return { users: usersWithRoles, roles, total: users.length } })