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:
125
reactrebuild0825/functions/lib/api-simple.js
Normal file
125
reactrebuild0825/functions/lib/api-simple.js
Normal file
@@ -0,0 +1,125 @@
|
||||
"use strict";
|
||||
const __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.api = void 0;
|
||||
const https_1 = require("firebase-functions/v2/https");
|
||||
const express_1 = __importDefault(require("express"));
|
||||
const cors_1 = __importDefault(require("cors"));
|
||||
const app = (0, express_1.default)();
|
||||
// CORS: allow hosting origins + dev
|
||||
const allowedOrigins = [
|
||||
// Firebase Hosting URLs for dev-racer-433015-k3 project
|
||||
"https://dev-racer-433015-k3.web.app",
|
||||
"https://dev-racer-433015-k3.firebaseapp.com",
|
||||
// Development servers
|
||||
"http://localhost:5173", // Vite dev server
|
||||
"http://localhost:4173", // Vite preview
|
||||
"http://localhost:3000", // Common dev port
|
||||
];
|
||||
app.use((0, cors_1.default)({
|
||||
origin: (origin, callback) => {
|
||||
// Allow requests with no origin (mobile apps, curl, etc.)
|
||||
if (!origin)
|
||||
{return callback(null, true);}
|
||||
if (allowedOrigins.includes(origin)) {
|
||||
return callback(null, true);
|
||||
}
|
||||
return callback(new Error('Not allowed by CORS'));
|
||||
},
|
||||
credentials: true
|
||||
}));
|
||||
app.use(express_1.default.json({ limit: "2mb" }));
|
||||
app.use(express_1.default.urlencoded({ extended: true }));
|
||||
// Health check endpoint
|
||||
app.get("/health", (req, res) => {
|
||||
res.json({
|
||||
status: "ok",
|
||||
timestamp: new Date().toISOString(),
|
||||
version: "1.0.0",
|
||||
message: "API is running"
|
||||
});
|
||||
});
|
||||
// Mock ticket verification endpoint
|
||||
app.post("/tickets/verify", (req, res) => {
|
||||
const { qr } = req.body;
|
||||
if (!qr) {
|
||||
return res.status(400).json({ error: "QR code is required" });
|
||||
}
|
||||
// Mock response for demo
|
||||
return res.json({
|
||||
valid: true,
|
||||
ticket: {
|
||||
id: "demo-ticket-001",
|
||||
eventId: "demo-event-001",
|
||||
ticketTypeId: "demo-type-001",
|
||||
eventName: "Demo Event",
|
||||
ticketTypeName: "General Admission",
|
||||
status: "valid",
|
||||
purchaserEmail: "demo@example.com"
|
||||
}
|
||||
});
|
||||
});
|
||||
// Mock checkout endpoint
|
||||
app.post("/checkout/create", (req, res) => {
|
||||
const { orgId, eventId, ticketTypeId, qty } = req.body;
|
||||
if (!orgId || !eventId || !ticketTypeId || !qty) {
|
||||
return res.status(400).json({ error: "Missing required fields" });
|
||||
}
|
||||
// Mock Stripe checkout session
|
||||
return res.json({
|
||||
id: "cs_test_demo123",
|
||||
url: "https://checkout.stripe.com/pay/cs_test_demo123#fidkdWxOYHwnPyd1blppbHNgWjA0VGlgNG41PDVUc0t8Zn0xQnVTSDc2N01ocGRnVH1KMjZCMX9pPUBCZzJpPVE2TnQ3U1J%2FYmFRPTVvSU1qZW9EV1IzTmBAQkxmdFNncGNyZmU0Z0I9NV9WPT0nKSd3YGNgd3dgd0p3bGZsayc%2FcXdwYHgl"
|
||||
});
|
||||
});
|
||||
// Mock Stripe Connect endpoints
|
||||
app.post("/stripe/connect/start", (req, res) => {
|
||||
const { orgId } = req.body;
|
||||
if (!orgId) {
|
||||
return res.status(400).json({ error: "Organization ID is required" });
|
||||
}
|
||||
return res.json({
|
||||
url: "https://connect.stripe.com/oauth/authorize?response_type=code&client_id=ca_demo&scope=read_write"
|
||||
});
|
||||
});
|
||||
app.get("/stripe/connect/status", (req, res) => {
|
||||
const {orgId} = req.query;
|
||||
if (!orgId) {
|
||||
return res.status(400).json({ error: "Organization ID is required" });
|
||||
}
|
||||
return res.json({
|
||||
connected: false,
|
||||
accountId: null,
|
||||
chargesEnabled: false,
|
||||
detailsSubmitted: false
|
||||
});
|
||||
});
|
||||
// Catch-all for unmatched routes
|
||||
app.use("*", (req, res) => {
|
||||
res.status(404).json({
|
||||
error: "Not found",
|
||||
path: req.originalUrl,
|
||||
availableEndpoints: [
|
||||
"GET /api/health",
|
||||
"POST /api/tickets/verify",
|
||||
"POST /api/checkout/create",
|
||||
"POST /api/stripe/connect/start",
|
||||
"GET /api/stripe/connect/status"
|
||||
]
|
||||
});
|
||||
});
|
||||
// Error handling middleware
|
||||
app.use((error, req, res, next) => {
|
||||
console.error('Express error:', error);
|
||||
res.status(500).json({
|
||||
error: 'Internal server error',
|
||||
message: error.message
|
||||
});
|
||||
});
|
||||
exports.api = (0, https_1.onRequest)({
|
||||
region: "us-central1",
|
||||
maxInstances: 10,
|
||||
cors: true
|
||||
}, app);
|
||||
// # sourceMappingURL=api-simple.js.map
|
||||
Reference in New Issue
Block a user