Files
weeklyreport/backend/api/employee/[id]/update.put.ts

61 lines
1.7 KiB
TypeScript

import { execute, queryOne } from '../../../utils/db'
import { getClientIp } from '../../../utils/ip'
import { getCurrentUserEmail } from '../../../utils/user'
// 빈 문자열을 null로 변환 (date 타입 등에서 필요)
const emptyToNull = (value: any) => (value === '' ? null : value)
interface UpdateEmployeeBody {
employeeName?: string
employeePhone?: string
employeePosition?: string
company?: string
joinDate?: string
isActive?: boolean
}
/**
* 직원 정보 수정
* PUT /api/employee/[id]/update
*/
export default defineEventHandler(async (event) => {
const employeeId = getRouterParam(event, 'id')
const body = await readBody<UpdateEmployeeBody>(event)
const clientIp = getClientIp(event)
const userEmail = await getCurrentUserEmail(event)
const existing = await queryOne<any>(`
SELECT * FROM wr_employee_info WHERE employee_id = $1
`, [employeeId])
if (!existing) {
throw createError({ statusCode: 404, message: '직원을 찾을 수 없습니다.' })
}
await execute(`
UPDATE wr_employee_info SET
employee_name = $1,
employee_phone = $2,
employee_position = $3,
company = $4,
join_date = $5,
is_active = $6,
updated_at = NOW(),
updated_ip = $7,
updated_email = $8
WHERE employee_id = $9
`, [
body.employeeName ?? existing.employee_name,
emptyToNull(body.employeePhone) ?? existing.employee_phone,
emptyToNull(body.employeePosition) ?? existing.employee_position,
body.company ?? existing.company,
emptyToNull(body.joinDate) ?? existing.join_date,
body.isActive ?? existing.is_active,
clientIp,
userEmail,
employeeId
])
return { success: true }
})