import { apiSuccess, apiError, apiValidationError, getClientIp, safeJson, } from "@/lib/api-response"; import { NextRequest } from "next/server"; import { apiHandler, requireAuth } from "@/lib/api-handler"; import { annotate } from "@/lib/logging/context"; import { applyProfileUpdate } from "@/lib/auth/profile-update"; export const PUT = apiHandler(async (request: NextRequest) => { const { user } = await requireAuth(); const { data: body, error: jsonError } = await safeJson(request, { maxBytes: 64 * 1024, }); if (jsonError) return jsonError; const result = await applyProfileUpdate(user.id, body, getClientIp(request)); if (!result.ok) { const meta = result.errorCode ? { errorCode: result.errorCode } : undefined; return result.issues ? apiValidationError(result.message, result.issues, result.status, meta) : apiError(result.message, result.status, meta); } annotate({ action: { name: "auth.profile.update" } }); return apiSuccess({ id: result.user.id, username: result.user.username, email: result.user.email, role: result.user.role, heightCm: result.user.heightCm, dateOfBirth: result.user.dateOfBirth, gender: result.user.gender, timezone: result.user.timezone, fullName: result.user.fullName, insurerName: result.user.insurerName, insurerIkNumber: result.user.insurerIkNumber, hasInsuranceNumber: result.user.hasInsuranceNumber, ...(result.rejectedFields ? { rejectedFields: result.rejectedFields } : {}), }); });