Files
weeklyreport/backend/api/auth/login.post.ts
2026-01-04 17:24:47 +09:00

63 lines
1.7 KiB
TypeScript

import { query, insertReturning, execute } from '../../utils/db'
interface LoginBody {
email: string
name: string
}
/**
* 이메일+이름 로그인 (임시)
* POST /api/auth/login
*/
export default defineEventHandler(async (event) => {
const body = await readBody<LoginBody>(event)
if (!body.email || !body.name) {
throw createError({ statusCode: 400, message: '이메일과 이름을 입력해주세요.' })
}
// 이메일 형식 검증
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
if (!emailRegex.test(body.email)) {
throw createError({ statusCode: 400, message: '올바른 이메일 형식이 아닙니다.' })
}
// 기존 사원 조회
let employee = await query<any>(`
SELECT * FROM wr_employee_info WHERE employee_email = $1
`, [body.email.toLowerCase()])
let employeeData = employee[0]
// 없으면 자동 등록
if (!employeeData) {
employeeData = await insertReturning(`
INSERT INTO wr_employee_info (employee_name, employee_email)
VALUES ($1, $2)
RETURNING *
`, [body.name, body.email.toLowerCase()])
}
// 로그인 이력 추가
await execute(`
INSERT INTO wr_login_history (employee_id) VALUES ($1)
`, [employeeData.employee_id])
// 쿠키에 사용자 정보 저장 (간단한 임시 세션)
setCookie(event, 'user_id', String(employeeData.employee_id), {
httpOnly: true,
maxAge: 60 * 60 * 24 * 7, // 7일
path: '/'
})
return {
success: true,
user: {
employeeId: employeeData.employee_id,
employeeName: employeeData.employee_name,
employeeEmail: employeeData.employee_email,
employeePosition: employeeData.employee_position
}
}
})