- Storage Integration: * Remove Firebase Storage dependency and useFirebaseStorage composable * Implement direct MinIO uploads via POST /storage/upload with multipart/form-data * Upload canvas JSON, preview PNG, and production PNG as separate objects * Store public URLs and metadata in design records - Authentication & Registration: * Add email/password registration page with validation * Integrate backend user session via /auth/login endpoint * Store backendUser.id as ownerId in design records * Auto-sync backend session on Firebase auth state changes - User Account Pages: * Create profile page showing user details and backend session info * Create orders page with transaction history filtered by customerEmail * Add server proxy /api/orders to forward GET /transactions queries - Navigation Improvements: * Replace inline auth buttons with avatar dropdown menu * Add Profile, Orders, and Logout options to dropdown * Implement outside-click and route-change handlers for dropdown * Display user initials in avatar badge - API Updates: * Update transactions endpoint to accept amount as string * Format amount with .toFixed(2) in checkout success flow * Query orders by customerEmail instead of ownerId for consistency
44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
export default defineEventHandler(async (event) => {
|
|
const config = useRuntimeConfig();
|
|
const backendUrl = config.public?.backendUrl;
|
|
|
|
if (!backendUrl) {
|
|
throw createError({ statusCode: 500, statusMessage: "Backend URL not configured" });
|
|
}
|
|
|
|
const query = getQuery(event);
|
|
const customerEmail = typeof query.customerEmail === "string" ? query.customerEmail : null;
|
|
|
|
if (!customerEmail) {
|
|
throw createError({ statusCode: 400, statusMessage: "Missing customerEmail" });
|
|
}
|
|
|
|
try {
|
|
const result = await $fetch("/transactions", {
|
|
baseURL: backendUrl,
|
|
method: "GET",
|
|
query: { customerEmail },
|
|
});
|
|
|
|
if (Array.isArray(result)) {
|
|
return result;
|
|
}
|
|
|
|
if (result && Array.isArray((result as any).data)) {
|
|
return (result as any).data;
|
|
}
|
|
|
|
if (result && Array.isArray((result as any).orders)) {
|
|
return (result as any).orders;
|
|
}
|
|
|
|
return result;
|
|
} catch (err) {
|
|
console.error("[orders] Failed to fetch order history", err);
|
|
throw createError({
|
|
statusCode: 502,
|
|
statusMessage: (err as Error)?.message ?? "Failed to load order history",
|
|
});
|
|
}
|
|
});
|