import { createError, getQuery, sendRedirect } from 'h3' import { createGoogleAuthorizationUrl, createGoogleOAuthState, normalizeGoogleOAuthRedirect } from '../../../utils/google-oauth' import { requireMemberSession } from '../../../utils/member-auth' /** * Google OAuth 시작 API * @param {import('h3').H3Event} event - 요청 이벤트 * @returns {Promise} Google 인증 화면 리다이렉트 */ export default defineEventHandler(async (event) => { const query = getQuery(event) const mode = String(query.mode || 'member') if (!['member', 'admin', 'link'].includes(mode)) { throw createError({ statusCode: 400, message: 'Google 로그인 모드가 올바르지 않습니다.' }) } const redirectTo = normalizeGoogleOAuthRedirect( query.redirect, mode === 'admin' ? '/admin' : mode === 'link' ? '/settings' : '/' ) let userId = '' if (mode === 'link') { const session = await requireMemberSession(event) userId = session.userId } const state = createGoogleOAuthState(event, { mode, redirectTo, userId }) return sendRedirect(event, createGoogleAuthorizationUrl(event, state), 302) })