mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-22 07:51:13 -05:00
Add a script to backfill missing location data for already-approved parks from their submission data, and make it executable from the admin settings interface. Implement a backfill function (SQL migration) and an edge function to trigger it, plus UI integration in Admin Settings to initiate the process. Ensure only parks with approved submissions and location data are linked to new location records, and expose results in admin.
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import { createEdgeFunction } from '../_shared/edgeFunctionWrapper.ts';
|
|
import { edgeLogger } from '../_shared/logger.ts';
|
|
|
|
export default createEdgeFunction(
|
|
{
|
|
name: 'backfill-park-locations',
|
|
requireAuth: true,
|
|
},
|
|
async (req, context, supabase) => {
|
|
edgeLogger.info('Starting park location backfill', { requestId: context.requestId });
|
|
|
|
// Check if user is superuser
|
|
const { data: profile, error: profileError } = await supabase
|
|
.from('user_profiles')
|
|
.select('role')
|
|
.eq('id', context.user.id)
|
|
.single();
|
|
|
|
if (profileError || profile?.role !== 'superuser') {
|
|
edgeLogger.warn('Unauthorized backfill attempt', {
|
|
userId: context.user.id,
|
|
requestId: context.requestId
|
|
});
|
|
return new Response(
|
|
JSON.stringify({ error: 'Unauthorized: Superuser access required' }),
|
|
{ status: 403, headers: { 'Content-Type': 'application/json' } }
|
|
);
|
|
}
|
|
|
|
// Execute the backfill function
|
|
const { data, error } = await supabase.rpc('backfill_park_locations');
|
|
|
|
if (error) {
|
|
edgeLogger.error('Error running park location backfill', {
|
|
error,
|
|
requestId: context.requestId
|
|
});
|
|
throw error;
|
|
}
|
|
|
|
edgeLogger.info('Park location backfill completed', {
|
|
results: data,
|
|
requestId: context.requestId
|
|
});
|
|
|
|
return new Response(
|
|
JSON.stringify({
|
|
success: true,
|
|
...data,
|
|
}),
|
|
{ headers: { 'Content-Type': 'application/json' } }
|
|
);
|
|
}
|
|
);
|