import Member from "../../models/member.js"; import { requireAuth } from "../../utils/auth.js"; import { validateBody } from "../../utils/validateBody.js"; import { memberProfileUpdateSchema } from "../../utils/schemas.js"; export default defineEventHandler(async (event) => { const authedMember = await requireAuth(event); const memberId = authedMember._id; const body = await validateBody(event, memberProfileUpdateSchema); // Profile fields from validated body const profileFields = [ "pronouns", "timeZone", "avatar", "studio", "bio", "location", "socialLinks", "showInDirectory", "notifications", ]; // Build update object from validated data const updateData = {}; profileFields.forEach((field) => { if (body[field] !== undefined) { updateData[field] = body[field]; } }); // Handle craftTags (simple array) if (body.craftTags !== undefined) { updateData.craftTags = body.craftTags; } // Handle board slack handle if (body.boardSlackHandle !== undefined) { updateData["board.slackHandle"] = body.boardSlackHandle; } try { const member = await Member.findByIdAndUpdate( memberId, { $set: updateData }, { new: true, runValidators: true }, ); if (!member) { throw createError({ statusCode: 404, statusMessage: "Member not found", }); } // Log which fields were updated const changedFields = Object.keys(body).filter(k => body[k] !== undefined) if (changedFields.length) { logActivity(memberId, 'profile_updated', { fields: changedFields }) } // Return sanitized member data return { id: member._id, email: member.email, name: member.name, circle: member.circle, contributionAmount: member.contributionAmount, pronouns: member.pronouns, timeZone: member.timeZone, avatar: member.avatar, studio: member.studio, bio: member.bio, location: member.location, socialLinks: member.socialLinks, craftTags: member.craftTags, showInDirectory: member.showInDirectory, notifications: member.notifications, }; } catch (error) { if (error.statusCode) throw error; console.error("Profile update error:", error); throw createError({ statusCode: 500, statusMessage: "Failed to update profile", }); } });