"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getOrder = void 0; const https_1 = require("firebase-functions/v2/https"); const firebase_functions_1 = require("firebase-functions"); const firestore_1 = require("firebase-admin/firestore"); const db = (0, firestore_1.getFirestore)(); /** * Gets order details by session ID for frontend polling * POST /api/orders/get */ exports.getOrder = (0, https_1.onRequest)({ cors: true, enforceAppCheck: false, region: "us-central1", }, async (req, res) => { if (req.method !== "POST") { res.status(405).json({ error: "Method not allowed" }); return; } try { const { sessionId } = req.body; if (!sessionId) { res.status(400).json({ error: "Session ID is required" }); return; } firebase_functions_1.logger.info("Getting order details", { sessionId }); // Get order by session ID const orderDoc = await db.collection("orders").doc(sessionId).get(); if (!orderDoc.exists) { res.status(404).json({ error: "Order not found" }); return; } const orderData = orderDoc.data(); // Get additional details if order is paid let eventName = ""; let ticketTypeName = ""; let eventDate = ""; let eventLocation = ""; if (orderData.status === "paid") { try { const [eventDoc, ticketTypeDoc] = await Promise.all([ db.collection("events").doc(orderData.eventId).get(), db.collection("ticket_types").doc(orderData.ticketTypeId).get(), ]); if (eventDoc.exists) { const event = eventDoc.data(); eventName = event.name || ""; eventDate = event.startAt?.toDate?.()?.toISOString() || event.startAt || ""; eventLocation = event.location || "Venue TBD"; } if (ticketTypeDoc.exists) { const ticketType = ticketTypeDoc.data(); ticketTypeName = ticketType.name || ""; } } catch (error) { firebase_functions_1.logger.warn("Failed to fetch event/ticket type details for order", { error: error instanceof Error ? error.message : String(error), sessionId, }); } } const response = { id: orderDoc.id, orgId: orderData.orgId, eventId: orderData.eventId, ticketTypeId: orderData.ticketTypeId, qty: orderData.qty, status: orderData.status, totalCents: orderData.totalCents, purchaserEmail: orderData.purchaserEmail, eventName, ticketTypeName, eventDate, eventLocation, createdAt: orderData.createdAt?.toDate?.()?.toISOString() || orderData.createdAt, updatedAt: orderData.updatedAt?.toDate?.()?.toISOString() || orderData.updatedAt, }; firebase_functions_1.logger.info("Order details retrieved", { sessionId, status: orderData.status, qty: orderData.qty, }); res.status(200).json(response); } catch (error) { firebase_functions_1.logger.error("Error getting order details", { error: error instanceof Error ? error.message : String(error), stack: error instanceof Error ? error.stack : undefined, }); res.status(500).json({ error: "Internal server error retrieving order", }); } }); // # sourceMappingURL=orders.js.map