Major fixes and improvements: - Fixed edit event button functionality with proper event handlers and DOM ready state checking - Added status column to tickets table via Supabase migration to resolve 500 API errors - Updated stats API to correctly calculate revenue from decimal price values - Resolved authentication redirect loops by fixing cookie configuration for Docker environment - Fixed Permissions-Policy header syntax errors - Added comprehensive debugging and error handling for event management - Implemented modal-based event editing with form validation and API integration - Enhanced event data loading with proper error handling and user feedback 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
118 lines
3.5 KiB
JavaScript
118 lines
3.5 KiB
JavaScript
const { createClient } = require('@supabase/supabase-js');
|
||
require('dotenv').config();
|
||
|
||
const supabaseUrl = process.env.PUBLIC_SUPABASE_URL;
|
||
const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY;
|
||
|
||
if (!supabaseUrl || !supabaseServiceKey) {
|
||
console.error('❌ Missing required environment variables');
|
||
process.exit(1);
|
||
}
|
||
|
||
const supabase = createClient(supabaseUrl, supabaseServiceKey, {
|
||
auth: {
|
||
autoRefreshToken: false,
|
||
persistSession: false
|
||
}
|
||
});
|
||
|
||
async function verifySchema() {
|
||
console.log('🔍 Verifying database schema...');
|
||
|
||
try {
|
||
// Check if tables exist and what columns they have
|
||
const eventId = '7ac12bd2-8509-4db3-b1bc-98a808646311';
|
||
|
||
console.log('\n1️⃣ Checking events table...');
|
||
const { data: eventData, error: eventError } = await supabase
|
||
.from('events')
|
||
.select('*')
|
||
.eq('id', eventId)
|
||
.single();
|
||
|
||
if (eventError) {
|
||
console.error('❌ Event query error:', eventError);
|
||
} else {
|
||
console.log('✅ Event found:', eventData.title);
|
||
console.log('Columns:', Object.keys(eventData));
|
||
}
|
||
|
||
console.log('\n2️⃣ Checking ticket_types table...');
|
||
const { data: ticketTypesData, error: ticketTypesError } = await supabase
|
||
.from('ticket_types')
|
||
.select('*')
|
||
.eq('event_id', eventId)
|
||
.limit(1);
|
||
|
||
if (ticketTypesError) {
|
||
console.error('❌ Ticket types query error:', ticketTypesError);
|
||
} else {
|
||
console.log(`✅ Found ${ticketTypesData.length} ticket types`);
|
||
if (ticketTypesData.length > 0) {
|
||
console.log('Columns:', Object.keys(ticketTypesData[0]));
|
||
console.log('Sample:', ticketTypesData[0]);
|
||
}
|
||
}
|
||
|
||
console.log('\n3️⃣ Checking tickets table...');
|
||
const { data: ticketsData, error: ticketsError } = await supabase
|
||
.from('tickets')
|
||
.select('*')
|
||
.eq('event_id', eventId)
|
||
.limit(1);
|
||
|
||
if (ticketsError) {
|
||
console.error('❌ Tickets query error:', ticketsError);
|
||
} else {
|
||
console.log(`✅ Found ${ticketsData.length} tickets`);
|
||
if (ticketsData.length > 0) {
|
||
console.log('Columns:', Object.keys(ticketsData[0]));
|
||
console.log('Sample:', ticketsData[0]);
|
||
}
|
||
}
|
||
|
||
console.log('\n4️⃣ Testing the exact stats query...');
|
||
|
||
// Test the exact query from the stats API
|
||
const { data: testTickets, error: testError } = await supabase
|
||
.from('tickets')
|
||
.select(`
|
||
id,
|
||
ticket_type_id,
|
||
price,
|
||
checked_in,
|
||
scanned_at,
|
||
created_at
|
||
`)
|
||
.eq('event_id', eventId);
|
||
|
||
if (testError) {
|
||
console.error('❌ Stats query error:', testError);
|
||
} else {
|
||
console.log(`✅ Stats query successful: ${testTickets.length} tickets`);
|
||
if (testTickets.length > 0) {
|
||
console.log('Sample ticket:', testTickets[0]);
|
||
}
|
||
}
|
||
|
||
console.log('\n5️⃣ Testing ticket types query...');
|
||
const { data: testTicketTypes, error: testTicketTypesError } = await supabase
|
||
.from('ticket_types')
|
||
.select('id, quantity_available, price, name')
|
||
.eq('event_id', eventId);
|
||
|
||
if (testTicketTypesError) {
|
||
console.error('❌ Ticket types stats query error:', testTicketTypesError);
|
||
} else {
|
||
console.log(`✅ Ticket types query successful: ${testTicketTypes.length} types`);
|
||
if (testTicketTypes.length > 0) {
|
||
console.log('Sample type:', testTicketTypes[0]);
|
||
}
|
||
}
|
||
|
||
} catch (error) {
|
||
console.error('💥 Unexpected error:', error);
|
||
}
|
||
}
|
||
|
||
verifySchema(); |