기능구현중
This commit is contained in:
110
server/api/admin/user/list.get.ts
Normal file
110
server/api/admin/user/list.get.ts
Normal file
@@ -0,0 +1,110 @@
|
||||
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<any>(userQuery, params)
|
||||
|
||||
// 2. 모든 권한 목록 조회
|
||||
const roles = await query<any>(`
|
||||
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<any>(`
|
||||
SELECT employee_id, role_id
|
||||
FROM wr_employee_role
|
||||
`)
|
||||
|
||||
// 4. 사용자별 권한 배열 생성
|
||||
const userRoleMap = new Map<number, number[]>()
|
||||
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
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user