feat: add advanced analytics and territory management system
- Add comprehensive analytics components with export functionality - Implement territory management with manager performance tracking - Add seatmap components for venue layout management - Create customer management features with modal interface - Add advanced hooks for dashboard flags and territory data - Implement seat selection and venue management utilities - Add type definitions for ticketing and seatmap systems 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
97
reactrebuild0825/functions/lib/orders.js
Normal file
97
reactrebuild0825/functions/lib/orders.js
Normal file
@@ -0,0 +1,97 @@
|
||||
"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
|
||||
Reference in New Issue
Block a user