This commit is contained in:
2026-01-04 20:58:47 +09:00
parent a87c11597a
commit 0660ed3973
37 changed files with 1723 additions and 885 deletions

View File

@@ -1,7 +1,7 @@
import { queryOne } from '../../../utils/db'
/**
* 원 상세 조회
* 원 상세 조회
* GET /api/employee/[id]/detail
*/
export default defineEventHandler(async (event) => {
@@ -12,19 +12,21 @@ export default defineEventHandler(async (event) => {
`, [employeeId])
if (!employee) {
throw createError({ statusCode: 404, message: '원을 찾을 수 없습니다.' })
throw createError({ statusCode: 404, message: '원을 찾을 수 없습니다.' })
}
return {
employeeId: employee.employee_id,
employeeNumber: employee.employee_number,
employeeName: employee.employee_name,
employeeEmail: employee.employee_email,
employeePhone: employee.employee_phone,
employeePosition: employee.employee_position,
joinDate: employee.join_date,
isActive: employee.is_active,
createdAt: employee.created_at,
updatedAt: employee.updated_at
employee: {
employeeId: employee.employee_id,
employeeName: employee.employee_name,
employeeEmail: employee.employee_email,
employeePhone: employee.employee_phone,
employeePosition: employee.employee_position,
company: employee.company,
joinDate: employee.join_date,
isActive: employee.is_active,
createdAt: employee.created_at,
updatedAt: employee.updated_at
}
}
})

View File

@@ -1,47 +1,55 @@
import { execute, queryOne } from '../../../utils/db'
import { getClientIp } from '../../../utils/ip'
import { getCurrentUserEmail } from '../../../utils/user'
interface UpdateEmployeeBody {
employeeNumber?: string
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: '원을 찾을 수 없습니다.' })
throw createError({ statusCode: 404, message: '원을 찾을 수 없습니다.' })
}
await execute(`
UPDATE wr_employee_info SET
employee_number = $1,
employee_name = $2,
employee_phone = $3,
employee_position = $4,
employee_name = $1,
employee_phone = $2,
employee_position = $3,
company = $4,
join_date = $5,
is_active = $6,
updated_at = NOW()
WHERE employee_id = $7
updated_at = NOW(),
updated_ip = $7,
updated_email = $8
WHERE employee_id = $9
`, [
body.employeeNumber ?? existing.employee_number,
body.employeeName ?? existing.employee_name,
body.employeePhone ?? existing.employee_phone,
body.employeePosition ?? existing.employee_position,
body.company ?? existing.company,
body.joinDate ?? existing.join_date,
body.isActive ?? existing.is_active,
clientIp,
userEmail,
employeeId
])

View File

@@ -1,20 +1,24 @@
import { insertReturning, queryOne } from '../../utils/db'
import { getClientIp } from '../../utils/ip'
import { getCurrentUserEmail } from '../../utils/user'
interface CreateEmployeeBody {
employeeNumber?: string
employeeName: string
employeeEmail: string
employeePhone?: string
employeePosition?: string
company?: string
joinDate?: string
}
/**
* 원 등록
* 원 등록
* POST /api/employee/create
*/
export default defineEventHandler(async (event) => {
const body = await readBody<CreateEmployeeBody>(event)
const clientIp = getClientIp(event)
const userEmail = await getCurrentUserEmail(event)
if (!body.employeeName || !body.employeeEmail) {
throw createError({ statusCode: 400, message: '이름과 이메일은 필수입니다.' })
@@ -31,17 +35,20 @@ export default defineEventHandler(async (event) => {
const employee = await insertReturning(`
INSERT INTO wr_employee_info (
employee_number, employee_name, employee_email,
employee_phone, employee_position, join_date
) VALUES ($1, $2, $3, $4, $5, $6)
employee_name, employee_email, employee_phone,
employee_position, company, join_date,
created_ip, created_email, updated_ip, updated_email
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $7, $8)
RETURNING *
`, [
body.employeeNumber || null,
body.employeeName,
body.employeeEmail.toLowerCase(),
body.employeePhone || null,
body.employeePosition || null,
body.joinDate || null
body.company || '(주)터보소프트',
body.joinDate || null,
clientIp,
userEmail
])
return {

View File

@@ -1,7 +1,7 @@
import { query } from '../../utils/db'
/**
* 원 목록 조회
* 원 목록 조회
* GET /api/employee/list
*/
export default defineEventHandler(async (event) => {
@@ -16,15 +16,17 @@ export default defineEventHandler(async (event) => {
const employees = await query(sql)
return employees.map((e: any) => ({
employeeId: e.employee_id,
employeeNumber: e.employee_number,
employeeName: e.employee_name,
employeeEmail: e.employee_email,
employeePhone: e.employee_phone,
employeePosition: e.employee_position,
joinDate: e.join_date,
isActive: e.is_active,
createdAt: e.created_at
}))
return {
employees: employees.map((e: any) => ({
employeeId: e.employee_id,
employeeName: e.employee_name,
employeeEmail: e.employee_email,
employeePhone: e.employee_phone,
employeePosition: e.employee_position,
company: e.company,
joinDate: e.join_date,
isActive: e.is_active,
createdAt: e.created_at
}))
}
})