fix: Implement comprehensive edit event button functionality and resolve authentication issues

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>
This commit is contained in:
2025-07-14 18:49:49 -06:00
parent b07ee8cdff
commit dbf4b11e81
216 changed files with 15891 additions and 468 deletions

227
create-test-user.cjs Normal file
View File

@@ -0,0 +1,227 @@
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:');
console.error(' - PUBLIC_SUPABASE_URL');
console.error(' - SUPABASE_SERVICE_ROLE_KEY');
process.exit(1);
}
console.log('🔑 Environment variables found');
console.log('Supabase URL:', supabaseUrl);
const supabase = createClient(supabaseUrl, supabaseServiceKey, {
auth: {
autoRefreshToken: false,
persistSession: false
}
});
async function createTestUser() {
const testEmail = 'tmartinez@gmail.com';
const testPassword = 'TestPassword123!';
console.log('\n🧪 Creating test user...');
console.log('Email:', testEmail);
try {
// Step 1: Create user in Supabase Auth
console.log('\n1⃣ Creating auth user...');
const { data: authData, error: authError } = await supabase.auth.admin.createUser({
email: testEmail,
password: testPassword,
email_confirm: true, // Skip email confirmation
user_metadata: {
name: 'Tyler Martinez'
}
});
if (authError) {
if (authError.message.includes('already been registered')) {
console.log('✓ User already exists in auth system');
// List users to find the existing user
const { data: usersData, error: listError } = await supabase.auth.admin.listUsers();
if (listError) {
console.error('❌ Error listing users:', listError);
return;
}
const existingAuthUser = usersData.users.find(u => u.email === testEmail);
if (!existingAuthUser) {
console.error('❌ Could not find existing user');
return;
}
console.log('✓ Found existing user:', existingAuthUser.id);
// Update password for testing
const { error: updateError } = await supabase.auth.admin.updateUserById(existingAuthUser.id, {
password: testPassword
});
if (updateError) {
console.log('⚠️ Could not update password:', updateError.message);
} else {
console.log('✓ Updated password for testing');
}
} else {
console.error('❌ Auth creation error:', authError);
return;
}
} else {
console.log('✓ Auth user created:', authData.user.id);
}
// Step 2: Check/create organization
console.log('\n2⃣ Setting up organization...');
let organizationId;
const { data: existingOrg, error: orgError } = await supabase
.from('organizations')
.select('id, name')
.limit(1)
.single();
if (orgError || !existingOrg) {
console.log('Creating test organization...');
const { data: newOrg, error: createOrgError } = await supabase
.from('organizations')
.insert({
name: 'Test Organization',
created_at: new Date().toISOString()
})
.select()
.single();
if (createOrgError) {
console.error('❌ Error creating organization:', createOrgError);
return;
}
organizationId = newOrg.id;
console.log('✓ Created organization:', organizationId);
} else {
organizationId = existingOrg.id;
console.log('✓ Using existing organization:', existingOrg.name, '(' + organizationId + ')');
}
// Step 3: Check/create user record
console.log('\n3⃣ Setting up user record...');
const { data: existingUser, error: userCheckError } = await supabase
.from('users')
.select('id, email, role, organization_id')
.eq('email', testEmail)
.single();
if (userCheckError && userCheckError.code !== 'PGRST116') {
console.error('❌ Error checking user:', userCheckError);
return;
}
if (!existingUser) {
console.log('Creating user record...');
const { data: newUser, error: createUserError } = await supabase
.from('users')
.insert({
email: testEmail,
name: 'Tyler Martinez',
role: 'admin',
organization_id: organizationId
})
.select()
.single();
if (createUserError) {
console.error('❌ Error creating user record:', createUserError);
return;
}
console.log('✓ Created user record:', newUser.id);
} else {
console.log('✓ User record exists:', existingUser.id);
// Update organization if needed
if (!existingUser.organization_id) {
const { error: updateError } = await supabase
.from('users')
.update({
organization_id: organizationId,
role: 'admin'
})
.eq('email', testEmail);
if (updateError) {
console.error('❌ Error updating user:', updateError);
return;
}
console.log('✓ Updated user with organization');
}
}
// Step 4: Create test event
console.log('\n4⃣ Creating test event...');
const { data: existingEvent, error: eventCheckError } = await supabase
.from('events')
.select('id, title, slug')
.eq('id', '7ac12bd2-8509-4db3-b1bc-98a808646311')
.single();
if (eventCheckError && eventCheckError.code !== 'PGRST116') {
console.log('Creating test event...');
const { data: userRecord } = await supabase
.from('users')
.select('id')
.eq('email', testEmail)
.single();
if (userRecord) {
const { data: newEvent, error: createEventError } = await supabase
.from('events')
.insert({
id: '7ac12bd2-8509-4db3-b1bc-98a808646311',
title: 'Test Event for Debug',
slug: 'test-event-debug',
venue: 'Test Venue',
start_time: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(), // Tomorrow
description: 'Test event for debugging authentication',
created_by: userRecord.id,
organization_id: organizationId
})
.select()
.single();
if (createEventError) {
console.log('⚠️ Could not create test event:', createEventError.message);
} else {
console.log('✓ Created test event:', newEvent.id);
}
}
} else {
console.log('✓ Test event already exists:', existingEvent.title);
}
console.log('\n🎉 Test user setup complete!');
console.log('=====================================');
console.log('Test credentials:');
console.log(' Email:', testEmail);
console.log(' Password:', testPassword);
console.log(' Organization:', organizationId);
console.log(' Role: admin');
console.log('\nYou can now test login with these credentials.');
} catch (error) {
console.error('💥 Unexpected error:', error);
}
}
createTestUser();