mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 06:11:11 -05:00
Fix park submission locations
Implement Phase 1 of the JSONB violation fix by creating the `park_submission_locations` table. This includes migrating existing data from `park_submissions.temp_location_data` and updating relevant code to read and write to the new relational table. The `temp_location_data` column will be dropped after data migration.
This commit is contained in:
@@ -855,8 +855,7 @@ serve(withRateLimit(async (req) => {
|
||||
action: 'approval_park_data_debug',
|
||||
itemId: item.id,
|
||||
hasLocationId: !!itemData.location_id,
|
||||
hasTempLocationData: !!itemData.temp_location_data,
|
||||
tempLocationDataKeys: itemData.temp_location_data ? Object.keys(itemData.temp_location_data) : [],
|
||||
parkSubmissionId: itemData.id,
|
||||
parkSubmissionKeys: Object.keys((item as any).park_submission || {}),
|
||||
requestId: tracking.requestId
|
||||
});
|
||||
@@ -1576,47 +1575,55 @@ function normalizeParkTypeValue(data: any): any {
|
||||
|
||||
async function createPark(supabase: any, data: any): Promise<string> {
|
||||
const submitterId = data._submitter_id;
|
||||
const parkSubmissionId = data.id; // Store the park_submission.id for location lookup
|
||||
let uploadedPhotos: any[] = [];
|
||||
|
||||
// Create location if temp_location_data exists and location_id is missing
|
||||
if (data.temp_location_data && !data.location_id) {
|
||||
edgeLogger.info('Creating location from temp data', {
|
||||
action: 'approval_create_location',
|
||||
locationName: data.temp_location_data.name
|
||||
});
|
||||
|
||||
const { data: newLocation, error: locationError } = await supabase
|
||||
.from('locations')
|
||||
.insert({
|
||||
name: data.temp_location_data.name,
|
||||
street_address: data.temp_location_data.street_address || null,
|
||||
city: data.temp_location_data.city,
|
||||
state_province: data.temp_location_data.state_province,
|
||||
country: data.temp_location_data.country,
|
||||
latitude: data.temp_location_data.latitude,
|
||||
longitude: data.temp_location_data.longitude,
|
||||
timezone: data.temp_location_data.timezone,
|
||||
postal_code: data.temp_location_data.postal_code
|
||||
})
|
||||
.select('id')
|
||||
|
||||
// Create location if park_submission_locations exists and location_id is missing
|
||||
if (!data.location_id) {
|
||||
// Try to fetch location from relational table
|
||||
const { data: locationData, error: locationFetchError } = await supabase
|
||||
.from('park_submission_locations')
|
||||
.select('*')
|
||||
.eq('park_submission_id', parkSubmissionId)
|
||||
.single();
|
||||
|
||||
if (locationError) {
|
||||
throw new Error(`Failed to create location: ${locationError.message}`);
|
||||
if (locationData && !locationFetchError) {
|
||||
edgeLogger.info('Creating location from relational table', {
|
||||
action: 'approval_create_location',
|
||||
locationName: locationData.name
|
||||
});
|
||||
|
||||
const { data: newLocation, error: locationError } = await supabase
|
||||
.from('locations')
|
||||
.insert({
|
||||
name: locationData.name,
|
||||
street_address: locationData.street_address || null,
|
||||
city: locationData.city,
|
||||
state_province: locationData.state_province,
|
||||
country: locationData.country,
|
||||
latitude: locationData.latitude,
|
||||
longitude: locationData.longitude,
|
||||
timezone: locationData.timezone,
|
||||
postal_code: locationData.postal_code
|
||||
})
|
||||
.select('id')
|
||||
.single();
|
||||
|
||||
if (locationError) {
|
||||
throw new Error(`Failed to create location: ${locationError.message}`);
|
||||
}
|
||||
|
||||
data.location_id = newLocation.id;
|
||||
|
||||
edgeLogger.info('Location created successfully', {
|
||||
action: 'approval_location_created',
|
||||
locationId: newLocation.id,
|
||||
locationName: locationData.name
|
||||
});
|
||||
}
|
||||
|
||||
data.location_id = newLocation.id;
|
||||
|
||||
edgeLogger.info('Location created successfully', {
|
||||
action: 'approval_location_created',
|
||||
locationId: newLocation.id,
|
||||
locationName: data.temp_location_data.name
|
||||
});
|
||||
}
|
||||
|
||||
// Clean up temp data
|
||||
delete data.temp_location_data;
|
||||
|
||||
// Transform images object if present
|
||||
if (data.images) {
|
||||
const { uploaded, banner_assignment, card_assignment } = data.images;
|
||||
@@ -1653,36 +1660,44 @@ async function createPark(supabase: any, data: any): Promise<string> {
|
||||
parkId = data.park_id;
|
||||
delete data.park_id; // Remove ID from update data
|
||||
|
||||
// ✅ FIXED: Handle location updates from temp_location_data
|
||||
if (data.temp_location_data && !data.location_id) {
|
||||
edgeLogger.info('Creating location from temp data for update', {
|
||||
action: 'approval_create_location_update',
|
||||
locationName: data.temp_location_data.name
|
||||
});
|
||||
|
||||
const { data: newLocation, error: locationError } = await supabase
|
||||
.from('locations')
|
||||
.insert({
|
||||
name: data.temp_location_data.name,
|
||||
street_address: data.temp_location_data.street_address || null,
|
||||
city: data.temp_location_data.city,
|
||||
state_province: data.temp_location_data.state_province,
|
||||
country: data.temp_location_data.country,
|
||||
latitude: data.temp_location_data.latitude,
|
||||
longitude: data.temp_location_data.longitude,
|
||||
timezone: data.temp_location_data.timezone,
|
||||
postal_code: data.temp_location_data.postal_code
|
||||
})
|
||||
.select('id')
|
||||
// ✅ FIXED: Handle location updates from park_submission_locations
|
||||
if (!data.location_id) {
|
||||
// Try to fetch location from relational table
|
||||
const { data: locationData, error: locationFetchError } = await supabase
|
||||
.from('park_submission_locations')
|
||||
.select('*')
|
||||
.eq('park_submission_id', parkSubmissionId)
|
||||
.single();
|
||||
|
||||
if (locationError) {
|
||||
throw new Error(`Failed to create location: ${locationError.message}`);
|
||||
if (locationData && !locationFetchError) {
|
||||
edgeLogger.info('Creating location from relational table for update', {
|
||||
action: 'approval_create_location_update',
|
||||
locationName: locationData.name
|
||||
});
|
||||
|
||||
const { data: newLocation, error: locationError } = await supabase
|
||||
.from('locations')
|
||||
.insert({
|
||||
name: locationData.name,
|
||||
street_address: locationData.street_address || null,
|
||||
city: locationData.city,
|
||||
state_province: locationData.state_province,
|
||||
country: locationData.country,
|
||||
latitude: locationData.latitude,
|
||||
longitude: locationData.longitude,
|
||||
timezone: locationData.timezone,
|
||||
postal_code: locationData.postal_code
|
||||
})
|
||||
.select('id')
|
||||
.single();
|
||||
|
||||
if (locationError) {
|
||||
throw new Error(`Failed to create location: ${locationError.message}`);
|
||||
}
|
||||
|
||||
data.location_id = newLocation.id;
|
||||
}
|
||||
|
||||
data.location_id = newLocation.id;
|
||||
}
|
||||
delete data.temp_location_data;
|
||||
|
||||
const normalizedData = normalizeParkTypeValue(normalizeStatusValue(data));
|
||||
const sanitizedData = sanitizeDateFields(normalizedData);
|
||||
|
||||
Reference in New Issue
Block a user