59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import { getClientIp } from '../../utils/ip'
|
|
import { createSession, setSessionCookie } from '../../utils/session'
|
|
|
|
interface SelectUserBody {
|
|
employeeId: number
|
|
}
|
|
|
|
/**
|
|
* 기존 사용자 선택 로그인
|
|
* POST /api/auth/select-user
|
|
*/
|
|
export default defineEventHandler(async (event) => {
|
|
const body = await readBody<SelectUserBody>(event)
|
|
const clientIp = getClientIp(event)
|
|
const userAgent = getHeader(event, 'user-agent') || null
|
|
|
|
if (!body.employeeId) {
|
|
throw createError({ statusCode: 400, message: '사용자를 선택해주세요.' })
|
|
}
|
|
|
|
// 사원 조회
|
|
const employee = await queryOne<any>(`
|
|
SELECT * FROM wr_employee_info
|
|
WHERE employee_id = $1 AND is_active = true
|
|
`, [body.employeeId])
|
|
|
|
if (!employee) {
|
|
throw createError({ statusCode: 404, message: '사용자를 찾을 수 없습니다.' })
|
|
}
|
|
|
|
// 로그인 이력 추가
|
|
const loginHistory = await insertReturning(`
|
|
INSERT INTO wr_login_history (employee_id, login_ip, login_email)
|
|
VALUES ($1, $2, $3)
|
|
RETURNING history_id
|
|
`, [employee.employee_id, clientIp, employee.employee_email])
|
|
|
|
// DB 기반 세션 생성
|
|
const sessionId = await createSession(
|
|
employee.employee_id,
|
|
loginHistory.history_id,
|
|
clientIp,
|
|
userAgent
|
|
)
|
|
|
|
// 세션 쿠키 설정
|
|
setSessionCookie(event, sessionId)
|
|
|
|
return {
|
|
success: true,
|
|
user: {
|
|
employeeId: employee.employee_id,
|
|
employeeName: employee.employee_name,
|
|
employeeEmail: employee.employee_email,
|
|
employeePosition: employee.employee_position
|
|
}
|
|
}
|
|
})
|