import { createError } from 'h3' import { updateMemberProfile, getUserById } from '../../repositories/member-repository' import { requireMemberSession } from '../../utils/member-auth' import { removeManagedAvatarAsset } from '../../utils/member-avatar' import { uploadMemberAvatarImage } from '../../utils/member-avatar-upload' import { MEDIA_THUMBNAIL_ROOT, upsertMediaMetadataCategory } from '../../utils/media-library' /** * 회원 썸네일 업로드 API * @param {import('h3').H3Event} event - 요청 이벤트 * @returns {Promise<{ avatarUrl: string }>} 업로드 결과 */ export default defineEventHandler(async (event) => { const session = requireMemberSession(event) const currentUser = await getUserById(session.userId) if (!currentUser) { throw createError({ statusCode: 404, message: '회원 정보를 찾을 수 없습니다.' }) } const { avatarUrl } = await uploadMemberAvatarImage(event) await updateMemberProfile({ userId: session.userId, username: currentUser.username, avatarUrl }) await upsertMediaMetadataCategory(avatarUrl, MEDIA_THUMBNAIL_ROOT) if (currentUser.avatarUrl && currentUser.avatarUrl !== avatarUrl) { await removeManagedAvatarAsset(currentUser.avatarUrl) } return { avatarUrl } })