import { z } from 'zod' import { createError, readBody } from 'h3' import { safeCompare, setAdminSession } from '../../../../utils/admin-auth' const loginSchema = z.object({ email: z.string().email(), password: z.string().min(1) }) /** * 관리자 로그인 API * @param {import('h3').H3Event} event - 요청 이벤트 * @returns {Promise<{ email: string }>} 관리자 세션 정보 */ export default defineEventHandler(async (event) => { const parsedBody = loginSchema.safeParse(await readBody(event)) const config = useRuntimeConfig() if (!parsedBody.success) { throw createError({ statusCode: 400, message: '로그인 요청 형식이 올바르지 않습니다.' }) } const body = parsedBody.data if ( !safeCompare(body.email, config.adminEmail) || !safeCompare(body.password, config.adminPassword) ) { throw createError({ statusCode: 401, message: '이메일 또는 비밀번호가 올바르지 않습니다.' }) } setAdminSession(event, body.email) return { email: body.email } })