Files
slipmatz-web/server/api/checkout/[sessionId].get.ts
Frank John Begornia bf701f8342 Replace Firebase Storage with MinIO and add user account features
- 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
2025-11-16 01:19:35 +08:00

63 lines
2.1 KiB
TypeScript

import Stripe from 'stripe'
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig()
const stripeSecretKey = config.stripeSecretKey
if (!stripeSecretKey) {
throw createError({ statusCode: 500, statusMessage: 'Stripe secret key not configured' })
}
const params = event.context.params as { sessionId?: string }
const sessionId = params?.sessionId
if (!sessionId) {
throw createError({ statusCode: 400, statusMessage: 'Missing session id' })
}
const stripe = new Stripe(stripeSecretKey, {
apiVersion: '2025-10-29.clover',
})
try {
const session = await stripe.checkout.sessions.retrieve(sessionId, {
expand: ['payment_intent', 'customer'],
})
const customerDetails = session.customer_details ?? null
return {
id: session.id,
paymentStatus: session.payment_status,
amountTotal: session.amount_total,
currency: session.currency,
customerEmail: customerDetails?.email ?? session.customer_email ?? null,
customerName: customerDetails?.name ?? null,
createdAt: session.created ? new Date(session.created * 1000).toISOString() : null,
metadata: session.metadata ?? {},
customerDetails: customerDetails
? {
name: customerDetails.name ?? null,
email: customerDetails.email ?? null,
phone: customerDetails.phone ?? null,
address: customerDetails.address
? {
line1: customerDetails.address.line1 ?? null,
line2: customerDetails.address.line2 ?? null,
city: customerDetails.address.city ?? null,
state: customerDetails.address.state ?? null,
postalCode: customerDetails.address.postal_code ?? null,
country: customerDetails.address.country ?? null,
}
: null,
}
: null,
}
} catch (error: any) {
throw createError({
statusCode: error?.statusCode ?? 500,
statusMessage: error?.message ?? 'Unable to retrieve checkout session',
})
}
})